Je mets à jour notre application pour utiliser le nouveau système d'autorisations d'exécution M. Tout fonctionne, sauf onRequestPermissionsResult (). Je dois vérifier une autorisation sur une pression de bouton, et si elle réussit, envoyer un message texte. Lorsque j'accorde l'autorisation de le faire, la boîte de dialogue se ferme, mais elle ne déclenche pas l'envoi de texte jusqu'à ce que j'appuie à nouveau sur le bouton.
J'ai débogué et défini des points d'arrêt dans la méthode onRequestPermissionsResult () mais elle n'y va jamais.
Cette méthode est appelée en premier:
private void askForPermission() {
String[] permissions = new String[]{Manifest.permission.SEND_SMS};
ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}
Et puis mon rappel ressemble à ceci:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSIONS_CODE) {
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (permission.equals(Manifest.permission.SEND_SMS)) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
onPPSButtonPress();
} else {
requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
}
}
}
}
}
Quelqu'un a-t-il rencontré un problème similaire? Appréciez toute aide à ce sujet. Merci
la source
Fragment.requestPermissions()
, l'activité parent reçoit réellement leonRequestPermissionsResult()
. (Ceci est avec la bibliothèque de soutien 23.3.0)Vous pouvez essayer ceci:
Si vous appelez ce code à partir d'un fragment, il a sa propre méthode requestPermissions. Je crois que le problème est que vous appelez une méthode statique.
Astuce de pro si vous voulez le
onRequestPermissionsResult()
dans un fragment:FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)
la source
J'espère que ça marche bien
Pour l'activité:
Pour le fragment:
la source
J'ai aussi rencontré ce problème. Si vous souhaitez que l'activité qui gère les autorisations ne figure pas dans l'historique / les événements récents, vous serez tenté de modifier votre
AndroidManifest.xml
entrée.Si vous définissez l'activité que vous appelez
requestPermissions
ouAppCompatActivity.requestPermissions
avecdans votre
AndroidManifest.xml
alorsonRequestPermissionsResult()
ne sera pas appelé. Cela est vrai si votre activité est dérivée deActivity
ouAppCompatActivity
.Cela peut être résolu en supprimant les deux indicateurs de 'AndroidManifest.xml' et en terminant votre activité à la
finishAndRemoveTask()
place.la source
Si vous avez
onRequestPermissionsResult
à la fois une activité et un fragment, assurez-vous d'appeler l'super.onRequestPermissionsResult
activité. Il n'est pas requis en fragment, mais il est en activité.la source
FragmentActivity.onRequestPermissionsResult(..)
est l'endroit vers lequel l'appel de fragmentonRequestPermissionsResult(..)
est transféré.Réponse obsolète, veuillez vous référer à: https://developer.android.com/training/permissions/requesting
Fragment intérieur, vous devez appeler:
Ne pas:
la source
Si vous utilisez requestPermissions en fragment, il accepte 2 paramètres au lieu de 3.
Tu devrais utiliser
requestPermissions(permissions, PERMISSIONS_CODE);
la source
Si, pour une raison quelconque, vous avez étendu une activité personnalisée située dans une bibliothèque externe qui n'appelle pas le super, vous devrez appeler manuellement le fragment super.onRequestPermissionsResult vous-même dans votre activité onRequestPermissionsResult.
la source
Vous avez la fonction checkPermissions pour les appareils pré-guimauve dans FragmentCompat . J'utilise comme ça:
la source
J'ai découvert que c'est important où vous appelez
android.support.v4.app.Fragment.requestPermissions
.Si vous le faites en
onCreate()
,onRequestPermissionsResult()
n'est jamais appelé.Solution: appelez-le
onActivityCreated()
;la source
onActivityCreated()
mon code. SDK 23.onPause()
?Ce problème était en fait provoqué par NestedFragments. Fondamentalement, la plupart des fragments que nous avons étendent un HostedFragment qui à son tour étend un CompatFragment. La présence de ces fragments imbriqués a provoqué des problèmes qui ont finalement été résolus par un autre développeur du projet.
Il faisait des choses de bas niveau comme la commutation de bits pour que cela fonctionne, donc je ne suis pas trop sûr de la solution finale réelle
la source
la source
Cela fonctionnera ..
la source
Si vous appelez ce code à partir d'un fragment, il a sa propre méthode requestPermissions.
Donc, le concept de base est, si vous êtes dans une activité, appelez
et si dans un fragment, il suffit d'appeler
la source
FragmentCompat.requestPermissions()
.J'ai eu un problème similaire, sauf que j'appuyais sur un bouton pour passer un appel, ce qui déclenche l'appelIntent. J'ai vérifié l'autorisation d'abord, si elle n'est pas accordée, je demande l'autorisation et onRequestPermissionResult j'appelle l'autorisation de vérification et j'appelle à nouveau.
la source
Sur la base de la réponse de goodgamerguy, la solution est:
la source
Avant de tout vérifier selon les réponses ci-dessus, assurez-vous que votre code de demande n'est pas 0 !!!
vérifiez le code de onRequestPermissionsResult () dans FragmentActivity.java:
la source
la source
J'ai une solution incroyable pour y parvenir, faites une BaseActivity comme celle-ci.
}
Maintenant, vous pouvez appeler le code pour demander une autorisation comme celle-ci
Maintenant, chaque fois que cela se produit, que ce soit dans votre fragment ou dans n'importe quelle activité, l'activité de base sera appelée.
Merci
la source
Vous pouvez utiliser
requestPermissions(PERMISSIONS, MULTIPLE_PERMISSIONS_CODE);
. N'utilisez pas FragmentCompat si vous utilisez v4.la source
Détails
Algorithme
module - caméra, emplacement, ....
Caractéristiques
Solution
Utilisation dans l'activité (dans le même fragment)
la source
Ici, je veux montrer à mon code comment j'ai géré cela.
Ici, dans cette classe, je veux vérifier l'autorisation accordée ou non. N'est-ce pas alors que j'appellerai la permission de mon activité principale comme
Maintenant, dans la méthode onCreate, vous devez appeler la fonction requestForPermission ().
Vous pouvez également demander plusieurs autorisations à la fois.
la source
MISE À JOUR: vu la réponse de quelqu'un d'autre à propos de l'appel
super.onRequestPermissionResult()
dans Activity et qui résout le problème de code de demande que j'ai mentionné et appelle le onRequestPermissionResult du fragment.ignorer ce genre de choses:
Pour moi, il appelait l'
onRequestPermissionResult
Activity malgré moifragment.requestPermission(...)
, MAIS il a renvoyé le résultat avec un requestCode incorrect (111 transformé en 65647 pourquoi ??? je ne saurai jamais).Heureusement, c'est la seule autorisation que nous demandons sur cet écran, donc j'ignore simplement le code de demande (je n'ai pas le temps de comprendre pourquoi il n'est pas correct en ce moment)
la source
J'ai également rencontré un problème selon lequel même si vous appelez les requestPermissions correctes, vous pouvez toujours avoir ce problème. Le problème est que l'activité parent peut remplacer cette méthode sans appeler super. Ajoutez super et ce sera corrigé.
la source