Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在手机启动时启动ContentObserver_Android - Fatal编程技术网

Android 在手机启动时启动ContentObserver

Android 在手机启动时启动ContentObserver,android,Android,我正在使用广播接收器在手机启动时接收广播,我想从那里注册PhoneStateListener和ContentObserver。不幸的是,它不允许我在我的主要活动中使用setReceiver()方法来处理ContentObserver之类的内容。PhoneStateListener和startService()也存在类似的问题,但我能够使用传递的上下文使其工作。这并不能解决setReceiver的问题。调用此方法的正确方法是什么 顺便说一下,它给出的错误是“类型上下文的方法setReceiver(

我正在使用
广播接收器
在手机启动时接收广播,我想从那里注册
PhoneStateListener
ContentObserver
。不幸的是,它不允许我在我的主要活动中使用
setReceiver()
方法来处理
ContentObserver
之类的内容。
PhoneStateListener
startService()
也存在类似的问题,但我能够使用传递的
上下文使其工作。这并不能解决
setReceiver
的问题。调用此方法的正确方法是什么

顺便说一下,它给出的错误是“类型上下文的方法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);

}
}

这并不能解决setReceiver的问题。调用此方法的正确方法是什么

从策略上讲,Android中没有
setReceiver()
方法。如果
SmsObserver
应该是
ContentObserver
,您将使用
ContentResolver
notifyChange()
来注册它


从战略上讲,您的代码是无用的,因为您的进程可以在
onReceive()
结束后很快终止,这使得所有这些工作都没有意义。

可以终止它是因为我在广播接收器中运行它,还是这也适用于活动?在我的主要活动中,我在onCreate中使用了相同的代码位,但没有注意到ContentObserver在任何时间后停止。它正在观察已发送的SMS框并刷新onChange()中的我的小部件,因为它在关机时被终止。我正在尝试在手机启动时再次启动它。@MattHarris:“它能够被终止是因为我在广播接收器中运行它,还是这也适用于活动?”--如果你不在前台,Android最终将终止您的进程。