我有一个在前台运行的服务,在这个服务中我有一个广播接收器,它听取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" />
答案 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" />
。