Android-SMS_RECEIVED +在前台服务崩溃中广播

时间:2016-08-22 08:55:55

标签: android broadcastreceiver

我有一个在前台运行的服务,在这个服务中我有一个广播接收器,它听取SMS_RECEIVED动作。

当用户在应用程序内部时(应用程序和服务都在前台)一切正常,我收到了意图。

但是当用户存在应用程序(只有广播的服务位于前台)时,服务会在收到短信时停止。

当服务停止时,不会在任何地方找到错误报告(不在logcat中,也不会弹出崩溃对话框)。

我的广播服务:

public class myService extends IntentService {
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(myService.this, intent.getAction(), Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    public void onCreate() {
        super.onCreate();
        IntentFilter i= new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
        i.setPriority(999);
        registerReceiver(mReceiver, receiverFilter);
        startForeground(...);
    }

    public void onDestroy() {
        super.onDestroy();
        stopForeground(true);
    }
}

我的清单中也有以下许可:

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

myService在清单中声明如下:

<service
        android:name=".Services.myService"
        android:enabled="true"
        android:exported="false" />

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我解决了删除<uses-permission android:name="android.permission.RECEIVE_SMS" />的问题。但是删除此权限我无法检测到传入的短信,因此我创建了一个类似Catching Outgoing SMS using ContentObserver的类,并使用MESSAGE_TYPE_RECEIVED = 1代替MESSAGE_TYPE_SENT = 2。您需要添加此权限<uses-permission android:name="android.permission.READ_SMS" />