当手机启动时,我正在使用Broadcast Receiver
接收广播,我想从那里注册PhoneStateListener
和ContentObserver
。不幸的是,它不允许我像在我的主要活动中那样使用setReceiver()
方法来处理ContentObserver
。PhoneStateListener
和startService()
也有类似的问题,但我能够使用传递的context
使其工作。这并不能解决setReceiver
的问题。调用此方法的正确方法是什么?
顺便说一句,它给出的错误是"方法setReceiver(SmsObserver)对于类型Context未定义"
我的代码:
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);
}
}
这并不能解决setReceiver的问题。调用此方法的正确方法是什么?
从策略上讲,Android中没有setReceiver()
方法。如果SmsObserver
应该是ContentObserver
,那么您将使用ContentResolver
和notifyChange()
来注册它
从策略上讲,您的代码是无用的,因为您的进程可能会在onReceive()
结束后不久终止,这使得所有这些工作都变得毫无意义。