访问设置时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 } 

更新

试试这个:

在你的活动清单中添加这个