您的位置:首页 > 移动开发 > Android开发

Android开发04_ContentProvider内容提供者

2016-12-19 17:07 555 查看

一、概述

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));


获取专辑封面:工具类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息