2017-03-07 2 views
-1

Ich habe Android Runtime Permissions in meiner Android App implementiert. Ich bin auch in der Lage zu überprüfen, ob eine Erlaubnis zur Laufzeit erlaubt oder verweigert wird. Aber ich möchte wissen, ob es sowieso so ist, wenn ein Benutzer zuerst die Berechtigung verweigerte und sie dann über das App-Berechtigungsmenü in den Einstellungen erlaubte. (Angenommen, ein Service immer zu prüfen, läuft, wenn Änderungen auftreten)Android Runtime Permissions von Einstellungen überprüfen

+0

Sie können jederzeit nach der Berechtigung suchen, während der Benutzer Ihre App verwendet. Warum möchten Sie Änderungen an Berechtigungen im Hintergrund erkennen? – Sony

Antwort

0

Ich verwende die folgende Hilfsklasse für die Überprüfung und Anfordern von Berechtigungen

public final class Permissions { 

public static final int INTERNAL_STORAGE_REQUEST_CODE = 1; 
public static final int FINE_LOCATION_REQUEST_CODE = 2; 
private static final int COARSE_LOCATION_REQUEST_CODE = 3; 

public static final String READ_EXTERNAL_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE; 
public static final String ACCESS_FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION; 
public static final String ACCESS_COARSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION; 


public static boolean havePermissionFor(Context context, String permission) { 
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || 
      ActivityCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; 

} 


public static void showPermissionDetails(String message, Context context, DialogInterface.OnClickListener okListener) { 
    M.showAlert(context, "Request for permission", message, "ALLOW", "DON'T ALLOW", okListener, null, false); 
} 

public static void requestForPermissions(Activity activity, String[] permissions, int permissionRequestCode) { 
    ActivityCompat.requestPermissions(activity, permissions, permissionRequestCode); 
} 

public static void requestPermissionForFragment(Fragment fragment, String[] permissions, int permissionRequestCode) { 
    fragment.requestPermissions(permissions, permissionRequestCode); 
} 

public static boolean shouldShowPermissionRationale(Activity activity, String permission) { 
    return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission); 
} 


public ArrayList<String> getRequiredPermissions(Context context, String... permissions) { 
    ArrayList<String> requiredPermissionsList = new ArrayList<>(); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return requiredPermissionsList; 
    for (String permission : permissions) { 
     if (!havePermissionFor(context, permission)) 
      requiredPermissionsList.add(permission); 
    } 
    return requiredPermissionsList; 

} 
} 
2

Ein kleiner Trick für I am also able to check if a permission is allowed or denied at runtime. Speichern Sie dieses Detail (abgelehnt oder erlaubt) und wenn der Benutzer etwas von den Einstellungen geändert hat, können Sie die vorherigen Details in der Berechtigungsfunktion Ihrer App einfach vergleichen.

Zum Beispiel: Ihre gespeicherten Details wurden verweigert und dann erlaubte Ihnen die Erlaubnis durch Einstellungen, wenn Sie Ihre App in der Berechtigungsfunktion öffnen, können Sie sehen, dass Ihr gespeichertes Detail verweigert wurde, aber jetzt haben Sie die Erlaubnis, für erlaubt umgekehrt.

+0

Aber Problem ist, dass meine App nur einmal geöffnet ist, dann läuft es immer im Hintergrund :( –