Content Provider 相当于数据的接口,通过它可以 把程序内部的数据向其他应用公开,这样的话,
其他应用程序就可以通过Context.getContentResolver方法获得ContentResolver对象,
并使用ContentResolver.insert,ContentResolver.delete,ContentResolver.update,ContentResolver.query4个方法对程序内部的数据进行增删改查。
这里只用一个简单实例表明如何用content provider 的query获取所有音乐的title
先写一个类 MusicLoader
package com.life.testmusic; import android.annotation.SuppressLint; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore.Audio.Media; import android.util.Log; import java.util.ArrayList; import java.util.List; public class MusicLoader { private static final String TAG = "com.example.nature.MusicLoader"; private static List<MusicInfo> musicList = new ArrayList<MusicInfo>(); private static MusicLoader musicLoader; private static ContentResolver contentResolver; //单例模式 public static MusicLoader instance(ContentResolver pContentResolver) { if (musicLoader == null) { //pContentResolver由activity的getContentResolver()方法传过来, contentResolver = pContentResolver; musicLoader = new MusicLoader(); } return musicLoader; } @SuppressLint("LongLogTag") private MusicLoader() { //query()返回Cursor 对象,类似与数据库的Cursor ,通过它来查询数据 //第一个参数是一个Uri,对应了获取哪种信息,这里是获取音乐媒体信息,其余暂时都设置为null Cursor cursor = contentResolver.query(Media.EXTERNAL_CONTENT_URI, null, null, null, null); if (cursor == null) { Log.i(TAG, "Music Loader cursor == null."); //光标移动到第一行 } else if (!cursor.moveToFirst()) { Log.v(TAG, "Music Loader cursor.moveToFirst() returns false."); } else { //获取到title列的索引displayNameCol int displayNameCol = cursor.getColumnIndex(Media.TITLE); do { //传入displayNameCol 拿出title String title = cursor.getString(displayNameCol); MusicInfo musicInfo = new MusicInfo(); musicInfo.setTitle(title ); //加入list musicList.add(musicInfo ); //移动到下一行继续获取下一首歌的信息 } while (cursor.moveToNext()); //关闭cursor. cursor.close(); } } public List<MusicInfo> getMusicList() { return musicList; } //内部类,用于存储歌曲信息 public static class MusicInfo { private long id; private String title; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } }
这个类写好之后,就要在activity里面来使用它呈现数据了。
//获取单例,通过单例来getMusicList();, //其中参数是getContentResolver()获取到的ContentResolver对象 musicList=MusicLoader.instance(getContentResolver()).getMusicList(); String name=""; for (int i=0;i<musicList.size();i++) name+=musicList.get(i).getTitle()+"\n"; //textview, tvSongs用于呈现歌曲title tvSongs.setText(name);
这样就结束了,很简单吧,现在让我们看一看运行效果。
相关推荐
理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。
content provider实现数据共享demo(内有两个项目)
Content Provider获取联系人和图片,博客链接:http://write.blog.csdn.net/postedit/43950781
android content provider两个程序共享数据实例demo。简单的两个应用app之间共享数据。 getContentResolver().insert() getContentResolver().query() getContentResolver().delete() getContentResolver().update()
博文《android基础知识05:四大组件之content provider》的示例程序,实现了content provider 的基本功能。
content_provider_demo, provide data to other app, use cursorLoader to update view
这是使用fused location provider获取经纬度的源码。虽然结合了GooglePlayService但是不需要翻就能获取到地址。 注意运行时手机必须支持google play store 虚拟机必须是Google Api System Image才可以。
Android Content Provider用法样例,解析如何使用“内容提供商”Content Provider共享不同应用的数据,本Android例子将使用Content Provider实现了获取联系人信息,里面的注释非常丰富,是学习android的好资料。
四大组件 Activity Service content provider broadcast receiver
NULL 博文链接:https://zhangjiangxing-gmail-com.iteye.com/blog/1743648
这是使用Content Provider案例源码,详细讲解请移步http://blog.csdn.net/wei_zhi/article/details/52960073
Android应用程序组件Content Provider的共享数据更新通知机制分析
Android Content Provider Demo
NULL 博文链接:https://kevinlynx.iteye.com/blog/857721
Android中使用Content Provider组件访问通讯录中的联系人和添加联系人案例详解!
1、什么是内容提供者 2、怎样创建内容提供者 3、通过内容提供者完成CRUD操作 4、访问内容提供者 5、监听内容提供者数据变化 6、两个案例:监听短信以及操作联系人 最最重要的是包含了源码
Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个应用程序之间实现数据共享。 它是应用程序间共享数据的唯一方法。 在Android中没有一块公共的所有应用程序都能访问的数据存储地方。 ...
android content provider学习过程中的笔记,希望对大家有帮助。
Android 获取音乐文件的信息 Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Content Provider的方式提供给用户。
content provider和sqlite的详细介绍以及用法。。很好的资源,我自己整理的,相当有用,大家可以看看哈。。