Skip to main content

Granting SYSTEM_ALERT_WINDOW on Android 6.0/Marshmallow

From android 6.0 this permission needs to grant dynamically,

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

Throwing below permission denied error on 6.0,

Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@86fb55b -- permission denied for this window type

Solution :-

Requesting Overlay permission as below,

if(!Settings.canDrawOverlays(this)){
// ask for setting
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_PERMISSION);
}

Check for the result,

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_OVERLAY_PERMISSION) {
        if (Settings.canDrawOverlays(this)) {
            // permission granted...
        }else{
            // permission not granted...
}
    }
}

Comments

Popular posts from this blog

Launch an Android application on Bootup

If you want to start an android application on device restarts, you need to listen for BOOT_COMPLETED broadcast in the manifest file and launch the Launcher activity in onreceive of BOOT_COMPLETED broadcast receiver. Follow below steps to launch activity on device boot up :- 1. Register for Boot completed receiver in Android Manifest file. Add below Permission to receive BOOT_COMPLETED broadcast, <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> Register for Boot completed broadcast receiver , <receiver android:name="AppAutostartReceiver" android:enabled="true" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 2. Add custom Broadcast receiver in the application, public class AppAutostartReceiver extends BroadcastReceiver { @Override public void onReceive(Context cont...

Working with Android Shared Preferences

          Shared preferences allows android application to save data in the form of "Key-Value" pair, shared preferences will be an , XML file which will be stored in applications internal storage space under " shared_prefs " folder under data/data/(package name of the application) . Shared Preferences won't clear data after "force close" of an application, it will get cleared only in case of user clears the application data (under settings -> apps -> clear Data) or uninstall an application. Shared preferences can be edited using SharedPreferences.Editor class. APIs to access shared preference below, getDefaultSharedPreferences()  :- Return default shared preference file which is used by PrefrenceManager in the given context. getSharedPreferences(String my_prf_name, int mode) :- Returns shared preference file of the given name. Below are  sample code snippets, 1. Saving data in to the shared preferences, //Retrieve shared prefere...