java.lang.SecurityException:权限拒绝:启动 Intent {act=android.settings.USAGE_ACCESS_SETTINGS}

java.lang.SecurityException: Permission Denial: starting Intent {act=android.settings.USAGE_ACCESS_SETTINGS}

当尝试以 final Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); 意图 startActivityForResult(intent, requestCode); 时,我得到 java.lang.SecurityException。有趣的是,此崩溃仅发生在 Android 5.1 - 5.1.1 的华为上 我没有华为设备。你能给我建议一下吗?

堆栈跟踪

Fatal Exception: java.lang.SecurityException: Permission Denial: starting Intent { act=android.settings.USAGE_ACCESS_SETTINGS cmp=com.android.settings/.Settings$UsageAccessSettingsActivity } from ProcessRecord{11b5f1a1 19764:com.myproject.my/u0a167} (pid=19764, uid=10167) not exported from uid 1000
       at android.os.Parcel.readException(Parcel.java:1546)
       at android.os.Parcel.readException(Parcel.java:1499)
       at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2448)
       at android.app.Instrumentation.execStartActivity(Instrumentation.java:1496)
       at android.app.Activity.startActivityForResult(Activity.java:3794)
       at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:77)
       at android.app.Activity.startActivityForResult(Activity.java:3755)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
       at com.myproject.my.utils.PermissionsHelper.onClick(PermissionsHelper.java:134)
       at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:135)
       at android.app.ActivityThread.main(ActivityThread.java:5298)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)

出于某种原因,华为为此 activity 保留了 <intent-filter>,但他们将其标记为未导出。您无法启动 activity。您所能做的就是捕获异常并向用户解释您无法导航到那里。

根据 android 开发者文档。

In some cases, a matching Activity may not exist, so ensure you safeguard against this.

Link : ACTION_USAGE_ACCESS_SETTINGS