在手机启动时启动ContentObserver



当手机启动时,我正在使用Broadcast Receiver接收广播,我想从那里注册PhoneStateListenerContentObserver。不幸的是,它不允许我像在我的主要活动中那样使用setReceiver()方法来处理ContentObserverPhoneStateListenerstartService()也有类似的问题,但我能够使用传递的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,那么您将使用ContentResolvernotifyChange()来注册它

从策略上讲,您的代码是无用的,因为您的进程可能会在onReceive()结束后不久终止,这使得所有这些工作都变得毫无意义。

最新更新