Android contentprovider 内容提供者初识(一)
1、ContentProvider :内容提供者。用来干什么:1、可以分享数据给其它的应用。 相当于一个中间人提供上线的数据给下线,上线和下线之间不打交道,联系全靠中间人,这种格式是统一固定的。怎么用:ContentProvider 是一个抽象的类,要使用这个类时,需要实现六个abstract方法。具体用法:1、使用现有的内容提供器来读取相应程序的数据----
1、ContentProvider :内容提供者。
用来干什么:1、可以分享数据给其它的应用。(相当于一个中间人提供上线的数据给下线,上线和下线之间不打交道,联系全靠中间人,这种格式是统一固定的)。
具体用法场景:1、使用现有的内容提供器来读取相应程序的数据----可以读取电话、短信中的内容
2、创建自己的内容提供器给程序的数据提供外部访问接口
理解基础知识:URI、MIME数据类型、ContentResolver(内容解析者)、ContentObserver(内容观察者)?部分解释说明:
1、ContentProvider: 是一个抽象的类,要使用这个类时,需要实现六个abstract方法。
2、ContentResolver:其他APP或者进程操作ContentProvider,需要现获取相应的ContentResolver,再利用ContentResolver类完成对数据的操作。
3、URI:在数据库中我们在查询的时候需要表名,在这里专门提供了一个 内容URI,给内容提供器中的数据建立唯一标识符;
content:// com.example.app.provider/table1
字段 | 对应 | 含义 |
前缀主题 | content:// | 固定格式;并将此标识为内容 URI
|
授权 | com.example.app.provider | 唯一标识provider,表示程序的授权 |
路径 | /table1/1 | 表的路径 |
1、query函数: query(Uri,projection,selection,selectionArgs,sortOrder) 可以理解成:
SELECT _ID, word, locale FROM words WHERE word = <userinput> ORDER BY word ASC;
query() 参数 | SELECT 关键字/参数 | 说明 |
Uri | FROM table_name | Uri 映射至提供程序中名为 table_name 的表。 |
projection | col,col,col,... | projection 是应该为检索到的每个行包含的列的数组。 |
selection | WHERE col = value | selection 会指定选择行的条件。 |
selectionArgs | (没有完全等效项。选择参数会替换选择子句中 ? 占位符。) | |
sortOrder | ORDER BY col,col,... | sortOrder 指定行在返回的 Cursor 中的显示顺序。 |
1、查询操作:
增加相应的权限:<uses-permission android:name="android.permission.READ_USER_DICTIONARY">
可基本通过以下步骤操作:
public void getContactnameByNameber(){
ContentResolver resolver = getContentResolver();
//cusor:游标 会返回包含指定条件的行和列
Cursor cusor = resolver.query(ContactsContract.Contacts.CONTENT_URI,new String[]{ContactsContract.Data.DISPLAY_NAME},null,null,null);
if(cusor !=null){
while(cusor.moveToFirst()){
String name = cusor.getString(index);
Log.i(TAG,name);
}
}else{
}
cusor.close();
}
2、插入数据:insert(Uri url, ContentValues values)
/**
* 新增一条通话记录
*
* */
public static void insertCallLog(Context context,String sNumber)
{
ContentValues values = new ContentValues();
values.put(CallLog.Calls.NUMBER, sNumber);
values.put(CallLog.Calls.DATE, System.currentTimeMillis());// 来电时间
values.put(CallLog.Calls.DURATION, "1000");// 通话时长
values.put(CallLog.Calls.TYPE, 1);// 1来电,2去电,3未接
values.put(CallLog.Calls.NEW, "1");// 0已看,1未看
context.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
}
3、删除数据:delete(Uri url, String where, String[] selectionArgs)
/**
* 删除通话记录
*/
public static void deleteAllCallLogs(Context cn) {
ContentResolver resolver = cn.getContentResolver();
resolver.delete(CallLog.Calls.CONTENT_URI, "_id!=-1", null);
}
更多推荐
所有评论(0)