SVM*_*SVM 4 sms android telephony android-intent android-4.4-kitkat
我有一个应用程序需要临时访问设备的 SMS。在 KitKat 及更高版本中,此访问权限仅授予默认 SMS 应用程序,因此我使用:
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
这会弹出一个对话框,询问用户是否让我的应用程序成为默认的 SMS 应用程序。到现在为止还挺好。问题是,一旦我的应用程序完成其操作,我必须再次询问用户,他们是否要将以前的应用程序恢复为默认的 SMS 应用程序。
我想要一种避免第二个对话框的方法,也许是让我的应用程序告诉 Android 操作系统它不再希望成为默认的 SMS 应用程序,以便以前的应用程序可以再次自动接管。我知道 Android 支持这一点,因为如果我在我的应用程序是默认 SMS 应用程序的情况下卸载它,Android 将自动恢复到之前的应用程序,无需用户输入。有什么方法可以在不卸载的情况下复制这种放弃控制的行为?
要成为默认消息应用程序,您的应用程序必须在清单中注册某些活动组件。禁用其中任何一项都会使您的应用不符合条件,系统应自动恢复默认设置。我们可以使用该PackageManager#setComponentEnabledSetting()方法禁用清单注册组件。
例如,如果您为该SMS_DELIVER操作注册的接收器名为SmsReceiver:
getPackageManager()
.setComponentEnabledSetting(new ComponentName(this, SmsReceiver.class),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
显然,在您的应用程序再次设置为默认值之前,您需要重新启用该组件,您可以通过调用上述方法并将其PackageManager.COMPONENT_ENABLED_STATE_ENABLED作为第二个参数来实现。
| 归档时间: |
|
| 查看次数: |
611 次 |
| 最近记录: |