我使用Broadcast Receiver
在手机启动时接收广播,并从那里我要注册PhoneStateListener
和ContentObserver
。不幸的是,它不会让我使用setReceiver()
方法来处理ContentObserver
,就像我的主要活动一样。 PhoneStateListener
和startService()
也有类似的问题,但我能够使用通过的context
使其工作。这并不能解决setReceiver
的问题。调用此方法的正确方法是什么?在手机上启动ContentObserver启动
顺便提一下它给人的错误是 “方法setReceiver(SmsObserver)是未定义的类型上下文”
我的代码:
public class BootReceiver extends BroadcastReceiver {
private Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
// Get the telephony manager
TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
// Create a new PhoneStateListener
PhoneStateListener listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_IDLE) {
Intent update = new Intent(mContext,
UpdateService.class);
mContext.startService(update);
}
}
@Override
public void onDataActivity(int direction) {
if (direction == TelephonyManager.DATA_ACTIVITY_NONE) {
Intent update = new Intent(mContext,
UpdateService.class);
mContext.startService(update);
}
}
};
// Register the listener with the telephony manager
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
telephonyManager.listen(listener,
PhoneStateListener.LISTEN_DATA_ACTIVITY);
SmsObserver smsSentObserver = new SmsObserver(new Handler(), mContext);
//Unable to call this method
mContext.setReceiver(smsSentObserver);
}
}
它是否能够被终止,因为我在BroadcastReceiver中运行它,或者它是否也适用于活动?我在主要活动中使用了onCreate中的相同代码,并且没有注意到ContentObserver在任何时间长度后都停止。它正在观察发送的SMS信箱并在onChange()中刷新我的小部件,因为它在关机时终止了,我试图在手机启动时再次启动它。 – 2012-01-30 20:27:39
@MattHarris:“它能够被终止,因为我在BroadcastReceiver中运行它,还是这也适用于Activities? - 如果您不在前台,Android最终会终止您的流程。 http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle – CommonsWare 2012-01-30 20:38:22
我明白了,谢谢。 – 2012-01-30 20:51:14