一段时间后,Sms BroadcastReceiver停止工作

时间:2017-06-24 12:03:50

标签: android broadcastreceiver sms

我正在开发一个接收传入短信的Android应用程序。

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

我在清单中有此权限(我排除了读取sms权限,因为我不想从sms数据库中读取)。

<receiver android:name=".receivers.SmsReceiver" android:exported="true">
        <intent-filter android:priority="999">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>

</receiver>

我也在清单中注册了接收器,如上所述。从我所看到的,上面的代码应该足以接收短信广播,即使应用程序没有运行。

public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Bundle data = intent.getExtras();
    String sender = null;
    String message = null;
    String time = null;
    String date = null;
    if(Build.VERSION.SDK_INT >= 23){
        Object[] pdus = (Object[]) data.get("pdus");
        String format = (String) data.get("format");
        for(int i=0;i<pdus.length;i++){
            SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdus[i],format);
            sender = msg.getDisplayOriginatingAddress();
            message = msg.getDisplayMessageBody();
            long dt = msg.getTimestampMillis();
            time = String.valueOf(dt)+"time";
            date = String.valueOf(dt)+"date";

        }
    }
    else if(Build.VERSION.SDK_INT >= 19){
        SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(intent);
        for(int i=0;i<msgs.length;i++){
            SmsMessage msg = msgs[i];
            sender = msg.getDisplayOriginatingAddress();
            message = msg.getDisplayMessageBody();
            long dt = msg.getTimestampMillis();
            time = String.valueOf(dt)+"time";
            date = String.valueOf(dt)+"date";

        }

    }
    else{
        Object[] pdus = (Object[]) data.get("pdus");
        for(int i=0; i<pdus.length; i++){
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
            sender = smsMessage.getDisplayOriginatingAddress();
            message = smsMessage.getDisplayMessageBody();
            long dt  = smsMessage.getTimestampMillis();
            time = String.valueOf(dt)+"time";
            date = String.valueOf(dt)+"date";

        }
    }

    Dbhelper dbhelper = new Dbhelper(context);
    Command command = new Command(sender,message,date,time);
    dbhelper.insertCommand(command);
    if(LogFragment.commands != null){
        LogFragment.commands.add(command);
        LogFragment.update();
    }

}

}

这是我的Smsreceiver类,当收到sms时,它存储在一个单独的数据库中。当应用程序启动时,一切正常,收到传入的短信并存储在数据库中,即使我杀了应用后广播接收器仍然工作了一段时间,然后就像一小时后它停止工作,之后的任何传入的短信都没有收到我的广播接收器。我不知道出了什么问题。

0 个答案:

没有答案