gpt4 book ai didi

java - 在哪里注册必须无限期运行的 ContentObserver?

转载 作者:行者123 更新时间:2023-12-02 13:19:19 26 4
gpt4 key购买 nike

以下是我注册 ContentObserver 来监听发送的短信的方法:

SendSmsObserver smsObeserver = (new SendSmsObserver(new Handler(), context));
ContentResolver contentResolver = context.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsObeserver);

这是 SendSmsObserver 类:

class SendSmsObserver extends ContentObserver {

private Context context;

SendSmsObserver(Handler handler, Context context) {
super(handler);
this.context = context;
}

@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
queryLastSentSMS();
}

现在的问题是我应该把前三行代码放在哪里?目前我正在 Activity 的 OnCreate 方法中编写它。但通过这样做,我每次启动应用程序时都会调用它。我不知道这是否是不好的做法。

我的要求是我应该监听 Activity 生命周期之外发送的短信。这按预期工作,但我应该始终在 OnCreate 方法中注册它吗?另外,我想将相同的行放入 BroadcastReceiver 的 onReceive() 中,以确保我在重新启动设备后正在监听。

更新:BroadcastReceiver 不知何故未注册 ContentObserver。我还尝试使用 getApplicationContext() 作为 BroadcastReceiver 中的上下文,但没有成功。

最佳答案

您可以创建一个在后台无限期运行的服务(启动粘性)。在此服务中,您可以添加内容观察者(前 3 行)。这样您就可以确保在用户关闭应用程序后服务仍然正常工作。

您可以在应用程序类的 OnCreate 中启动此服务,也可以在广播接收器中启动此服务,以确保它在手机重新启动后运行。

关于java - 在哪里注册必须无限期运行的 ContentObserver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43633270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com