如何在不打开应用程序的情况下使 ContentObserver 工作?

Posted

技术标签:

【中文标题】如何在不打开应用程序的情况下使 ContentObserver 工作?【英文标题】:How to make ContentObserver work without having application opened? 【发布时间】:2013-10-15 11:39:54 【问题描述】:

我需要让我的应用程序监听 android 中地址簿的变化。我读过它可以使用ContentObserver 来完成并监听ContactsContract.Contacts 的变化。似乎 ContentObserver 的生命周期在应用程序关闭时结束。

即使应用程序未打开,我如何使 ContentObserver 正常工作?

【问题讨论】:

你有什么解决办法@MikkoP... 【参考方案1】:

即使应用程序未打开,我如何使 ContentObserver 正常工作?

这是不可能的。 ContentObserver 背后的要点是通知可能影响正在运行的应用程序的更改,例如需要反映在显示该数据的活动中的数据更改。如果你的应用没有运行,你就不能拥有ContentObserver

【讨论】:

在监听通讯录变化方面我还有哪些其他选择? @MikkoP:理想情况下,您停止监听任何“地址簿”中的实时变化,并以其他方式解决您的问题。欢迎您使用前台服务之类的东西来尝试将您的应用保留在内存中,并且欢迎您的用户随后强制停止或卸载您的应用,并在 Play 商店中为您提供讨厌的 cmets 作为响应。 我不确定你的情况,但我认为在谈到包含所有用户联系人的数据库时,地址簿是一个众所周知的术语。您认为在应用程序中有一个按钮来在进行更改后刷新联系人会更好吗?我没有,我认为用户甚至不会记得这样做。考虑到我是唯一的用户,我对此非常确定;)【参考方案2】:

使用return START_STICKY; 在 OnStartCommand 中注册您的 Content Observer,而不是在 onCreate 中注册它。它对我有用。

@Override  
public int onStartCommand(Intent intent, int flags, int startId)   
    getContentResolver().registerContentObserver(uri,true, new SMSObserver(new Handler(), getBaseContext())); 
    return START_STICKY;    
 

【讨论】:

以上是关于如何在不打开应用程序的情况下使 ContentObserver 工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除 Ionic 3 的情况下使 iOS 上的状态栏透明?

如何在不发送错误的情况下使按钮转到另一个视图控制器?

如何在不使用滤镜的情况下使图像变暗? [复制]

如何在不需要额外点击的情况下使 DataGridCheckBoxColumn 可编辑?

如何在不先启动 IE 的情况下使我的 WinCE 应用程序中的网络工作?

如何在不使用 div 的情况下使 iframe 响应?