重启设备后使用BroadCast Receiver时无法接收短信

时间:2017-11-03 23:05:20

标签: android broadcastreceiver sms

使用广播接收器重启设备后无法接收短信。 使用try catch并发现此错误“尝试获取null数组的长度”

我的接收者代码:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;

public class ReceiveSMS extends BroadcastReceiver{


    private String number;
    private String text;
    WorksToDo worksToDo;

    @Override
    public void onReceive(Context context, Intent intent) {

        try {
            final SmsManager sms = SmsManager.getDefault();
            final Bundle bundle = intent.getExtras();
            SmsMessage smsMessage;
            if (bundle != null) {
                Object[] objects = (Object[]) bundle.get("pdus");
                for (int i = 0; i < objects.length; i++) {
                    smsMessage=SmsMessage.createFromPdu((byte[]) objects[i]);
                    number = smsMessage.getDisplayOriginatingAddress();
                    text = smsMessage.getDisplayMessageBody();
                }

                worksToDo = new WorksToDo(context, number, text);
                worksToDo.DoAll();


            }

        }catch (Exception ex){
            Log.i("Errrorrrrrrrrrr",ex.getMessage());
        }

    }
}

我的舱单许可和接收方:

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


    <receiver
                android:name=".ReceiveSMS">
                <intent-filter android:priority="2147483647">
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED"/>
                </intent-filter>
    </receiver>

但是当我打开我的应用程序时它工作正常,这段代码出了什么问题?

还是有其他方法可以在手机重启后接收短信吗?

系统短信应用程序是如何做到这一点的? (我的意思是设备中的默认短信应用程序)

我在Google上搜索过,但没有找到任何有用的答案来解决我的问题。

1 个答案:

答案 0 :(得分:0)

<强>固定

刚刚将清单改为:

<receiver
                android:name=".ReceiveSMS">
                <intent-filter android:priority="2147483647">
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                    <action
                </intent-filter>
    </receiver>

一切正常