如何赋予运行时权限读取棉花糖的OTP数



这是我读取OTP数字的类,它在所有设备中工作得很好,但在棉花糖中它不读取OTP数字。我知道,为了解决这个问题,它需要运行时权限,但我不知道如何赋予运行时权限来读取服务器发送的OTP数。

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

您可以在运行时像这样请求READ_SMS权限-

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
}

注:不要忘记在AndroidManifest.xml

中添加<uses-permission-sdk-23/>

最新更新