我正在编写一个监听传入短信的应用程序.所以我写了一个服务,为此启动了BroadcastReceiver.该服务由我的应用程序启动,但当后者被销毁时,我的服务似乎没有听到任何内容.由于此服务的目的是侦听传入的SMS,因此必须"永久"运行(或由于内存管理而重新启动).
这是一些代码:
public class SmsService extends Service {
private final static String TAG = SmsService.class.getSimpleName();
public static boolean SMS_SERVICE_STARTED = false;
private boolean mRegistered = false;
public final static String SMS_PORT = "port";
private SMSReceiver mSmsReceiver = null; // this is the BroadcastReceiver listening to SMS
public SmsService() {
super();
Log.d(TAG, "SmsService");
}
@Override
public void onCreate() {
Log.d(TAG, "onCreate");
SMS_SERVICE_STARTED = true;
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
stopListenSms();
SMS_SERVICE_STARTED = false;
}
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "onBind");
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
if (intent != null && intent.hasExtra(SMS_PORT)) {
Log.d(TAG, "we got extra!");
short port = intent.getShortExtra(SMS_PORT, (short) 0);
startListenSms(port);
} else {
Log.d(TAG, "no extra :(");
}
return START_STICKY;
}
private void startListenSms(short port) {
Log.d(TAG, "startListenSms on port " + port);
mSmsReceiver = new SMSReceiver();
IntentFilter filter = new IntentFilter(
"android.intent.action.DATA_SMS_RECEIVED");
filter.addDataScheme("sms");
String strPort = String.valueOf(port);
filter.addDataAuthority("localhost", strPort);
registerReceiver(mSmsReceiver, filter);
mRegistered = true;
}
private void stopListenSms() {
Log.d(TAG, "stopListenSms");
if (mSmsReceiver != null) {
if (mRegistered)
unregisterReceiver(mSmsReceiver);
mSmsReceiver = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我观察到它的活动被销毁时,使用null Intent调用onStartCommand.你知道为什么我的服务在活动被销毁时停止生活吗?我应该如何让它"永远"运行?
提前谢谢,干杯.
为什么需要运行服务来收听传入的短信.广播接收器本身用于此目的,一旦您在注册接收器时在意图过滤器中配置,它将继续监听传入消息.有大量的例子广播接收器和短信收听.请仔细阅读这些示例并有效地构建代码
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |