在 Android 上以编程方式输入密码,如 \*#\*#4636#\*#\*

新手上路,请多包涵

在许多 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);

但它只是试图发起一个电话呼叫,当然失败了,挂断电话并关闭电话应用程序。

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

根据这篇文章以 编程方式按下另一个应用程序活动中的按钮

这应该是不可能的,因为如果非 root 手机上的任何应用程序可以启动其他应用程序并在那里按下某些东西,它可能会接管整个设备的控制权并做坏事。

这里有一些更多的细节,但我猜这个帖子有点旧,即使它有效,它也可能在当前的 Android 版本中发生了变化:http: //mylifewithandroid.blogspot.de/2009/01/generating-keypresses-programmatically.html

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

原文由 iseeall 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 750
2 个回答

是否也可以以编程方式打开这些东西?

是的

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

您只需要查看 logcat 输出即可了解此神奇组合实际打开的内容:

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

原文由 Pointer Null 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

调用内置密码:

当您输入代码时,拨号程序真正做的是提取 \*#\*# 和 #\*#\* 之间的号码,然后广播以下意图:

 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

编辑: 修正了原始代码中的一个错误(见评论)

原文由 aKzenT 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题