Программно введите секретный код, например * # * # 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);
Похоже, что коды должны набираться, а не называться