SMS не принимается на двойном сим

BeginnerProgrammer спросил: 28 марта 2018 в 02:29 в: android

Я пишу простой код для получения SMS и сохранения его в базе данных. для мобильных телефонов с одним сим, он отлично работает. Но когда я импортировал второй сим в мобильный, мой код не работал. ниже мой код:

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

Я также добавляю эти разрешения для файла манифеста:

    <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" />

Где моя ошибка?

1 ответ

Есть решение
Khemraj ответил: 28 марта 2018 в 02:55

Попробуйте этот код, он отлично работает во всех моих проектах.

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

В вашем манифесте

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

Только это разрешение необходимо для получения SMS

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

Вы в порядке:)

ADM ответил: 28 марта 2018 в 02:53
Try this code не очень хороший способ ответить. Пожалуйста, укажите, что не так с подходом ОП. И какое исправление вы сделали.
BeginnerProgrammer ответил: 28 марта 2018 в 03:17
Вы прекрасны !!!!
Khemraj ответил: 28 марта 2018 в 03:53
Добро пожаловать чувак ZahraTz, @ADM, сэр, что вы говорите :)
ADM ответил: 28 марта 2018 в 03:54
хахаха .. О чем ты говоришь? Я попросил вас объяснить проблему с кодом операции. Почему так драматично. Вот как ваш ответ будет более полезным. Если вы не объясните проблему, это будет способствовать копированию и вставке кода. это не прояснит Концепцию.