[英]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.