亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-03 20:55:15 來源:腳本之家 閱讀:153 作者:leehom 欄目:移動開發

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的實例詳解,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安顺市| 郴州市| 开封市| 黄陵县| 鄯善县| 顺义区| 八宿县| 兴国县| 运城市| 罗江县| 德化县| 和政县| 曲靖市| 玛纳斯县| 裕民县| 桃江县| 河北省| 弥渡县| 顺昌县| 灵寿县| 永德县| 泗水县| 搜索| 喀喇沁旗| 西平县| 巍山| 望江县| 南康市| 三门峡市| 古蔺县| 淮南市| 车致| 建宁县| 平罗县| 藁城市| 贵阳市| 永康市| 康平县| 杂多县| 绥阳县| 文安县|