Android开发04_ContentProvider内容提供者
2016-12-19 17:07
555 查看
一、概述
ContentProvider译为内容提供者,是Android四大组件之一,其余三大组件分别为:Activity(活动)、Broadcast Receiver(广播接收器)和Service(服务)。
ContentProvider主要用做个程序之间的访问,通过Uri(唯一资源标识符)来存储或者提供资源以供其他程序使用。二、自定义ContentProvider
1、自定义MyContentProvider继承ContentProvider2、重写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));
获取专辑封面:工具类
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件