Android 在安卓系统中,有没有一种方法可以在联系人';s照片更改(通过接收器、侦听器等)?
我的应用程序使用自定义布局来显示所有联系人信息,包括照片。它的设计是为了处理大量的联系人(1000个),我为联系人照片创建了一个缓存,使其加载速度更快。然而,在手机上更新联系人照片时,我遇到了一些问题。由于我使用的是缓存的照片,新照片在强制关闭然后重新启动之前不会显示在应用程序中。我不想使用任何类似上次访问的时间戳来刷新缓存的照片,因为这样做会在每次需要刷新时显著降低应用程序的速度Android 在安卓系统中,有没有一种方法可以在联系人';s照片更改(通过接收器、侦听器等)?,android,photo,contact,photos,Android,Photo,Contact,Photos,我的应用程序使用自定义布局来显示所有联系人信息,包括照片。它的设计是为了处理大量的联系人(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(触点提供程序)将在每次对触点进行过度更改时触发。我只希望在照片更改时收到通知;有没有办法获取添加或更改的联系人的详细信息??我想创建一个类似的侦听器,但想对添加/修改的联系人执行一些操作。这不是很有用,因为它只会在应用程序运行时调用,而更改联系人时可能不会调用。