首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android SMS广播接收器,读取SMS

Android SMS广播接收器,读取SMS
EN

Stack Overflow用户
提问于 2015-04-21 13:40:28
回答 1查看 912关注 0票数 1

我的应用程序读取OTP短信,我通过第三方短信网关发送。它一直运行良好,我们在许多设备上进行了测试。然后是一个带有双sim的MOTO E,即使它收到了OTP短消息,它也没有经过认证。

是否需要对双sim手机的OTP消息进行任何修改?

以下是我的短讯接收课程:

代码语言:javascript
复制
public class IncomingSms extends BroadcastReceiver {

    // Get the object of SmsManager
    final SmsManager sms = SmsManager.getDefault();
    private static String message;
    Context myContext;
   // public static final int recDigits= Integer.parseInt(message.substring(20,26));

    public void onReceive(Context context, Intent intent) {

        // Retrieves a map of extended data from the intent.
        final Bundle bundle = intent.getExtras();

        context.unregisterReceiver(this);

        try {

            if (bundle != null) {

                final Object[] pdusObj = (Object[]) bundle.get("pdus");

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

                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                    String senderNum = phoneNumber;
                    message = currentMessage.getDisplayMessageBody();

                    Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);


                    if(LoginAuth.otpVerify == Integer.parseInt(message.substring(20,26).trim())){
                        Toast.makeText(context,"Sign Up Successful",Toast.LENGTH_LONG).show();

                        sendMessage();
                    }





                    /*intent.putExtra("msg", message.substring(20,26).trim());

                    // Show Alert
                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context,
                            message.substring(20,26), duration);
                    toast.show();*/

                } // end for loop
            } // bundle is null

        } catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" + e);

        }


    }


    private void sendMessage() {
        Log.d("sender", "Broadcasting message");
        Intent intent = new Intent("custom-event-name");

        intent.putExtra("message", "This is my message!");
        LocalBroadcastManager.getInstance(myContext).sendBroadcast(intent);
    }

}

上面的类读取OTP消息,对OTP进行子处理并对其进行验证。如果经过验证,用户将被指定到下一个屏幕。如果用户在90秒内没有收到OTP,则会要求他再次提交。

现在,当我在MOTO E dual上测试时,OTP是在5-10秒内在手机上生成和接收的,但是我的SMS接收器没有对它进行验证。

是双卡还是接收器的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-21 14:08:59

我通过为google文档中的过滤器提供优先级来解决上述问题。

代码语言:javascript
复制
  private void registerSmsReciever() {
        smsReciever = new IncomingSms();
        IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
        intentFilter.setPriority(2147483647);
        this.registerReceiver(smsReciever, intentFilter);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29773895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档