我如何从 phone 拨号程序中调用隐藏的应用程序?
how can i recall a hidden app from phone dialer?
我的最终项目要求必须隐藏应用程序,除非在 phone 拨号程序中输入一些代码(例如:*123#),否则永远不会再次打开,你们能帮我完成这个任务吗?
Android 中没有这样的功能。您也许可以使用自定义主屏幕来执行此操作,但默认启动器中没有 "hide this app" 功能。
这有点棘手,有起有落,但您基本上需要做的是:
- 安装应用程序时,您需要以编程方式禁用应用程序图标,这样您就无法手动打开它。
- 使用
PROCESS_OUTGOING_CALLS
意图过滤器注册 BroadcastReceiver(不要忘记设置 uses-permissions
)。
- 在接收器中,监听每个拨打的号码,当它与您的号码匹配时您需要再次激活应用程序图标然后您使用可能的额外数据启动 activity 以便稍后处理。
- 处理完 activity 中的数据后,记得再次 停用图标 。
要以编程方式禁用图标,请使用:
PackageManager packageManager = getPackageManager();
ComponentName componentName = new ComponentName(this, MainActivity.class);
packageManager.setComponentEnabledSetting(
componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
);
启用它:
PackageManager packageManager = context.getPackageManager();
ComponentName componentName = new ComponentName(context, MainActivity.class);
packageManager.setComponentEnabledSetting(
componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
);
在您的接收器中获取您需要使用的拨号号码:
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
// Validate and start your activity here
// To start an activity from a receiver you need to use the flag FLAG_ACTIVITY_NEW_TASK in your intent
}
注意:以编程方式隐藏图标后,您可能想要 finish()
activity 以便它首先自动关闭 运行.
P.S 我有这个的工作样本,所以请放心,因为我已经测试过它确实有效,遗憾的是我不能在你的最终项目中喂你。不要犹豫,尽管问任何事情。祝你好运
我的最终项目要求必须隐藏应用程序,除非在 phone 拨号程序中输入一些代码(例如:*123#),否则永远不会再次打开,你们能帮我完成这个任务吗?
Android 中没有这样的功能。您也许可以使用自定义主屏幕来执行此操作,但默认启动器中没有 "hide this app" 功能。
这有点棘手,有起有落,但您基本上需要做的是:
- 安装应用程序时,您需要以编程方式禁用应用程序图标,这样您就无法手动打开它。
- 使用
PROCESS_OUTGOING_CALLS
意图过滤器注册 BroadcastReceiver(不要忘记设置uses-permissions
)。 - 在接收器中,监听每个拨打的号码,当它与您的号码匹配时您需要再次激活应用程序图标然后您使用可能的额外数据启动 activity 以便稍后处理。
- 处理完 activity 中的数据后,记得再次 停用图标 。
要以编程方式禁用图标,请使用:
PackageManager packageManager = getPackageManager();
ComponentName componentName = new ComponentName(this, MainActivity.class);
packageManager.setComponentEnabledSetting(
componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
);
启用它:
PackageManager packageManager = context.getPackageManager();
ComponentName componentName = new ComponentName(context, MainActivity.class);
packageManager.setComponentEnabledSetting(
componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
);
在您的接收器中获取您需要使用的拨号号码:
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
// Validate and start your activity here
// To start an activity from a receiver you need to use the flag FLAG_ACTIVITY_NEW_TASK in your intent
}
注意:以编程方式隐藏图标后,您可能想要 finish()
activity 以便它首先自动关闭 运行.
P.S 我有这个的工作样本,所以请放心,因为我已经测试过它确实有效,遗憾的是我不能在你的最终项目中喂你。不要犹豫,尽管问任何事情。祝你好运