Android Concessione dell'autorizzazione SYSTEM_ALERT_WINDOW su Android 6.0 e versioni successive

Esempio

Da Android 6.0 questa autorizzazione deve essere concessa in modo dinamico,

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

Gettare sotto l'autorizzazione ha negato l'errore su 6.0,

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

Soluzione: -

Richiesta di permesso Overlay come di seguito,

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);
}

Controlla il risultato,

@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...
        }
    }
}