android - desactivar - superposición de pantalla samsung j7
Superposición de pantalla detecta bloques de permisos de Android (8)
Básicamente, la función Superposición de pantalla es utilizada por casi todas las aplicaciones, pero se debe a los últimos términos y condiciones del usuario de marshmallow de Android que no puede otorgar permisos sin desactivar la superposición de pantalla de todas las aplicaciones en la situación actual (mientras que los permisos de usuario)
La desactivación de la superposición de pantalla de todas las aplicaciones no resolverá el problema, en realidad también debe desactivar la superposición de pantalla de las aplicaciones de sistema ocultas ...
La solución es simple y fácil, solo necesita ir a la opción Mostrar aplicaciones del sistema mientras aplica la solución ...
Fuente: Superposición de pantalla detectada: cómo resolver este problema en cualquier dispositivo Android
Me di cuenta de un problema extraño con mi aplicación de Android en mi nuevo teléfono. La alerta adjunta a continuación bloquea las ventanas emergentes de permisos del SDK 23, como el almacenamiento externo. Inicialmente pensé que esto estaba relacionado con mi teléfono, pero no parece afectar a ninguna de mis otras aplicaciones instaladas.
¿Es posible que este problema esté relacionado con la instalación de una versión de depuración o hay algún problema con el manejo de mi permiso? Pensé que de alguna manera podría estar relacionado con una de las plataformas de anuncios que estoy usando, pero traté de desactivarlos y todavía apareció
He pegado la función de guardar imágenes que genera esta solicitud de permiso a continuación. Estoy usando Dexter para ahorrar en la escritura de un montón de repetitivo repugnante
public static void saveToExternalStorageIfAllowed(final Context context, final Bitmap bitmapImage, final String title) {
final Tracker t = ((LoLHistory) context.getApplicationContext()).getTracker(LoLHistory.TrackerName.APP_TRACKER);
// saving to publicly visible/accessible folder. Requires write permission
int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
// do not have permissions to write, request
t.send(new HitBuilders.EventBuilder()
.setCategory("FILE")
.setAction("PermissionMissing")
.setLabel("WRITE_EXTERNAL")
.build());
Dexter.checkPermission(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse response) {
t.send(new HitBuilders.EventBuilder()
.setCategory("FILE")
.setAction("PermissionGranted")
.setLabel("WRITE_EXTERNAL")
.build());
saveToExternalStorage(context, bitmapImage, title);
}
@Override
public void onPermissionDenied(PermissionDeniedResponse response) {
t.send(new HitBuilders.EventBuilder()
.setCategory("FILE")
.setAction("PermissionDenied")
.setLabel("WRITE_EXTERNAL")
.build());
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {/* ... */}
}, Manifest.permission.WRITE_EXTERNAL_STORAGE);
} else {
saveToExternalStorage(context, bitmapImage, title);
}
}
private static void saveToExternalStorage(Context context, Bitmap bitmapImage, String title) {
Tracker t = ((LoLHistory) context.getApplicationContext()).getTracker(LoLHistory.TrackerName.APP_TRACKER);
// create image folder if does not exist
File imagesFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), context.getString(R.string.app_name));
if (!imagesFolder.mkdirs() && !imagesFolder.isDirectory()) {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// failed to create and is not a directory. Something went wrong...
t.send(new HitBuilders.EventBuilder()
.setCategory("FILE")
.setAction("CreateDirFailed")
.setLabel(imagesFolder.getPath())
.build());
} else {
t.send(new HitBuilders.EventBuilder()
.setCategory("FILE")
.setAction("CreateDirFailedMediaNotMounted")
.setLabel(imagesFolder.getPath())
.build());
}
}
// delete image if already exists so FOS can create a new one
File image = new File(imagesFolder, title + ".jpg");
if (image.exists()) {
// image already exists, deleting to start from clean state
if (!image.delete()) {
// failed to delete
t.send(new HitBuilders.EventBuilder()
.setCategory("FILE")
.setAction("DeleteFailed")
.setLabel(image.getPath())
.build());
}
}
// compress bitmap and write to file stream. FOS creates file if does not exist
FileOutputStream out = null;
try {
out = new FileOutputStream(image);
bitmapImage.compress(Bitmap.CompressFormat.JPEG, 50, out);
out.flush();
} catch (Exception e) {
e.printStackTrace();
t.send(new HitBuilders.ExceptionBuilder()
.setDescription(e.getLocalizedMessage())
.setFatal(true)
.build());
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
t.send(new HitBuilders.ExceptionBuilder()
.setDescription(e.getLocalizedMessage())
.setFatal(true)
.build());
}
}
// get Uri from saved image
Uri uriSavedImage = Uri.fromFile(image);
// media scan the new file so it shows up in the gallery
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(uriSavedImage);
context.sendBroadcast(mediaScanIntent);
}
ACTUALIZACIÓN : dado que muchas personas lo mencionan, como se dijo anteriormente, este problema no se debe a la instalación de una aplicación de superposición. En el menú Dibujar sobre otras aplicaciones , tengo las siguientes aplicaciones: Google Play Music, servicios de Google Play, Photos, TalkBack, Twitch, Twitter. Todos estos están configurados en No.
Además, he probado otras aplicaciones como Google Hangouts y Twitter, que también tienen acciones que requieren permisos peligrosos y puedo proporcionar esos permisos sin este problema.
SOLUCIÓN : He señalado la respuesta de R. Zagorski como la solución, ya que incluye muchos casos generales. Para mí fue en realidad un Toast
que rompió mi flujo de permisos. Esta ventana emergente desperdició tanto tiempo al enviarme por el camino completamente equivocado ...
Este es el Toast
que tuve visible durante los primeros segundos después de que apareciera la ventana emergente de permiso:
Busqué en Google tantas soluciones pero nada funcionó. Luego probé con todas las opciones en la configuración :)
Finalmente puedo darte una forma definitiva de desactivar la superposición -
Ir a la opción Configuración> Aplicación> Aplicación predeterminada> Asistencia del dispositivo> "Turn of Read Text in screen"
Cuando se detecta una superposición de pantalla, el sistema no le permitirá continuar otorgando permisos para las aplicaciones. Porque la superposición de pantalla puede recibir la entrada del usuario. Por lo tanto, debe desactivar todas las opciones de "superposición de pantalla" antes de otorgar permisos para sus aplicaciones. No es el problema de tu aplicación. Todas las aplicaciones que tienen objetivo SDK 23 obtienen este problema.
Esta ventana emergente es causada por el manifest.PERMISSION.SYSTEM_ALERT_WINDOW permiso declarado por el manifiesto. Hay 3 categorías de permisos que el desarrollador debe tener en cuenta:
- Permiso normal: no hacer nada con ellos, solo declarar en el Manifiesto
- Permisos vulnerables : declarar en Manifiesto y pedir permiso en el primer momento. Se pueden cambiar a través de la configuración del sistema
- Por encima de los permisos peligrosos: manifest.PERMISSION.SYSTEM_ALERT_WINDOW y WRITE_SETTINGS pertenecen a esta categoría. Deben otorgarse, pero no son visibles en la configuración del sistema. Para solicitarlo, no utiliza una forma estándar (
int checkSelfPermission (String permission)
), pero debe verificarSettings.canDrawOverlays()
oSettings.System.canWrite()
apropiadamente
Si no tiene el permiso manifest.PERMISSION.SYSTEM_ALERT_WINDOW :
- comprueba si tienes un
Toast
visible cuando interactúas con la ventana emergente de permisos. Aunque la ventana emergente Detectado superpuesto no lo menciona, unaToast
también cuenta como una superposición - compruebe si alguna de sus dependencias lo requiere .
Si no está seguro de si está usando este permiso, hay un par de casos de prueba que puede hacer:
Solicite este permiso usted mismo:
public class MainActivity extends AppCompatActivity { public final static int REQUEST_CODE = 10101; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (checkDrawOverlayPermission()) { startService(new Intent(this, PowerButtonService.class)); } } public boolean checkDrawOverlayPermission() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { return true; } if (!Settings.canDrawOverlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, REQUEST_CODE); return false; } else { return true; } } @Override @TargetApi(Build.VERSION_CODES.M) protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) { if (Settings.canDrawOverlays(this)) { startService(new Intent(this, PowerButtonService.class)); } } } }
Consulte esta publicación para tener en cuenta que, al instalar la aplicación a través de Play Store, este permiso se concede automáticamente (no lo he marcado, por lo tanto, no puedo confirmarlo)
El modelo de permiso se puede entender, solo a veces requiere más excavación.
Esta ventana emergente se convirtió en un problema con la inclusión del administrador de permisos en Android Marshmallow. Si tiene alguna aplicación instalada en su teléfono que tenga permiso para superponerse en la pantalla, hay una serie de configuraciones de permisos, Acceso a archivos incluido, que no puede cambiar sin deshabilitar primero esos permisos de superposición de pantalla. Para mí, mi aplicación de texto y la aplicación de Facebook Messenger son los culpables. Cada vez que deseo dar a cualquier otra aplicación los permisos solicitados, tengo que hacer clic en la opción Abrir configuración en esa ventana emergente y revocar el acceso de superposición de pantalla para las dos aplicaciones mencionadas anteriormente, luego volver a abrir la aplicación en cuestión para obtener nuevamente el aviso de permiso. Luego, tengo que volver a habilitar los permisos de superposición si quiero que mi mensaje emergente o mi chat se dirija. Es muy molesto. Creo que su aplicación está bien, la administración de permisos de Android es simplemente un desastre confuso.
No es un problema, solo tienes instalada una aplicación de superposición, los más comunes son
- Facebook Messenger
- Whatsapp con Pop-Up habilitado
- Seebye Chat heads
- Viber
- Cualquier aplicación que muestre un menú o algo en la pantalla es una aplicación de superposición.
solo ciérrelo, entonces inténtelo.
Solucioné este problema instalando Alert Window Checker: https://play.google.com/store/apps/details?id=jp.sfapps.alertwindowchecker . Le indica qué aplicaciones están utilizando actualmente la función de superposición de pantalla.
En mi caso, tuve que desactivar el detector de deslizamiento en la aplicación ES FileExplorer para solucionar este problema
Usualmente, esto es causado por el uso de una aplicación flotante.
Para usuarios de teléfonos Samsung con Android:
Open the Settings
Then Applications > Application manager
Press on More > Apps that can appear on top
Si encuentra una aplicación con una burbuja, muestre la superposición de la pantalla. Si una aplicación ajusta el brillo de su teléfono, desactive la opción de superposición de pantalla en esas aplicaciones también. El punto es que debes descubrir la aplicación culpable y desactivar la superposición de pantalla.
Origen: Solucionado el error detectado sobre la superposición de pantalla en Android