Android开发04_ContentProvider内容提供者

来源:互联网 发布:淘宝怎么寄售游戏币 编辑:程序博客网 时间:2024/06/06 09:22


一、概述


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

//歌曲IDint 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));//专辑IDint 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));


获取专辑封面:工具类


1 0