Android ContenObserver 監聽連絡人資料變化

來源:互聯網
上載者:User

標籤:window   bundle   manifest   方法   change   request   detach   刪除   項目結構   

一、知識介紹

   1、ContentProvider是內容提供者

         ContentResolver是內容解決者(對內容提供的資料進行操作)

         ContentObserver是內容觀察者(觀察內容提供者提供的資料變化)

  2、ContentObserver需要ContentResolver進行註冊。

         resolver.registerContentObserver(uri,true,observer);

         ①URI(第一個參數):該監聽所監聽ContentProvider的Uri

         ②notifyForDescendents(第二個參數):設定為true。(如果請求的uri為content://abc則uri為content://abc/xyz資料改變都將會檢測到。

         ③observer:監聽器執行個體。

 3、利用Observer中的onchange方法,當資料發生變化是,自動執行回調方法。

 

二、項目實踐【步驟】

   ①定義Observer監聽器

   ②擷取到連絡人ContentResolver

   ③註冊Observer。

   ④重要的一點:添加存取權限(動態也要)

   ⑤登出Observer

【項目結構】

    

【MainActivity】

   【提示】:這裡將Observer寫成內部類的形式。代碼只有這一部分,其他的無需添加。

 1 import android.Manifest; 2 import android.content.ContentResolver; 3 import android.content.pm.PackageManager; 4 import android.database.ContentObserver; 5 import android.net.Uri; 6 import android.os.Handler; 7 import android.provider.ContactsContract; 8 import android.support.v4.app.ActivityCompat; 9 import android.support.v7.app.AppCompatActivity;10 import android.os.Bundle;11 import android.util.Log;12 import android.widget.Toast;13 14 public class MainActivity extends AppCompatActivity {15 16     ContentResolver resolver = null;17     Observer observer = null;18     @Override19     protected void onCreate(Bundle savedInstanceState) {20         super.onCreate(savedInstanceState);21         setContentView(R.layout.activity_main);22         23         //動態許可權申請(同時也要在AndroidManifest檔案問進行申請許可權)24         if (ActivityCompat.checkSelfPermission(this,25                 Manifest.permission.READ_CONTACTS)!=26                 PackageManager.PERMISSION_GRANTED);27                 ActivityCompat.requestPermissions(28                         MainActivity.this,29                         new String[]{ Manifest.permission.READ_CONTACTS30         },0);31                 32         //執行個體化Observer        33         observer = new Observer(new Handler());34         //擷取resolver35         resolver = getContentResolver();36         Uri uri = ContactsContract.Contacts.CONTENT_URI;37         //註冊Observer38         resolver.registerContentObserver(uri,true,observer);39 40     }41 42     class Observer extends ContentObserver{43 44         public Observer(Handler handler) {45             super(handler);46         }47 48         @Override49         public void onChange(boolean selfChange) {50             super.onChange(selfChange);51             Toast.makeText(MainActivity.this,52                     "連絡人清單發生變化",Toast.LENGTH_SHORT).show();53             //onchange 方法中添加Toast便於觀察54         }55     }56 57     @Override58     public void onDetachedFromWindow() {59         super.onDetachedFromWindow();60         //在Activity中登出observer61         resolver.unregisterContentObserver(observer);62     }63 }

 

【效果】剛剛刪除了一條連絡人資訊

    

【小結】

   ①ContentObserver能夠及時的檢測到ContentProvider提供的資料變化。

   ②ContentObserver不僅能夠針對系統提供的,也可以自己建立的程式之間通過ContentObserver,ContentResolver進行通訊

 

 

Android ContenObserver 監聽連絡人資料變化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.