访问设置时Android安全性exception
我需要从我的应用程序中打开使用统计信息设置。 对于大多数手机,一切工作正常:
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
但是,有一些像华为Y6 Pro这样的手机引发安全exceptionjava.lang.SecurityException: Permission Denial: starting Intent { act=android.settings.USAGE_ACCESS_SETTINGS cmp=com.android.settings/.Settings$UsageAccessSettingsActivity } from ProcessRecord{3f032f8b 18712:com.example.pro/u0a924} (pid=18712, uid=10924) not exported from uid 1000
有没有办法来检查我是否可以执行startActivity
,它不会抛出任何exception?
我想你可以检查一下,如果下面的意图可以使用这个来执行
科特林:
fun canPerformIntent(context: Context, intent: Intent): Boolean { val mgr = context.packageManager val list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) return list.size > 0 }
Java的:
public static boolean canPerformIntent(Context context, Intent intent) { PackageManager mgr = context.getPackageManager(); List list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; }
并像这样使用
if (canPerformIntent(this, Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS))) { //TODO: start the intent }
更新
试试这个:
在你的活动清单中添加这个