1、使用ContentProvider(內容提供者)共享數據
ContentProvider在android中的做用是對外共享數據,也就是說你能夠經過ContentProvider把應用中的數據共享給其餘應用訪問,其餘應用能夠經過ContentProvider對你應用中的數據進行添刪改查。關於數據共享,之前咱們學習過文件操做模式,知道經過指定文件的操做模式爲Context.MODE_WORLD_READABLE或Context.MODE_WORLD_WRITEABLE一樣也能夠對外共享數據。那麼,這裏爲什麼要使用ContentProvider對外共享數據呢?是這樣的,若是採用文件操做模式對外共享數據,數據的訪問方式會因數據存儲的方式而不一樣,致使數據的訪問方式沒法統一,如:採用xml文件對外共享數據,須要進行xml解析才能讀取數據;採用sharedpreferences共享數據,須要使用sharedpreferences API讀取數據。
使用ContentProvider對外共享數據的好處是統一了數據的訪問方式。html
2、使用ContentResolver操做ContentProvider中的數據
當外部應用須要對ContentProvider中的數據進行添加、刪除、修改和查詢操做時,可使用ContentResolver 類來完成,要獲取ContentResolver 對象,可使用Activity提供的getContentResolver()方法。 ContentResolver 類提供了與ContentProvider類相同簽名的四個方法:
public Uri insert(Uri uri, ContentValues values):該方法用於往ContentProvider添加數據。
public int delete(Uri uri, String selection, String[] selectionArgs):該方法用於從ContentProvider刪除數據。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs):該方法用於更新ContentProvider中的數據。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder):該方法用於從ContentProvider中獲取數據。
這些方法的第一個參數爲Uri,表明要操做的ContentProvider和對其中的什麼數據進行操做。android
更多幫助請看:http://www.cnblogs.com/linjiqin/archive/2011/05/28/2061396.htmlide
如下爲CC短信攔截的定義:學習
import android.net.Uri; public class AnyblockResolver { public static final String AUTHORITY = "zhs.betalee.ccsmsblocker.AnyBlockProvider"; /* * 規則 DB_TABLE = "rules" */ // The incoming URI matches the Notes URI pattern public static final Uri RULES_CONTENT_URI = Uri.parse("content://zhs.betalee.ccsmsblocker.AnyBlockProvider/rules"); public static final String[] RULES_PROJECTION = new String[] { "_id", "rule", "type", "remark", "notif", "isenabled" }; public static final String DB_TABLE = "rules"; public static final String KEY_ID = "_id"; public static final String KEY_NAME = "rule";// 規則 public static final String KEY_TYPE = "type";// 規則類型 public static final String KEY_REMARK = "remark";// 備註 public static final String KEY_NOTIF = "notif";// 1是0否通知 public static final String KEY_ISENABLED = "isenabled";// 1啓用0停用 public static final int COLUMN_INDEX_KEY_ID = 0; public static final int COLUMN_INDEX_RULES_KEY_NAME = 1; public static final int COLUMN_INDEX_RULES_KEY_TYPE = 2; public static final int COLUMN_INDEX_RULES_KEY_REMARK = 3; public static final int COLUMN_INDEX_RULES_KEY_NOTIF = 4; public static final int COLUMN_INDEX_RULES_KEY_ISENABLED = 5; /* * 已攔截短信 BLOCKED_MESSAGES_DB_TABLE = "blockedmessages" */ // The incoming URI matches the Notes URI pattern public static final Uri BLOCKEDMSG_CONTENT_URI = Uri.parse("content://zhs.betalee.ccsmsblocker.AnyBlockProvider/blockedmessages"); public static final String[] BLOCKEDMSG_PROJECTION = new String[] { "_id", "number", "msgbody", "timestamp", "blockedrule", "status", "date2", "thread_id" }; public static final String BLOCKED_MESSAGES_DB_TABLE = "blockedmessages"; public static final String _ID = "_id"; public static final String FORMADDRESS = "number";// 攔截號碼 public static final String MSGBODY = "msgbody";// 短信內容 public static final String FORMTIME = "timestamp";// 發送時間 public static final String BLOCKEDRULE = "blockedrule";// 攔截對應規則 public static final String STATUS="status";// 1已讀,0未讀 public static final String DATE2 = "date2";// 接收時間 public static final String THREAD_ID = "thread_id";// 序號,同一發信人的id相同 public static final int COLUMN_INDEX_BLOCKEDMSG_ID = 0; public static final int COLUMN_INDEX_BLOCKEDMSG_FORMADDRESS = 1; public static final int COLUMN_INDEX_BLOCKEDMSG_MSGBODY = 2; public static final int COLUMN_INDEX_BLOCKEDMSG_FORMTIME = 3; public static final int COLUMN_INDEX_BLOCKEDMSG_BLOCKEDRULE = 4; public static final int COLUMN_INDEX_BLOCKEDMSG_STATUS = 5; public static final int COLUMN_INDEX_BLOCKEDMSG_DATE2 = 6; public static final int COLUMN_INDEX_BLOCKEDMSG_THREAD_ID = 7; }