Android开发04_ContentProvider内容提供者


一、概述


ContentProvider译为内容提供者,是Android四大组件之一,其余三大组件分别为:Activity(活动)、Broadcast Receiver(广播接收器)和Service(服务)。

ContentProvider主要用做个程序之间的访问,通过Uri(唯一资源标识符)来存储或者提供资源以供其他程序使用。


二、自定义ContentProvider


1、自定义MyContentProvider继承ContentProvider

2、重写6个方法,其中关于getType理解是:根据给定的Uri返回一个MIME类型的数据,如果是单条数据,那么我们的MIME类型应该以vnd.android.cursor.item开头,如果是多条数据,我们的MIME类型的数据应该以vnd.android.cursor.dir开头。

3、在manifests中注册



三、使用别人定义好的ContentProvider


1、查询和添加手机联系人

<!-- 读取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

Uri uri = ContactsContract.Contacts.CONTENT_URI;//获取联系人Uri


//获取电话号码
Cursor phonesCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " =?", new String[]{id}, null);


2、添加联系人


Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//添加联系人Uri


long contactId = ContentUris.parseId(resolver.insert(uri, values));
/*  data 中添加数据(要根据前面获取的id号) */
// 添加姓名
uri = Uri.parse("content://com.android.contacts/data");
values.put("raw_contact_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("data2", "小月");
resolver.insert(uri, values);
// 添加电话
values.clear();
values.put("raw_contact_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
values.put("data2", "2");
values.put("data1", "10086");
resolver.insert(uri, values);



3、获取音频(自定义BaseAdapter泛型适配器)


<!--获取音频资源-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


//查询音乐
Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

//歌曲ID
int musicId = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
//歌曲名字
String musicName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
//歌手
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
//专辑ID
int albumId = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
//歌曲标题
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
//专辑
String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
//大小
long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
//时间
long time = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
//地址
String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));


获取专辑封面:工具类


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值