В Android има ли начин да получите известие, когато снимката на контакт се промени (чрез приемник, слушател и т.н.)?

Приложението ми използва персонализирано оформление, което показва цялата информация за контакт, включително снимки. Проектиран е да обработва много голямо количество контакти (през 1000-те) и създадох кеш за снимките на контактите, за да ги накарам да се зареждат много по-бързо. Срещам обаче проблеми, когато снимките на контактите се актуализират на телефона. Тъй като използвам кеширани, новата снимка не се показва в приложението, докато не бъде затворено принудително и след това рестартирано. И не искам да използвам нищо като клеймо за последно достъпно време за опресняване на кешираните снимки, защото това значително ще забави приложението всеки път, когато е необходимо опресняване.

Така че в идеалния случай бих искал да получавам известия (чрез нещо като приемник за излъчване), когато се промени снимка на контакт, и след това мога да актуализирам тази снимка в кеша. Това възможно ли е?


person user496854    schedule 21.04.2013    source източник


Отговори (2)


вместо това използвайте CursorLoader, за да актуализирате графичния си интерфейс автоматично. Тук можете да видите урок. Очевидно има много други примери.

person stinepike    schedule 21.04.2013
comment
Не съм сигурен какво общо има това с по-бързото зареждане на снимките. Вече правя всички актуализации на фонова нишка и вече внедрих кеш за снимки, за да е много по-бързо. Проблемът е откриването на промени в снимките и актуализирането на кеша, когато се случат. - person user496854; 21.04.2013
comment
Използването на CursorLoader се препоръчва, тъй като той се актуализира асинхронно и автоматично при всяка промяна на източника на данни. В този случай ContactsProvider. - person TJ Thind; 21.04.2013

Можете да използвате 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 се извиква, докато не го отмените.

person Nizam    schedule 03.06.2013
comment
Това ще се задейства всеки път, когато има промяна в контакт, което е прекомерно. Бих искал да бъда уведомен само когато снимката бъде променена. - person user496854; 03.06.2013
comment
В този ContentObserver; Има ли начин да получите подробности за контакта, който е добавен или променен?? Искам да създам подобен слушател, но искам да извърша някаква операция върху добавен/променен контакт. - person Allzhere; 01.10.2013
comment
Това не е много полезно, защото ще бъде извикано само докато приложението ви работи, което вероятно не е, когато контактът се промени. - person John Patterson; 25.02.2015