Rustam Ibragimov
Rustam Ibragimov

Reputation: 2707

Android security exception when accessing settings

I need to open Usage Stats settings from my application. For most of the phones, everything works fine:

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));

However, there are some phones like Huawei Y6 Pro that throws Security Exception java.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

Is there a way to check if I can execute startActivity and it will not throw any exception?

Upvotes: 0

Views: 856

Answers (2)

Nandha
Nandha

Reputation: 377

Updated

Try with this :

Add this in ur activity's manifest

   <activity
        android:name=".MainActivity"

        android:exported="true">


    </activity>

Upvotes: 0

Arpan Sarkar
Arpan Sarkar

Reputation: 2406

I think you can check that if the following intent can be performed using this

Kotlin:

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<ResolveInfo> list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    }

and using like this

if (canPerformIntent(this, Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS))) {
            //TODO: start the intent
        }

Upvotes: 2

Related Questions