2017-05-12 3 views
1

ich folgende Ausnahme erhalten:MANAGE_OVERLAY_PERMISSION - Aktivität nicht Ausnahme gefunden

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.action.MANAGE_OVERLAY_PERMISSION dat=package:com.my.app } 
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1816) 
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525) 
at android.app.Activity.startActivityForResult(Activity.java:4265) 

Dies in einer App passiert, die bereits ein paar Jahre alt und arbeitet einwandfrei. Jetzt habe ich diese Ausnahme für ein Android 7 Gerät, Modell ZUK Z1. Irgendwelche Ideen? Scheint wie ein Problem mit der Rom. Bietet diese Rom eine alternative Möglichkeit, Overlay-Zeichenberechtigungen zu erhalten?

Bearbeiten - hier ist die Funktion, die ich Berechtigungen

public static void checkOverlayPermission(Activity activity) 
{ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(activity)) 
    { 
     Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + activity.getPackageName())); 
     activity.startActivityForResult(intent, BaseDef.OVERLAY_PERMISSION_REQ_CODE); 
    } 
} 
+0

In welcher Version läuft Ihre App, die vorher funktioniert. Denken Sie daran, dass Ihre App nach Android 6.0 Marshmallow während der Laufzeit Berechtigungen (einige) anfordern muss. Sie können die Berechtigung für das Manifest nicht mehr anfordern. – kggoh

+0

Alles von Android 5 bis 7. Und wenn ich keine Aktivität starten würde (wie vor Android 6) würde ich nicht die Ausnahme bekommen. Ich habe den obigen Code hinzugefügt, um Ihnen zu zeigen, was ich mache – prom85

+0

Hey @ prom85 haben Sie irgendeine Lösung dieser Frage gefunden – UltimateDevil

Antwort

2

diese one.This Versuchen Sie verwenden ist für mich arbeiten. Es kann Ihnen

if (!Settings.canDrawOverlays(this)) { 
       Intent localIntent = new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION"); 
       localIntent.setData(Uri.parse("package:" + getPackageName())); 
       localIntent.setFlags(268435456); 
       startActivity(localIntent); 
      } 

dies helfen versuchen, wenn Ihr rom das Problem ist

Grundsätzlich können Sie nicht nur alle rom prüfen, welche Probleme mit Einstellungen. Der obige Code funktioniert auch gut in android N. Ich habe das selbst getestet.

Sie können Ihren Code in einen try catch-Block setzen und wenn Sie den catch-Block betreten, zeigen Sie dem Benutzer einen Dialog, in dem er aufgefordert wird, die Overlay-Berechtigung manuell einzugeben, statt ihn direkt zur Einstellungsseite zu bringen.

Es gibt einige Roms im Grunde die benutzerdefinierten Roms, die Probleme mit einigen Systemeinstellungen haben, so ist dies der beste Ansatz, den Sie verwenden können, um diese Situationen anzugehen.