SYSTEM_ALERT_WINDOW – Cómo obtener este permiso automáticamente en Android 6.0 y targetSdkVersion 23

Facebook, Evernote, Pocket – todas las aplicaciones obtienen este permiso en Android 6.0 automáticamente, aunque apuntan a 23 ( targetSdkVersion=23 ).

Ha habido mucha documentación con respecto al nuevo modelo de permiso de Marshmallow. Uno de ellos es SYSTEM_ALERT_WINDOW sido 'promovido' a clase de permiso 'above dangerous', requiriendo así una intervención especial del usuario para que las aplicaciones se concedan con ellas. Si la aplicación tiene targetSdkVersion 22 o inferior, app obtiene este permiso automáticamente (si se solicita en el manifiesto).

Sin embargo, he notado algunas aplicaciones que reciben este permiso, sin necesidad de enviar al usuario a la página especial de configuración de Draw over other apps permiso de Draw over other apps . Vi Facebook, Evernote, Pocket – y tal vez hay más.

Alguien sabe cómo se puede otorgar este permiso a una aplicación sin que el usuario pase por Settings -> Apps -> Draw over other apps ?

Gracias

Es un nuevo comportamiento introducido en Marshmallow 6.0.1 .

Todas las aplicaciones que soliciten el permiso SYSTEM_ALERT_WINDOW y que se instalen a través de Play Store (se requiere versión 6.0.5 o posterior), habrán concedido el permiso automáticamente.

Si en cambio la aplicación se carga de forma indirecta, el permiso no se concede automáticamente. Puede intentar descargar e instalar el Evernote APK de apkmirror.com . Como puede ver, debe conceder manualmente el permiso en Settings -> Apps -> Draw over other apps .

Estos son los commits [1] [2] que permiten a Play Store dar la concesión automática del permiso SYSTEM_ALERT_WINDOW .

Yeh Después de Marshmallow vienen Android hacer más nivel de seguridad, pero para

 SYSTEM_ALERT_WINDOW 

Usted puede mostrar la acción flotante y cualquier cosa Usted puede Forzar al usuario a dar permiso para ello Siguiendo códigos en su método de Oncreate () Ponga este código después de setContentView

 / // Check if Android M or higher if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ // Show alert dialog to the user saying a separate permission is needed // Launch the settings activity if the user prefers Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivity(myIntent); } 

La acción ACTION_MANAGE_OVERLAY_PERMISSION inicia directamente la pantalla de permiso "Dibujar sobre otras aplicaciones".


Editar

Hello My Above Code trabajo 100% Correcto

Pero acabo de encontrar que muchos chicos siguen buscando que como puede permitir ACTION_MANAGE_OVERLAY_PERMISSION permanentemente como Si el usuario tiene permiso Permiso Una vez, entonces no lo pida cada vez que abra la aplicación para escuchar la solución para usted- 1) Comprobar es dispositivo tiene api 23 +

2) si 23 + api luego comprueba si el usuario tiene permiso o no

3) si había permitido una vez no lo lleve a Settings.ACTION_MANAGE_OVERLAY_PERMISSION y si no lo ha permitido todavía pide permiso de ejecución permiso

  Put below line in in your Oncreate() method Put this after setContentView checkPermission(); 

Ahora ponga el código debajo en onActivityResult

  @TargetApi(Build.VERSION_CODES.M) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) { if (!Settings.canDrawOverlays(this)) { // You don't have permission checkPermission(); } else { //do as per your logic } } } 

Ahora finalmente el código del método checkPermission

 public void checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!Settings.canDrawOverlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE); } } } 

Y no olvide declarar esta variable pública en su clase

 public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469; 

Aplausos D

Si la aplicación apunta a la API 22 o inferior, Play Store dará el permiso SYSTEM_ALERT_WINDOW y otros cuando el usuario haga clic para instalar (mostrando una alerta) incluso si su dispositivo es Android 6.0 De lo contrario, si la aplicación apunta a la API 23 o superior, El permiso será la solicitud para conceder en tiempo de ejecución.

  • Android M: Facturación y permisos de GCM
  • (Android-O) La aplicación no aparece en 'aplicaciones con acceso de uso' pero está en Nougat
  • El método checkSelfPermission (Context, String) no está definido para el tipo ContextCompat
  • Java.lang.RuntimeException: inicio fallido
  • Android marshmallow solicitud de permiso?
  • Nivel de protección de la firma - clarificar
  • Permisos de cámara en Appcelerator
  • ¿Comprobar el cuadro Nunca preguntar de nuevo al solicitar un permiso de ejecución deshabilitar los diálogos futuros?
  • Cómo eliminar el archivo de almacenamiento externo en android 5
  • ¿Qué permiso necesito para acceder a Internet desde una aplicación Android?
  • ¿Por qué necesito el permiso WRITE_EXTERNAL_STORAGE con getExternalCacheDir () en Android Lollipop?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.