java uses - Android M Autorisations: onRequestPermissionsResult () non appelé




10 Answers

J'ai rencontré le même problème et je viens de trouver la solution. Lorsque vous utilisez la bibliothèque de support, vous devez utiliser les appels de méthode corrects. Par exemple:

  • Dans AppCompatActivity , vous devez utiliser ActivityCompat.requestPermissions ;
  • Quand dans android.support.v4.app.Fragment , vous devez utiliser simplement requestPermissions (ceci est une méthode d'instance de android.support.v4.app.Fragment)

Si vous appelez ActivityCompat.requestPermissions dans un fragment, le rappel onRequestPermissionsResult est appelé sur l'activité et non sur le fragment.

J'espère que cela t'aides!

name internet

Je suis en train de mettre à jour notre application pour utiliser le nouveau système d'autorisations M. Tout fonctionne en plus de onRequestPermissionsResult (). J'ai besoin de vérifier une autorisation sur un bouton, et si cela fonctionne, envoyez un SMS. Lorsque j'accorde la permission 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 de nouveau sur le bouton.

J'ai débogué et défini des points d'arrêt dans la méthode onRequestPermissionsResult (), mais il n'entre jamais dedans.

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);
                }
            }
        }
    }
}

Est-ce que quelqu'un a rencontré un problème similaire? Appréciez toute aide avec ceci. Merci




J'espère que ça fonctionne bien

Pour l'activité:

 ActivityCompat.requestPermissions(this,permissionsList,REQUEST_CODE);

Pour Fragment:

 requestPermissions(permissionsList,REQUEST_CODE);



Si vous avez onRequestPermissionsResult dans activity et fragment, assurez-vous d'appeler super.onRequestPermissionsResult dans activity. Ce n'est pas nécessaire en fragment, mais c'est en activité.




Si vous utilisez requestPermissions en fragment, il accepte 2 paramètres au lieu de 3.

Vous devez utiliser requestPermissions(permissions, PERMISSIONS_CODE);




Vous avez la fonction checkPermissions pour les périphériques pré Marshmallow dans FragmentCompat . J'utilise comme ça:

FragmentCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);



 /* use the object of your fragment to call the 
 * onRequestPermissionsResult in fragment after
 * in activity and use different request Code for 
 * both Activity and Fragment */

   if (isFragment)
    mFragment.requestPermissions(permissions.toArray(new
    String[permissions.size()]),requestPermission);

   else
    ActivityCompat.requestPermissions(mActivity,permissions.toArray(new
    String[permissions.size()]),requestPermission);



Cela fonctionnera ..

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }



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:

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
        @NonNull int[] grantResults) {
    int index = (requestCode>>16)&0xffff;
    if (index != 0) {
        index--;

        String who = mPendingFragmentActivityResults.get(index);
        mPendingFragmentActivityResults.remove(index);
        if (who == null) {
            Log.w(TAG, "Activity result delivered for unknown Fragment.");
            return;
        }
        Fragment frag = mFragments.findFragmentByWho(who);
        if (frag == null) {
            Log.w(TAG, "Activity result no fragment exists for who: " + who);
        } else {
            frag.onRequestPermissionsResult(requestCode&0xffff, permissions, grantResults);
        }
    }
}



private void showContacts() {
    if (getActivity().checkSelfPermission(Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);
    } else {
        doShowContacts();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        doShowContacts();
    }
}



UPDATE: vu la réponse de quelqu'un d'autre à propos de l'appel de super.onRequestPermissionResult () dans Activity et qui corrige le problème de code de requête que j'ai mentionné et appelle onRequestPermissionResult du fragment.

ignorer ce genre de choses:

Pour moi, il appelait le onRequestPermissionResult de l'activité malgré que j'appelle fragment.requestPermission (...), MAIS il renvoyait le résultat avec un requestCode incorrect (111 transformé en 65647 pourquoi ??? je ne le saurai jamais).

Heureusement, c'est la seule autorisation que nous demandons sur cet écran, donc j'ignore le code de la requête (je n'ai pas le temps de comprendre pourquoi ce n'est pas correct pour le moment)




Related

java android permissions android-permissions