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; }