3

Ich habe an einem App-Widget für Android 6 gearbeitet und wie es funktioniert ist, dass jedes Mal, wenn der Broadcast Receiver ein OnUpdate empfängt, nach Berechtigungen sucht, bevor das RemoteView mit den entsprechenden Inhalten aktualisiert wird, zB mit der Meldung "Berechtigungen fehlt "oder was auch immer es haben soll.Gibt es einen Listener für Android-App Widget Erlaubnis Änderungen?

Ich stelle jedoch fest, dass, wenn ich eine der Berechtigungen deaktiviere, die meine App über System> App> Berechtigungen benötigt, wird der Prozess in Studio als "tot" markiert.

Wenn ich dann testen, ob das Widget noch im Emulator funktioniert, indem ich ein OnUpdate triggere, dann funktioniert es nicht mehr. Sobald ich die Berechtigungen wieder aktiviere, wird eine neue Prozess-ID generiert und das Widget ist aktiv und funktioniert wieder.

Jetzt ist meine Frage, gibt es eine Möglichkeit, diese Änderung der Berechtigungen zu erfassen? Es ist komisch, dass das Widget auf dem Home-Bildschirm immer noch "lebt", wenn es nach Studio "tot" sein soll (ohne Fehler scheint es ...) aufgrund einer Änderung der Berechtigungen =/

Antwort

0

Richtig, ich glaube, ich habe das Problem herausgefunden ...

Wenn ein Benutzer in einer Einstellung des Telefons geht> Apps> app> Berechtigungen und dann Berechtigungen widerruft, endet es den Prozess der App zu töten - oder es könnte tatsächlich irgendwo ausgesetzt werden, weil, sobald Sie eine Erlaubnis wieder erteilen, der gleiche Prozess (gleiche PID) wieder am Leben ist.

Als Ergebnis sind die Widget-IDs verloren, daher wird OnUpdate() nicht aufgerufen, wenn die Übertragung empfangen wird und alle Widgets, die zum Startbildschirm hinzugefügt wurden, nicht aktualisiert werden können.

Also, die Problemumgehung?

Rufen Sie eine neue Instanz von AppWidgetManager ab und legen Sie diese Widget-IDs manuell wieder in den Intent, bevor super.onReceive() aufgerufen wird. Dann können Sie wieder auf alle Widget-Instanzen zugreifen und diese entsprechend aktualisieren.

@Override 
public void onReceive(Context c, Intent i) { 

    String action = i.getAction(); 
    if (action.equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) { 
     ComponentName thiswidget = new ComponentName(c,  BroadcastHandler.class); 
     AppWidgetManager am = AppWidgetManager.getInstance(c); 
     int[] ids = am.getAppWidgetIds(thiswidget); 
     i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids); 

     // either handle the permission change at this point or in onUpdate() 
    } 

    super.onReceive(c,i); 

} 

Ich weiß nicht, warum Google widerrufen Zuhörer um ehrlich zu sein nicht ein Berechtigungen =/

0

ich bin es nicht sicher, wenn das genau das ist, was Sie suchen, aber ich habe diesen Code verwendet, um nach Berechtigungen zu suchen. Wenn die Berechtigung abgelehnt wurde, wird das nächste Mal, wenn Sie die App (in meinem Fall eine tragbare App) verwenden, erneut um Erlaubnis gefragt.

Ich habe diese Funktion in einer extra Klasse verwendet, also sollten Sie sie vielleicht anpassen.

int permissionCheck = ContextCompat.checkSelfPermission(mainActivity, 
       Manifest.permission.RECORD_AUDIO); 

     if (permissionCheck != 0) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       mainActivity.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO, 
         Manifest.permission.INTERNET}, REQUEST_RECORD_AUDIO_PERMISSION); 
      } 
     } 

und haben Sie eine endgültige Variable

private final int REQUEST_RECORD_AUDIO_PERMISSION=1; 

Sie die Linie Manifest.permission.RECORD_AUDIO mit Manifest.permission ersetzen müssen erklären. (Ihre Zustimmung)

Wenn Sie möchten, um die Berechtigung häufig zu überprüfen - machen Sie eine Methode und verwenden Sie sie in Ihrem Code, bevor die Erlaubnis erforderlich ist.

hoffe, ich konnte Ihnen helfen,

Birki

+0

Das Problem ist, ist das, was passiert, nachdem die Berechtigungen erteilt werden.Wenn ich die Berechtigungen manuell über die Telefoneinstellungen ausschalte, funktioniert das App-Widget nicht mehr auf dem Startbildschirm und der Prozess wird als fehlerfrei angezeigt - das versuche ich zu ermitteln = / – Ken

Verwandte Themen