Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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 在安卓系统中,有没有一种方法可以在联系人';s照片更改(通过接收器、侦听器等)?_Android_Photo_Contact_Photos - Fatal编程技术网

Android 在安卓系统中,有没有一种方法可以在联系人';s照片更改(通过接收器、侦听器等)?

Android 在安卓系统中,有没有一种方法可以在联系人';s照片更改(通过接收器、侦听器等)?,android,photo,contact,photos,Android,Photo,Contact,Photos,我的应用程序使用自定义布局来显示所有联系人信息,包括照片。它的设计是为了处理大量的联系人(1000个),我为联系人照片创建了一个缓存,使其加载速度更快。然而,在手机上更新联系人照片时,我遇到了一些问题。由于我使用的是缓存的照片,新照片在强制关闭然后重新启动之前不会显示在应用程序中。我不想使用任何类似上次访问的时间戳来刷新缓存的照片,因为这样做会在每次需要刷新时显著降低应用程序的速度 因此,理想情况下,每当联系人照片发生更改时,我希望得到通知(通过类似广播接收器的方式),然后我可以在缓存中更新该照

我的应用程序使用自定义布局来显示所有联系人信息,包括照片。它的设计是为了处理大量的联系人(1000个),我为联系人照片创建了一个缓存,使其加载速度更快。然而,在手机上更新联系人照片时,我遇到了一些问题。由于我使用的是缓存的照片,新照片在强制关闭然后重新启动之前不会显示在应用程序中。我不想使用任何类似上次访问的时间戳来刷新缓存的照片,因为这样做会在每次需要刷新时显著降低应用程序的速度


因此,理想情况下,每当联系人照片发生更改时,我希望得到通知(通过类似广播接收器的方式),然后我可以在缓存中更新该照片。这可能吗?

用户可以自动更新gui。您可以看到一个教程。显然还有很多其他的例子。

您可以使用ContentObserver

public class ContractObserv extends Activity {

MyContentObserver observer;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    observer=new MyContentObserver();
    getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, observer);

}


  private class MyContentObserver extends ContentObserver {

        public MyContentObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            Log.d("Androider", "INSIDE ONcHANGE");
        }

    }}

令人惊讶的是,一旦您运行它,并且每次联系人更改时,都会调用OnChange,直到您注销它。

我不确定这与更快地加载照片有什么关系。我已经在后台线程上进行了所有更新,并且我已经实现了一个照片缓存,使其速度更快。问题是检测照片更改并在发生更改时更新缓存。建议使用CursorLoader,因为它会在数据源更改时自动异步更新。在这种情况下,Contacts Provider(触点提供程序)将在每次对触点进行过度更改时触发。我只希望在照片更改时收到通知;有没有办法获取添加或更改的联系人的详细信息??我想创建一个类似的侦听器,但想对添加/修改的联系人执行一些操作。这不是很有用,因为它只会在应用程序运行时调用,而更改联系人时可能不会调用。