国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 使用ContentObserver監聽數據庫內容是否更改

2019-10-22 18:29:40
字體:
來源:轉載
供稿:網友

Android 使用ContentObserver監聽數據庫內容是否更改

ContentObserver——內容觀察者,目的是觀察(捕捉)特定Uri引起的數據庫的變化,繼而做一些相應的處理,它類似于數據庫技術中的觸發器(Trigger),當ContentObserver所觀察的Uri發生變化時,便會觸發它。觸發器分為表觸發器、行觸發器,相應地ContentObserver也分為“表“ContentObserver、“行”ContentObserver,當然這是與它所監聽的Uri MIME Type有關的。熟悉Content Provider(內容提供者)的應該知道,我們可以通過UriMatcher類注冊不同類型的Uri,我們可以通過這些不同的Uri來查詢不同的結果。根據Uri返回的結果,Uri Type可以分為:返回多條數據的Uri、返回單條數據的Uri。

注冊/取消注冊ContentObserver方法,抽象類ContentResolver類中的方法原型如下:

public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)

功能:為指定的Uri注冊一個ContentObserver派生類實例,當給定的Uri發生改變時,回調該實例對象去處理。

參數:

uri 需要觀察的Uri(需要在UriMatcher里注冊,否則該Uri也沒有意義了)

notifyForDescendents 為false 表示精確匹配,即只匹配該Uri

觀察系統里短消息的數據庫變化的ContentObserver派生類,SMSContentObserver.java

import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.util.Log;     //用來觀察系統里短消息的數據庫變化 ”表“內容觀察者,只要信息數據庫發生變化,都會觸發該ContentObserver 派生類 public class SMSContentObserver extends ContentObserver {   private static String TAG = "SMSContentObserver";       private int MSG_OUTBOXCONTENT = 2 ;       private Context mContext ;   private Handler mHandler ;  //更新UI線程       public SMSContentObserver(Context context,Handler handler) {     super(handler);     mContext = context ;     mHandler = handler ;   }   /**    * 當所監聽的Uri發生改變時,就會回調此方法    *    * @param selfChange 此值意義不大 一般情況下該回調值false    */   @Override   public void onChange(boolean selfChange){     Log.i(TAG, "the sms table has changed");           //查詢發件箱里的內容        Uri outSMSUri = Uri.parse("content://sms/sent") ;           Cursor c = mContext.getContentResolver().query(outSMSUri, null, null, null,"date desc");     if(c != null){               Log.i(TAG, "the number of send is"+c.getCount()) ;               StringBuilder sb = new StringBuilder() ;       //循環遍歷       while(c.moveToNext()){         sb.append("發件人手機號碼: "+c.getInt(c.getColumnIndex("address")))          .append("信息內容: "+c.getString(c.getColumnIndex("body")))          .append("/n");       }       c.close();            mHandler.obtainMessage(MSG_OUTBOXCONTENT, sb.toString()).sendToTarget();         }   }     } 

主工程邏輯為MainActivity.java,對短消息的觀察Uri,通過測試我發現只能監聽此Uri “content://sms” (等于"content://sms/"),而不能監聽其他的Uri,比如"content://sms/outbox"等。

import android.app.Activity; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.*; import android.util.Log; import android.widget.EditText; import android.widget.TextView;   public class MainActivity extends Activity {     private TextView tvAirplane;   private EditText etSmsoutbox;     private SMSContentObserver smsContentObserver;     /** Called when the activity is first created. */   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);       etSmsoutbox = (EditText) findViewById(R.id.smsoutboxContent);       smsContentObserver = new SMSContentObserver(this, mHandler);           //注冊內容觀察者     registerContentObservers() ;   }     private void registerContentObservers() {     // ”表“內容觀察者 ,通過測試我發現只能監聽此Uri -----> content://sms     // 監聽不到其他的Uri 比如說 content://sms/outbox     Uri smsUri = Uri.parse("content://sms");     getContentResolver().registerContentObserver(smsUri, true,smsContentObserver);   }     private Handler mHandler = new Handler() {       public void handleMessage(Message msg) {         String outbox = (String) msg.obj;         etSmsoutbox.setText(outbox);       }     }   }; } 

 以上就是Android 使用ContentObserver的實例詳解,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂尔多斯市| 佛教| 池州市| 于都县| 焦作市| 威海市| 灌南县| 松江区| 泸溪县| 台山市| 济宁市| 临沂市| 贵南县| 永丰县| 庆城县| 虎林市| 运城市| 汝城县| 永宁县| 鄂托克旗| 乐昌市| 乃东县| 廊坊市| 盱眙县| 南阳市| 伊春市| 沁源县| 读书| 桐城市| 吴桥县| 沅陵县| 漾濞| 青浦区| 驻马店市| 秦皇岛市| 湘阴县| 西林县| 南阳市| 扶余县| 库尔勒市| 抚顺县|