以编程方式在Android上输入类似*#*#4636#*#*的密码

时间:2012-03-19 11:15:55

标签: android

在许多Android设备上,您可以通过输入

进入Phone应用程序的秘密设置菜单

*#*#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);

但它只是尝试拨打电话,当然会失败,挂机并关闭手机应用程序。

编辑:手机*#*#4636#*#*以“未知”的形式保存到我的联系人列表,但是通话失败了。事实上,只有当您在手机应用程序中的按钮上手动输入而不按最后一次调用时,密码才有效。它可能只是Phone应用程序的隐藏功能,与调用无关吗? 如果是这样,可以通过编程方式打开手机应用程序并模拟按钮上的输入。

根据这篇文章 Programmatically press a button in another appplication's activity

这应该是不可能的,因为如果非根电话上的任何应用程序只能启动其他应用程序并在那里按某些内容,它就可以接管整个设备并做坏事。

以下是一些更多细节,但我想这篇文章有点旧,即使它有效,它可能已经在当前的Android版本中进行了更改: http://mylifewithandroid.blogspot.de/2009/01/generating-keypresses-programmatically.html

那么,没有更简单的方法来输入密码?

5 个答案:

答案 0 :(得分:19)

是否也可以通过编程方式打开这些内容?

    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   来自pid的flg = 0x10000000 cmp = com.android.settings / .TestingSettings}   4257

答案 1 :(得分:18)

密码存在并且独立于拨号器应用程序工作。拨号器应用程序只为这些代码提供了方便的界面。它识别特殊字符串,然后调用特殊意图来调用该操作。您不应该使用拨号程序来调用这些对话框。相反,您可以直接自己调用密码,就像内部拨号器一样:

调用内置密码:

输入代码时拨号器的真正作用是提取*#*#和#*#*之间的数字,然后广播以下意图:

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

修改:修复了原始代码中的错误(请参阅注释)

答案 2 :(得分:5)

试试这个

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

最后,您必须使用Uri.encode()

对'#'进行编码

答案 3 :(得分:3)

ACTION_DIAL将用户发送给具有给定代码的拨号程序(它不会调用)。那就是:

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

似乎代码是拨打,而不是调用

答案 4 :(得分:0)

寻找这个

Intent intent = new Intent("android.intent.action.MAIN");
    intent.setClassName("com.android.settings", "com.android.settings.Settings$TestingSettingsActivity");
    startActivity(intent);