-1

C'est la classe par laquelle j'ai lu le numéro OTP cela fonctionne très bien dans tous les appareils mais dans marshmallow il ne lit pas le numéro OTP. Je sais que pour résoudre ce problème, il veut l'autorisation d'exécution, mais je ne sais pas comment je peux donner l'autorisation d'exécution pour lire le numéro OTP envoyé par le serveur.Comment donner l'autorisation d'exécution pour lire le numéro OTP pour marshmallow?

public class IncominMsg extends BroadcastReceiver { 

    final SmsManager smsManager = SmsManager.getDefault(); 

    public static String GENERAL_OTP_TEMPLATE = "(.*) is your OTP for Reset Password for your app. Treat this as a confidential"; 
    public static final String KEY_PREFERNCE = "prefernce"; 
    public static final String KEY_OTP = "otp"; 
    String otp; 
    SharedPreferences sharedPreferences; 
    SharedPreferences.Editor editor; 

    private final int REQUEST_CODE_ASK_FOR_PERMISSIONS = 1234; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     final Bundle bundle = intent.getExtras(); 

     int permissionCheck = ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_SMS); 
     sharedPreferences = context.getSharedPreferences(KEY_PREFERNCE, Context.MODE_PRIVATE); 
     editor = sharedPreferences.edit(); 

     Activity activity = (Activity) context; 

     try { 
      if (bundle != null) { 
       final Object[] pdusObj = (Object[]) bundle.get("pdus"); 
       SmsMessage[] smsMessages = new SmsMessage[pdusObj.length]; 

       for (int i = 0; i < pdusObj.length; i++) { 

        smsMessages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
        String message = smsMessages[i].getDisplayMessageBody(); 

       } 

       Pattern generalOtpPattern = Pattern.compile(GENERAL_OTP_TEMPLATE); 
       Matcher generalOtpMatcher = generalOtpPattern.matcher(smsMessages[0].getMessageBody().toString()); 

       if (generalOtpMatcher.find()) { 
        permissionCheck = ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_SMS); 
        if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 

         ActivityCompat.requestPermissions(activity, new String[]{android.Manifest.permission.READ_SMS}, REQUEST_CODE_ASK_FOR_PERMISSIONS); 
         return; 

        } 

        otp = generalOtpMatcher.group(1);//this is only your OTP code 

        editor.clear(); 
        editor.putString(KEY_OTP, otp); 
        editor.commit(); 
       } 
      } 
     } catch (Exception e) { 

     } 
    } 
} 
+0

Consultez la documentation officielle https://developer.android.com/training/permissions/requesting.html – USKMobility

+0

Vous devez demander l'autorisation 'READ_SMS' * run-time *. – CodeWalker

+0

@CodeWalker Cher monsieur, je ne connais pas grand-chose à la permission d'exécution. pouvez-vous me dire comment puis-je donner cette permission. c'est urgent. – LoveAndroid

Répondre

0

Vous pouvez demander la permission READ_SMS à l'exécution comme celui-ci -

final private int REQUEST_CODE_ASK_FOR_PERMISSIONS = 752136975889; 

private void askForReadSMSPermission() { 
    int hasReadSMSPermission = checkSelfPermission(Manifest.permission.READ_SMS); 
    if (hasReadSMSPermission != PackageManager.PERMISSION_GRANTED) { 
     requestPermissions(new String[] {Manifest.permission.READ_SMS}, 
       REQUEST_CODE_ASK_FOR_PERMISSIONS); 
     return; 
    } 

    //Your code to read the OTP 

} 

post-scriptum N'oubliez pas d'ajouter <uses-permission-sdk-23/> dans le fichier AndroidManifest.xml

+0

cela ne fonctionne pas. S'il vous plaît voir mon code mis à jour. si je me trompe, dites-moi s'il vous plaît. – LoveAndroid