gpt4 book ai didi

android - 应用程序需要所有插入、删除联系人的通知

转载 作者:行者123 更新时间:2023-11-29 00:36:01 25 4
gpt4 key购买 nike

(下面添加了工作代码摘录)

我的应用程序需要收到有关联系人的所有插入和删除(可能还有更新,但不太重要)的通知。这意味着当应用程序启动时,它将需要一个更改列表。当它运行时,应该立即通知它(甚至可以在应用程序运行时更改应用程序外部的联系人吗?)。

我应该使用 ContentObserver 吗?我需要服务吗?有没有办法在应用程序启动时获取自上次应用程序运行以来发生的更改列表?

谢谢。


ContentObserver 确实有效。但是,对于联系人,它所做的比我希望的要少得多。您只会收到有关某些内容已更改的通知(实际上,您可能会收到多个通知)。你不会知道发生了什么变化。不过,我想总比没有通知好。

当您收到通知时,您必须运行查询以查明您感兴趣的任何联系人是否已更改。如果您需要检查所有这些,我认为您最好使用 SyncAdapter。

这是我最终使用的代码。首先是一个 ContentObserver 子类;这会收到来自您注册的任何提供商的通知(请参阅下一段代码):

  class MainContentObserver extends ContentObserver
{
public MainContentObserver (Handler handler)
{
super (handler);
}

@Override
public void onChange (boolean selfChange)
{
Message msg = handler.obtainMessage();
msg.what = CONTACTS_CHANGED; // const int declared elsewhere
msg.obj = null;
handler.sendMessage (msg);
}
}

这是第二个 block - 这是来自您的 Activity 的 onCreate(或者它可以在 onResume 中)。有两个重要的部分。第一,我实现并实例化一个处理程序。这将从在单独线程中运行的观察者接收“消息”,并将它们转发到我的 Activity 。第二部分是观察者的创建,它通过注册调用发生。

  @Override
public void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

// receive notices from our background threads.
handler = new Handler()
{
@Override
public void handleMessage (Message msg)
{
if (msg.what == CONTACTS_CHANGED) // const int declared elsewhere
System.out.println ("handler: contacts changed");
else
throw new IllegalArgumentException ("unrecognized handler message source: " + msg.what);
}
};

// register content observer for contact changes
contactsObserver = new MainContentObserver (handler);
getContentResolver().registerContentObserver (ContactsContract.AUTHORITY_URI, true,
contactsObserver);

... other initialization ...
}

最后,还有一个代码块 - 您需要取消注册观察者,否则(我已经读过)您将发生内存泄漏。 (如果您在 onResume 中注册,请务必在 onPause 中注销。)

  @Override
public void onDestroy ()
{
super.onDestroy();
getContentResolver().unregisterContentObserver (contactsObserver);
}

最佳答案

我知道你想做什么没有广播。 ContentObserver 是你必须去的。还要检查: Native contact change notification

关于android - 应用程序需要所有插入、删除联系人的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649377/

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