Android,監控ContentProvider的數據改變

有時候應用中需要監聽ContentProvider的改變并提供響應,這時候就要利用ContentObserver類了

不管是ContentProvider中實現的,insert,delete,update方法中的任何一個,程序都會調用getContext().getContentResolver().notifyChange(uri,null);

這行代碼可用于通知所有注冊在該Uri上的監聽者,該ContentProvider所共享的數據發生了改變 

監 聽ContentProvider數據改變的監聽器需要繼承ContentObserver類,并重寫該基類所定義的onChange(boolean selfChange)方法,當它所監聽的ContentProvider所共享的數據發生改變時,該onChange將會觸發

為了監聽指定的ContentProvider的數據變化,需要通過ContentResolver向指定Uri注冊ContentObserver監聽器.

用如下方法來注冊監聽器

registerContentObserver(Uri uri,boolean notifyForDescendents,ContentObserver observer)

notifyForDescendents :如果該參數設為true,假如Uri為content://abc,那么Uri為content://abc/xyz, content://abc/xyz/foo的數據改變時也會觸發該監聽器,如果參數為false,那么只有 content://abc的數據改變時會觸發該監聽器

下面以監聽系統的短信為例,下圖為模擬發送一條短信

上面有一條短信內容為hello,下面啟動監聽程序在logcat中打印該短信的相關信息

下面為代碼

    package WangLi.IO.MonitorSms;  import android.app.Activity;  import android.database.ContentObserver;  import android.database.Cursor;  import android.net.Uri;  import android.os.Bundle;  import android.os.Handler;  public class MonitorSms extends Activity {  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  //為content://sms的數據改變注冊監聽器  this.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true,   new SmsObserver(new Handler()));  }  //根據自定義的ContentObserver監聽類  private final class SmsObserver extends ContentObserver  {  public SmsObserver(Handler handler) {  super(handler);  // TODO Auto-generated constructor stub  
            }  public void onChange(boolean selfChange)  {  //查詢發送箱中的短信(處于正在發送狀態的短信放在發送箱)  Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"),   null, null, null, null);  //遍歷查詢得到結果集,即可獲取用戶正在發送的短信  while(cursor.moveToNext())  {  StringBuilder sb = new StringBuilder();  //獲取短信的發送地址  sb.append("address=").append(  cursor.getString(cursor.getColumnIndex("address")));  //獲取短信標題  sb.append(";subject=").append(  cursor.getString(cursor.getColumnIndex("body")));  //獲取短信發送時間  sb.append(";time=").append(  cursor.getLong(cursor.getColumnIndex("date")));  System.out.println("Has Sent SMS:::" + sb.toString());  }  }  }  }  

?

轉載于:https://www.cnblogs.com/zhujiabin/p/4601737.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375823.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[leetcode]Sort List

題目要求:Sort a linked list in O(n log n) time using constant space complexity. 數據結構定義: 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : v…

北京市中 高英語聽說計算機考,2021年北京高考首次英語聽說機考時間確定,共五種題型...

從明年開始,北京市高考統考英語科目增加口語考試,連同之前的聽力考試一起,實行一年兩考。今天,北京教育考試院發布消息,2021年高考英語聽說計算機考試首考將于2020年12月12日進行。12月7日起,考生可登陸北京…

NewCode----彩色寶石項鏈

題目描述: 有一條彩色寶石項鏈,是由很多種不同的寶石組成的,包括紅寶石,藍寶石,鉆石,翡翠,珍珠等。有一天國王把項鏈賞賜給了一個學者,并跟他說,你可以帶走這條項鏈,但是…

插件開發-UI插件開發

1.新建類庫解決方案,引入命名空間,同時引入要添加UI Form的WebPart(在Portal\UILib目錄下)2.繼續UFSoft.UBF.UI.Custom.ExtendedPartBase,重寫AfterInit()方法,代碼如下,便于添加下拉列表按鈕,在原單據中UI先新增一下拉…

為博客園選擇一個小巧霸氣的語法高亮插件

博客園的語法高亮簡直蛋疼,于是乎就打算找一個靠譜的插件來改造下。各種百度谷歌,大致得到幾個推薦:SyntaxHighlighter,Snippet,Google Code Pretiffy,Highlight,SHJS。其實 SyntaxHighlighter …

計算器軟件設計和計算機軟件設計區別,求一個模擬計算器程序

# include# include# include# include# define MAX_OPERATOR_NUM 100//運算符棧數組長度# define MAX_DATA_NUM 100//運算數棧數組長度typedef struct OPStack//定義運算符棧{char opStack[MAX_OPERATOR_NUM];int top;}OPStack, *pOPStack;typedef struct DATAStack//定義操作…

python中print語句

學習鏈接1 學習鏈接2 1. 如果print語句后面什么符號都沒有是個換行語句,也就是是要另起一行。 2. 分號表示下次輸出是緊挨著這個光標位置輸出. 3. 而逗號是下次輸出與這次輸出有一定的空格之后接著輸出. namekk salutationMr. greetingHello, print greeting,sa…

計算機應用基礎論壇貼子怎么發,網絡課程論壇中長尾現象的應對策略——以《計算機應用基礎》網絡課程為例...

摘要:進入21世紀以來,互聯網就備受關注.由于我國信息設施資源建設穩步推進,互聯網的基礎更為堅實,發展更為迅速.據權威數據統計,中國至2009年約擁有130萬個BBS論壇,數量為全球第一,然而,作為分享和參與類應用的典型代表(更新博客,發帖/回帖)的使用率仍然偏低.筆者在…

解析Json需要設置Mime

IIS6.0 1.打開IIS添加Mime項 關聯擴展名:*.json內容類型(MIME):application/x-javascript 2.添加映射: 位置在IIS對應站點右鍵屬性:”主目錄”-”應用程序設置”-”配置”-”映射”-”添加”,會打開”添加/編輯應用程序…

Using the Transient Fault Handling Application Block

http://msdn.microsoft.com/en-us/library/dn440719(vpandp.60).aspx轉載于:https://www.cnblogs.com/fengye87626/p/3772555.html

讓python腳本像普通程序一樣運行

有些時候像運行其他程序一樣運行python程序(也叫做腳本),而不是顯式使用python解釋器。在UNIX中有個標準的實現方法:在腳本首行前面加上#!(叫做pound bang或者shebang),在其后加上用…

Function類型(JS高程3)—— JS學習筆記2015-6-29(第70天)

Function 類型 函數是對象 具有屬性和方法,函數名實際上是一個指向函數對象的指針 沒有重載; 函數聲明和函數表達式 函數聲明: function sum (num1, num2){ return num1 num2; } 函數表達式: var sum function(num1, num2){ ret…

PS圖片刪除需要計算機管理權限,如何使用PsTools工具執行本地/遠程PC管理任務

大多數剛入門的管理員都習慣使用 RDP 或其它類似的工具連接到遠程 Windows 中進行圖形化管理。而 PowerShell 及 PsTools 等工具可以幫助我們在命令行中執行相當多的管理任務,更主要的是可以將其寫成腳本來執行周期性重復任務或在管理大批量服務器時提高效率。在企業…

LeetCode:Spiral Matrix I II

Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. 打印螺旋矩陣 逐個環…

TCP為什么需要三次握手和四次揮手

網上已經有很多解釋了,就不瞎說了,Mark一些鏈接作為自己的學習筆記吧。 學習參考鏈接1 學習參考鏈接2 學習參考鏈接3 學習參考鏈接4 為什么要3次握手 防止已過期的連接請求報文突然又傳送到服務器,因而產生錯誤。 Client發生一個請求連…

不屬于個人計算機范圍的是,計算機應用基礎模擬試卷2

一、1.單項選擇題單項選擇題每小題1分。在每小題列出的四個備選項中只有一個是符合題目要求的,請將其選出并將“答題卡”的相應代碼涂黑。未涂、錯涂或多涂均無分。0. 個人計算機屬于A.小巨型機B.小型計算機C.微型計算機D&#xf…

Python實驗:關燈游戲

文章目錄 前言一、設計表二、關鍵代碼三、運行結果小地圖,容易難度:中地圖,中等難度:大地圖,困難難度: 四、完整代碼鏈接總結 前言 這是一個Python實驗作業,內容如下: 題目要求&am…

解決Ubuntu14.04在外接顯示器不能指定問題的最佳分辨率

通常這種情況發生。在System Settings -> display 你會發現多出了一個 unknown display。這往往是因為你使用質量低劣的視頻電纜,例如,幾美元VGA線。解決方案有2,質量好的一個改變鋼帶(有磁場干擾)VGA線…

基礎練習 - 數值交換

題目 1 聲明兩個變量:int n1 10,n2 20,要求將兩個變量叫喚,最后輸出n1為20,n2為10. (擴展*: 不使用第三個變量如何交換) 解決方案 基本方法 private static void BasicMethod(){int n1 10;int n2 20;Console.WriteLine("n1…

python計算圓的面積

用Python創建一個腳本,要求: 能計算半徑為2的圓的面積保留10位小數可以直接執行 #!/usr/bin/env python3 import math print("Area is:{:.10f}".format(math.pi*4))計算圓的面積要用到pi,所以我們引用模塊math