Lors de l'utilisation de
Bibliothèque nabinbhandari / Android-Permissions: Lien
Obtenir une erreur lorsque j'exécute l'application sur un appareil Android Niveau d'API> 20
Il s'agit d'une classe de non-activité. MainApp.getmContext () renvoie le contexte de l'application:
String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}; Permissions.check(MainApp.getmContext(), permissions, null/*rationale*/, null/*options*/, new PermissionHandler() { @Override public void onGranted() { // do your task. Toast.makeText(MainApp.getmContext(), "Granted", Toast.LENGTH_SHORT).show(); } @Override public void onDenied(Context context, ArrayList<String> deniedPermissions) { Toast.makeText(MainApp.getmContext(), "Denied", Toast.LENGTH_SHORT).show(); } });
L'erreur arrive sur la ligne Permissions.check .
3 Réponses :
Je pense que c'est à cause de votre MainApp.getmContext. C'est en fait le contexte de l'application. Vous avez besoin d'un contexte d'activité.
Merci pour le commentaire. Au fur et à mesure, j'obtenais le contexte via la classe étendue Application. Mais après avoir passé le contexte d'activité, cela fonctionne.
Comment puis-je obtenir le contexte de l'activité par programme, comme je ne veux pas que l'utilisateur puisse définir le contexte. Comme, je travaille sur la bibliothèque et sur cette perspective, je ne veux pas que l'utilisateur puisse définir le contexte lui-même.
@AliAzazAlam Je ne comprends pas la question.
Nous devons transmettre l'activité [sur laquelle vous souhaitez afficher les autorisations] Contexte dans l'argument d'autorisation:
public static void permissionGrant(Context mContext){ String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}; Permissions.check(mContext, permissions, null/*rationale*/, null/*options*/, new PermissionHandler() { @Override public void onGranted() { // do your task. Toast.makeText(MainApp.getmContext(), "Granted", Toast.LENGTH_SHORT).show(); } @Override public void onDenied(Context context, ArrayList<String> deniedPermissions) { Toast.makeText(MainApp.getmContext(), "Denied", Toast.LENGTH_SHORT).show(); } }); }
Sur certains appareils, lors du démarrage d'une nouvelle activité à partir du contexte de service, il est nécessaire d'utiliser Intent.FLAG_ACTIVITY_NEW_TASK
dans Intent
. Pour ce faire, utilisez l'objet suivant comme paramètre options
.
Options options = new Options().setCreateNewTask();
Pour plus d'informations, consultez ce problème et cette demande d'extraction.