目录
1. Android提供的常见ContentProvider
Android系统为常用数据类型提供了很多预定义的ContentProvider(声音,视频,图片,联系人等),他们大多位于android.provider包中。开发人员可以查询这些provider以获得其中的信息(有些需要适当的权限来读取数据)
1. Android提供的常见ContentProvider
- Browser(浏览器) 读取或修改书签、浏览记录或网络搜索
- CallLog(通话日志) 查看或更新通话历史
- Contacts(联系人) 获取、修改或保存联系人信息
- LiveFolders(文件夹) 由ContentProvider提供内容的特定文件夹
- MediaStore(存储) 访问声音、视频、图片和APK文件等
- Setting 查看和获取蓝牙设置、铃声和其他设备偏好
- SyncStateContract 用于使用数据数组账号关联数据的ContentProvider约束。希望使用标准方式保存数据的provider时可以使用
- UserDictionary 在可预测文本输入时,提供用户定义单词给输入法使用。应用程序和输入法能增加数据到该字典。单词能关联频率信息和本地化信息。
2. URI组成
content:// aaa / bbb / 123
- content://为前缀,无需修改
- aaa为访问的应用
- bbb为哪类被请求
- 123为_ID值,如查全部数据可和前方斜杠一起删除
3. 查询预定义ContentProvider
query()方法的参数分别为:
- (1) 目标Uri
- (2) 查询列名
- (3) 决定哪些行被返回的过滤器,类似于SQL中的WHERE语句(但不是WHERE语句自身),null表示返回全部行(除非Uri限制查询结果为单行)
- (4) 选择参数
- (5) 返回记录的排序器,类似于SQL中的ORDER BY语句(但不是ORDER BY语句自身),null表示默认顺序返回记录(这可能是无序的)
ContentResolver contentResolver=getContentResolver();
Uri queryUri= ContactsContract.Contacts.CONTENT_URI;
String queryColumn[]={ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME};
Cursor cursor=contentResolver.query(queryUri,queryColumn,null,null,null);
(1) 联系人的URI及列名
<1>
- ContactsContract.Contacts.CONTENT_URI 管理联系人的Uri
- ContactsContract.Contacts._ID 外键ID
- ContactContract.Contracts.DISPLAY_NAME 联系人名
<2>
- ContactsContract.CommonDataKinds.Phone.CONTENT_URI 管理联系人的电话的Uri
- ContactsContract.CommonDataKinds.Phone.CONTACT_ID 外键ID
- ContactsContract.CommonDataKinds.Phone.NUMBER 电话号
<3>
- ContactsContract.CommonDataKinds.Email.CONTENT_URI 管理联系人的Email的Uri
- ContactsContract.CommonDataKinds.Email.CONTACT_ID 外键ID
- ContactsContract.CommonDataKinds.Email.DATA Email字段
(2) 全部APK文件
/**
* 获取全部APK文件
* @param context 上下文环境
* @return map键名:fileName-String型,filePath-String型,fileSize-int型
*/
public static ArrayList<Map<String,Object>> getAllApkFile(Context context){
ArrayList<Map<String,Object>> arrayList=new ArrayList<>();
//内容提供者查询APK信息
Cursor cursor=context.getContentResolver().query(
MediaStore.Files.getContentUri("external"),
null,"mime_type=\"application/vnd.android.package-archive\"",
null,null
);
//获取信息
if(cursor.getCount()>0) {
while (cursor.moveToNext()) {
//获取文件名
String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.TITLE));
//获取文件完整路径
String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
//获取文件大小
int fileSize = cursor.getInt(cursor.getColumnIndex(MediaStore.Files.FileColumns.SIZE));
//数据存入列表
Map<String, Object> map = new HashMap<>();
map.put("fileName", fileName);
map.put("filePath", filePath);
map.put("fileSize", fileSize);
arrayList.add(map);
}
cursor.close();
}
return arrayList;
}
4. 权限
部分ContentProvider需要获取权限后才能查看或修改
如:
android.permission.READ_CONTACTS android.permission.READ_PHONE_NUMBERS
tag:内容提供者;内容接收者;ContentProvider;ContentResolver