2016-09-23 4 views
0

Je fais une application pour la livraison de nourriture. Dans mon application lorsque l'utilisateur utilise la version de téléphone Android de guimauve alors mon application ne demande pas à la première fois pour la permission de lire le sms. mais lorsque l'utilisateur ouvre l'application la prochaine fois, mon application demande la permission. Je ne sais pas quel est le problème. Je veux que lorsque l'utilisateur ouvre l'application première autorisation devrait demander. Au lieu de la deuxième fois.Mon application Ne demande pas pour la première fois l'autorisation d'exécution pour la guimauve?

C'est ma méthode pour demander la permission, je fais appel de cette méthode dans ma onCreate() méthode de mon activité:

private void permissionForMarshMallow() { 

     int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, 
       Manifest.permission.READ_SMS); 

     if (ContextCompat.checkSelfPermission(LoginActivity.this, 
       Manifest.permission.READ_SMS) 
       != PackageManager.PERMISSION_GRANTED) { 


      if (ActivityCompat.shouldShowRequestPermissionRationale(LoginActivity.this, 
        Manifest.permission.READ_SMS)) { 

       Log.e("permission...granted", "permission granted............"); 


      } else { 



       ActivityCompat.requestPermissions(LoginActivity.this, 
         new String[]{Manifest.permission.READ_SMS}, 
         REQUEST_CODE_ASK_SINGLE_PERMISSION); 


      } 
     } 
    } 

et c'est la méthode de remplacement onRequestPermissionsResult():

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 


     switch (requestCode) { 

      case REQUEST_CODE_ASK_SINGLE_PERMISSION: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       } else { 


        // Toast.makeText(LoginActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show(); 
       } 
       break; 
      default: 
       super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 


    } 

Quelqu'un peut-il dire moi Comment puis-je faire l'application qu'elle demande la permission à la première fois pas la deuxième fois?

+0

ce qui est la '' 'targetSdkVersion'''? –

+1

Vérifiez simplement si votre version cible est 22 –

+0

Je recommande cette lecture: https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en m'a aidé . –

Répondre

2

Il y a une faille logique dans votre code. Voici comment fonctionne votre code:

  1. Vérifiez si nous avons la permission.
  2. Si nous n'avons la permission:
    • Faut-il demander la permission?
      • Si oui, connectez-vous "l'autorisation accordée"
      • Sinon, demandez alors la permission

Donc, fondamentalement, vous demandez la permission quand vous ne devriez pas. Dans le cas où vous devriez demander la permission, au lieu de demander la permission, vous venez de vous connecter "permission accordée". Il vous suffit de changer votre code un peu:

private void permissionForMarshmallow() { 

     int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS); 

     if (ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) { 

      ActivityCompat.requestPermissions(LoginActivity.this, new String[]{Manifest.permission.READ_SMS}, REQUEST_CODE_ASK_SINGLE_PERMISSION); 

     } 
     else { 
      // user probably checked "never ask again" - we should not ask for permission. 
     } 
    } 
} 
+0

Thanx! Ça marche ! – aarav

0

On dirait qu'au premier démarrage, shouldShowRequestPermissionRationale est vrai et que vous venez de créer une entrée de journal. Vous l'avez écrit dans votre journal, mais dans ce cas, la permission n'est pas encore accordée.