Java 访问设置时出现Android安全异常

Java 访问设置时出现Android安全异常,java,android,android-securityexception,Java,Android,Android Securityexception,我需要从我的应用程序中打开使用情况统计设置。对于大多数手机,一切正常: startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)); 然而,像华为Y6 Pro这样的一些手机会从ProcessRecord{3f032f8b 18712:com.example.Pro/u0a924}(pid=18712,uid=10924)抛出安全异常java.lang.SecurityException:Permission Denial:s

我需要从我的应用程序中打开使用情况统计设置。对于大多数手机,一切正常:

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
然而,像华为Y6 Pro这样的一些手机会从ProcessRecord{3f032f8b 18712:com.example.Pro/u0a924}(pid=18712,uid=10924)抛出安全异常
java.lang.SecurityException:Permission Denial:starting Intent{act=android.settings.USAGE\u ACCESS\u settings cmp=com.android.settings/.settings$UsageAccessSettingsActivity}未从uid 1000导出


有没有办法检查我是否可以执行
startActivity
,并且它不会引发任何异常

更新

试试这个:

将此添加到您的活动清单中

   <activity
        android:name=".MainActivity"

        android:exported="true">


    </activity>

我想您可以检查一下,是否可以使用此

科特林:

fun canPerformIntent(context: Context, intent: Intent): Boolean {
    val mgr = context.packageManager
    val list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
    return list.size > 0
}
爪哇:


我想我需要把它放在activity com.android.settings/.settings$UsageAccessSettingsActivity中。然而,我不能这样做。
public static boolean canPerformIntent(Context context, Intent intent) {
        PackageManager mgr = context.getPackageManager();
        List<ResolveInfo> 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
        }