Программно введите секретный код, например * # * # 4636 # * # * на Android

На многих устройствах Android вы можете войти в секретное меню настроек из приложения "Телефон" , набрав

* # * # 4636 # * # *

http://technology-headlines.com/2010/09/17/4636-android-secret-codes/

Существуют и другие коды.

Можно ли также программно открыть этот материал?

Я пробовал это:

Intent intent = new Intent(Intent.ACTION_CALL);    
intent.setData(Uri.parse("tel:*#*#4636#*#*"));
startActivity(intent);

Но он просто пытается инициировать телефонный звонок и, конечно, терпит неудачу, зависает и закрывает приложение "Телефон" .

EDIT: телефон * # * # 4636 # * # * будет сохранен в моем списке контактов как "Неизвестный", но вызов просто не удался. Фактически секретный код работает только при вводе вручную на кнопках в приложении "Телефон" , не нажимая "Вызов" в конце. Возможно, это просто скрытая функция приложения "Телефон" , которая не имеет никакого отношения к вызову? Если это так, можно было бы открыть приложение "Телефон" программно и смоделировать ввод текста на кнопках.

Согласно этому сообщению Программно нажмите кнопку в действии другого приложения

это НЕ должно быть возможным, потому что, если какое-либо приложение на некорневом телефоне может запускать другие приложения и нажимать что-то там, оно может взять под контроль все устройство и делать плохие вещи.

Вот несколько подробностей, но я думаю, что пост немного стар, и даже если он сработает, он может быть изменен в текущих версиях Android: http://mylifewithandroid.blogspot.de/2009/01/generating-keypresses-programmatically.html

Итак, не проще ли вводить секретный код?

Ответ 1

Можно ли также программно открыть этот материал?

Да

    Intent in = new Intent(Intent.ACTION_MAIN);
    in.setClassName("com.android.settings", "com.android.settings.TestingSettings");
    startActivity(in);

Вам просто нужно посмотреть выход logcat, чтобы узнать, что действительно открывает эта волшебная комбинация:

I/ActivityManager (31362): START {act = android.intent.action.MAIN flg = 0x10000000 cmp = com.android.settings/.TestingSettings} из pid 4257

Ответ 2

Существуют секретные коды и работают независимо от приложения дозвона. Приложение для набора номера предоставляет удобный интерфейс для этих кодов. Он распознает специальную строку и затем вызывает особое намерение вызвать действие. Вы не должны использовать dialer для вызова этих диалогов. Вместо этого вы можете напрямую обращаться к секретным кодам, как это делает внутренний абонент:

Вызов встроенных секретных кодов:

Что действительно делает набор, когда вы вводите код, выбирая номер между * # * # и # * # * и затем передавая следующее намерение:

sendBroadcast(new Intent("android.provider.Telephony.SECRET_CODE", Uri.parse("android_secret_code://4636")));

Зарегистрируйте свои секретные коды (если хотите):

Вы даже можете зарегистрировать свои действия с секретным кодом, используя:

<action android:name="android.provider.Telephony.SECRET_CODE" /> 
<data android:scheme="android_secret_code" android:host="4636" /> 

Источник: http://android.amberfog.com/?p=422

Изменить: Исправлена ​​ошибка в исходном коде (см. комментарий)

Ответ 3

попробуйте это

String ussdCode = "*" +Uri.encode ("#")+"*"+Uri.encode ("#")+ "4636" + Uri.encode ("#")+"*"+Uri.encode ("#")+"*";
startActivity (new Intent ("android.intent.action.CALL", Uri.parse ("tel:" + ussdCode)));

Наконец, вы должны закодировать '#', используя Uri.encode()

Ответ 4

ACTION_DIAL отправляет пользователя на номер с указанным кодом (он не вызывает). Итак, это будет:

Intent intent = new Intent(Intent.ACTION_DIAL);    
intent.setData(Uri.parse("tel:*#*#4636#*#*"));
startActivity(intent);

Похоже, что коды должны набираться, а не называться