Запрещение исходящих вызовов войсмейл в Android (рутованный аппарат).

Я ненавижу войсмейл. Как правило, все сообщения сводятся к "перезвони мне" и прослушивание их - бесполезная трата времени и денег. Обычно я отключаю голосовые сообщения как функцию через оператора сотовой связи. Это решает проблему в том смысле, что входящие звонки не переадресуются на войсмейл и мне не приходится выслушивать и стирать ненужные сообщения. Казалось бы, и всё, ан нет - обзаведясь смартфоном, я обнаружил кнопку вызова войсмейла рядом с кнопкой совершения звонка:
Android dialer call and voicemail buttons
Опасное соседство, - холодным зимним днём я два раза подряд промахнулся и позвонил на свой войсмейл. Оказывается, несмотря на то, что переадресовка сообщений запрещена, я всё равно могу позвонить и проверить отсутствующие сообщения. 10 пенсов каждый звонок. Нет, спасибо.

Настройка в Settings->Call settings->Call Feature Settings->Voicemail выглядит так, как будто можно поменять номер для звонка на войсмейл. Ну что ж, если нельзя запретить, то давайте поменяем номер на несуществующий, поставим там "0" или даже "1". Не получается - телефон переадресует меня к оператору сообщением "Voicemail number change unsuccessful. Please contact your operator if this problem persists." Ну уж нет, имея опыт общения с поддержкой пользователей, не думаю, что они вообще смогут понять что и зачем мне нужно. Проведя пару часов, исследуя этот вопрос, я обнаружил, что номер голосовой почты (901 в моём случае) на самом деле берётся из файла voicemail-conf.xml, находящегося в директории /data/cust/xml/ на системном разделе телефона. Вот в этом отрывке:

<!-- DTS2012032704392 fanluofei 20120327 begin -->
<voicemail numeric="23410"
    carrier="O2 - UK"
    vmnumber="901"
    vmtag="voicemail"
/>
<!-- DTS2012032704392 fanluofei 20120327 end -->

Всё, что нужно - удалить или закомментировать эту секцию, убрав последний символ "больше" из первой строчки:

<!-- DTS2012032704392 fanluofei 20120327 begin --
<voicemail numeric="23410"
    carrier="O2 - UK"
    vmnumber="901"
    vmtag="voicemail"
/>
<!-- DTS2012032704392 fanluofei 20120327 end -->

Если у вас это получается, то отлично, но в большинстве аппаратов этот файл не так просто отредактировать, даже если у вас есть рут-права на телефон и "правильные" инструменты для работы с файлами. Вот, что нужно сделать по порядку:

  1. Установите Android SDK. Для целей этой статьи нужно только приложение Android Debug Bridge (adb.exe), но SDK может пригодиться в будущем для разных трюков с телефоном.
  2. Запустите cmd.exe и перейдите в директорию установки Android SDK. Путь к этой директории показывается сверху запущенного Android SDK Manager. Потом запустите "adb.exe" с параметром "shell" в командной строке Windows:
    C:\Users\YourUserName\AppData\Local\Android\android-sdk\platform-tools>adb shell
    $
    
  3. Если не вдаваться в подробности, то вы не можете редактировать файл /data/cust/xml/voicemail-conf.xml, поскольку вся директория /data/cust/ является символической ссылкой (symlink) для директории /cust/o2/uk/ в моём случае или какой там у вас оператор, такая будет и директория, и вот эта директория /cust/ подключена в режиме только для чтения. Наберите "mount" в командной строке adb и смотрите сами:
    C:\Users\YourUserName\AppData\Local\Android\android-sdk\platform-tools>adb shell
    $ mount
    mount
    rootfs / rootfs ro,relatime 0 0
    tmpfs /dev tmpfs rw,relatime,mode=755 0 0
    devpts /dev/pts devpts rw,relatime,mode=600 0 0
    proc /proc proc rw,relatime 0 0
    sysfs /sys sysfs rw,relatime 0 0
    none /acct cgroup rw,relatime,cpuacct 0 0
    tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
    tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
    none /dev/cpuctl cgroup rw,relatime,cpu 0 0
    /dev/block/mtdblock4 /system yaffs2 ro,relatime 0 0
    /dev/block/mtdblock6 /data yaffs2 rw,nosuid,nodev,relatime 0 0
    /dev/block/mtdblock5 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
    /dev/block/mtdblock7 /data/HWUserData yaffs2 rw,nosuid,nodev,relatime 0 0
    /dev/block/mtdblock8 /cust yaffs2 ro,relatime 0 0
    hwvefs /data/huawei_hwvefs fuse.hwvefs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0
    ...
    
  4. Вам нужно понять, что подключено под именем "/cust", в моём случае, это строка
    /dev/block/mtdblock8 /cust yaffs2 ro,relatime 0 0
    

    "ro" здесь означает "read-only" (только для чтения). Теперь переподключите её с правом записи (для этого понадобятся права superuser):

    $ su
    su
    # mount -ro remount,rw /dev/block/mtdblock8 /cust
    mount -ro remount,rw /dev/block/mtdblock8 /cust
    
  5. Всё, теперь этот файл можно редактировать. Он находится в директории /cust/НазваниеВашегоОператора/xml, откройте его любым редактором или скачайте ES File Explorer File Manager, если у вас нет своих предпочтений. Теперь удалите или закомментируйте секцию для своего оператора и номер войсмейла сбросится:
    Android: Voicemail number not set
    Теперь, если будет необходимость, можно его поменять вручную, телефон не станет возражать.