AnyblockResolver(ContentResolver)
一、使用ContentProvider(内容提供者)共享数据
ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE或Context.MODE_WORLD_WRITEABLE同样也可以对外共享数据。那么,这里为何要使用ContentProvider对外共享数据呢?是这样的,如果采用文件操作模式对外共享数据,数据的访问方式会因数据存储的方式而不同,导致数据的访问方式无法统一,如:采用xml文件对外共享数据,需要进行xml解析才能读取数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读取数据。
使用ContentProvider对外共享数据的好处是统一了数据的访问方式。
二、使用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和对其中的什么数据进行操作。
更多帮助请看:http://www.cnblogs.com/linjiqin/archive/2011/05/28/2061396.html
以下为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; }

浙公网安备 33010602011771号