2017-03-07 3 views
-1

J'ai mis en œuvre les autorisations Android Runtime dans mon application Android. Je suis également en mesure de vérifier si une autorisation est autorisée ou refusée lors de l'exécution. Mais je veux savoir s'il y a de toute façon que si un utilisateur a d'abord refusé l'autorisation, puis l'a autorisé via le menu des autorisations de l'application dans les paramètres. (Supposons un service est en cours d'exécution toujours pour vérifier si des changements se produisent)Vérification des autorisations d'exécution Android à partir des paramètres

+0

Vous pouvez toujours vérifier l'autorisation lorsque vous le souhaitez, pendant que l'utilisateur utilise votre application. Pourquoi voulez-vous détecter la modification des autorisations en arrière-plan? – Sony

Répondre

0

J'utilise la classe d'aide suivante pour vérifier et demander des autorisations

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

Un petit truc pour I am also able to check if a permission is allowed or denied at runtime. Enregistrez ce détail (refusé ou autorisé), puis si l'utilisateur a modifié quelque chose à partir des paramètres, vous pouvez facilement comparer les détails précédents dans la fonction d'autorisation de votre application. Par exemple: vos détails sauvegardés ont été refusés et vous avez ensuite autorisé la permission via les paramètres après que si vous ouvrez votre application dans la fonction d'autorisation, vous pouvez voir vos détails sauvegardés ont été refusés, mais vous avez maintenant la permission.

+0

Mais le problème est que mon application est ouverte une seule fois puis il fonctionne toujours en arrière-plan :( –