简体   繁体   English

双卡未收到短信

[英]SMS is not received on dual sim

I write a simple code to receive SMS and store it in the database. 我编写了一个简单的代码来接收SMS并将其存储在数据库中。 for mobile with just one sim, it works fine. 对于只有一个sim卡的手机,效果很好。 But when I import the second sim into mobile my code did not work. 但是,当我将第二张SIM卡导入移动设备时,我的代码无法正常工作。 below is my code: 下面是我的代码:

public class SmsReceiver extends BroadcastReceiver {
    public AppDBHelper db;
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("receiveSMS","sms 1");
        Bundle bundle=intent.getExtras();
        if(bundle==null) return;
        Object[] pdus= (Object[]) bundle.get("pdus");
        if(pdus==null) return;
        SmsMessage[] messages=new SmsMessage[pdus.length];//num of messages
        for(int i=0;i<pdus.length;i++){
            if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
                String format=bundle.getString("format");
                messages[i]=SmsMessage.createFromPdu((byte[]) pdus[i],format);
            }else{
                messages[i]=SmsMessage.createFromPdu((byte[]) pdus[i]);
            }
            String messageText=messages[i].getMessageBody().toString();
            messageText=messageText.replaceAll(" ","");
            messageText=messageText.replaceAll("\n","");
            messageText=messageText.replaceAll("\u200E","");
            if(messageText!=null) {
                db.insertSmsCodes(messageText);// insert into database
            }
        }
    }

}

I also add these permissions to manifest file: 我还将这些权限添加到清单文件:

    <uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

Where is my wrong? 我哪里错了?

Try this code this is working fine in all my projects. 试试这个代码,这在我所有的项目中都能正常工作。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.text.TextUtils;

/**
 * Created by KHEMRAJ on 4/11/2017.
 */

public class SmsBroadcastReceiver extends BroadcastReceiver {

    public static final String SMS_RECEIVE_ACTION = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (TextUtils.equals(intent.getAction(), SMS_RECEIVE_ACTION)) {
            Bundle data = intent.getExtras();
            if (data != null) {
                Object[] pdus = (Object[]) data.get("pdus");
                if (pdus != null) {
                    for (Object pdu : pdus) {
                        SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
                        String messageBody = smsMessage.getMessageBody();
                        if (!TextUtils.isEmpty(messageBody)) {
                            // your stuff here
                        }
                    }
                }
            }
        }
    }
}

In your manifest 在你的清单上

   <receiver
            android:name=".utils.SmsBroadcastReceiver"
            android:enabled="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

Only this permission is needed for receiving SMS 接收短信只需要此权限

<uses-permission android:name="android.permission.RECEIVE_SMS" />

You are good to go :) 你已准备好出发 :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM