预定义ContentProvider

本文介绍了Android系统中预定义的ContentProvider,如联系人、媒体存储等,详细讲解了URI结构、query()方法的使用以及部分ContentProvider所需的权限。还提供了一个获取所有外部APK文件的示例。
摘要由CSDN通过智能技术生成

目录

1. Android提供的常见ContentProvider

2. URI组成

3. 查询预定义ContentProvider

(1) 联系人的URI及列名

<1>

<2>

<3> 

(2) 全部APK文件

4. 权限


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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下嗷呜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值