SQLiteDatabase之ContentProvider应用——音频播放器_如何查询专辑信息_艺术家信息_歌曲信息?
2012-09-07 00:03
405 查看
如何获取设备上的歌曲的专辑信息?
1.系统在SD卡挂载的时候,就扫描音频和视频文件,并把信息保存到数据库中,通过ContentProvider,对外提供数据;
2.应用程序Context,可以获取ContentResolver:ContentResolver resolver = context.getContentResolver();
3.ContentResolver,以系统为纽带,以uri为语言,让ContentResolver与ContentProvider会话;
理解:ContentResolver执行query方法,是与系统会话,系统拿着uri和数据包,去找对应的ContentProvider,ContentProvider执行任务返回结果给系统,系统返回给ContentResolver;这个好比进程间通信,通过隐式意图启动其他程序的组件;
Cursor getAlbumFromAlbumId(long albumId){
ContentResolver resolver = ctx.getContentResolver();
Cursor c = null;
//如果用户设置选择的是外存储设备,就查询外部存储设备的表;
if(DirectoryFilter.usesExternalStorage()) {
//query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
//专辑信息表,各列的名称;
String[] albumProjection =
{
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Albums.ALBUM_KEY,
// MediaStore.Audio.Albums.ALBUM_ID,
MediaStore.Audio.Albums.ALBUM,
MediaStore.Audio.Albums.ARTIST,
MediaStore.Audio.Albums.ALBUM_ART,
MediaStore.Audio.Albums.LAST_YEAR
};
c = resolver.query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,//外部存储设备的音频专辑所在表的uri
Constants.albumProjection, //专辑映射,String[],要选择哪些列?
MediaStore.Audio.Albums._ID + " = "+albumId, //选择调节
null, //占位符对应的值;
//Constants.albumAlphabeticalSortOrder);
albumProjection;
} else {
c = resolver.query(
MediaStore.Audio.Albums.INTERNAL_CONTENT_URI,
Constants.albumProjection,
MediaStore.Audio.Albums._ID + " = "+albumId,
null,
Constants.albumAlphabeticalSortOrder);
}
return c;
// return resolver.query(
// MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
// Constants.albumProjection,
// MediaStore.Audio.Albums._ID + " = "+albumId,
// null,
// Constants.albumAlphabeticalSortOrder);
}
思考:我们可以通过ContentResovler去获取ContentProvider提供的数据;那么我们如何创建ContentProvider,让别人的ContentResovler调用呢?
1.系统在SD卡挂载的时候,就扫描音频和视频文件,并把信息保存到数据库中,通过ContentProvider,对外提供数据;
2.应用程序Context,可以获取ContentResolver:ContentResolver resolver = context.getContentResolver();
3.ContentResolver,以系统为纽带,以uri为语言,让ContentResolver与ContentProvider会话;
理解:ContentResolver执行query方法,是与系统会话,系统拿着uri和数据包,去找对应的ContentProvider,ContentProvider执行任务返回结果给系统,系统返回给ContentResolver;这个好比进程间通信,通过隐式意图启动其他程序的组件;
Cursor getAlbumFromAlbumId(long albumId){
ContentResolver resolver = ctx.getContentResolver();
Cursor c = null;
//如果用户设置选择的是外存储设备,就查询外部存储设备的表;
if(DirectoryFilter.usesExternalStorage()) {
//query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
//专辑信息表,各列的名称;
String[] albumProjection =
{
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Albums.ALBUM_KEY,
// MediaStore.Audio.Albums.ALBUM_ID,
MediaStore.Audio.Albums.ALBUM,
MediaStore.Audio.Albums.ARTIST,
MediaStore.Audio.Albums.ALBUM_ART,
MediaStore.Audio.Albums.LAST_YEAR
};
c = resolver.query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,//外部存储设备的音频专辑所在表的uri
Constants.albumProjection, //专辑映射,String[],要选择哪些列?
MediaStore.Audio.Albums._ID + " = "+albumId, //选择调节
null, //占位符对应的值;
//Constants.albumAlphabeticalSortOrder);
albumProjection;
} else {
c = resolver.query(
MediaStore.Audio.Albums.INTERNAL_CONTENT_URI,
Constants.albumProjection,
MediaStore.Audio.Albums._ID + " = "+albumId,
null,
Constants.albumAlphabeticalSortOrder);
}
return c;
// return resolver.query(
// MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
// Constants.albumProjection,
// MediaStore.Audio.Albums._ID + " = "+albumId,
// null,
// Constants.albumAlphabeticalSortOrder);
}
思考:我们可以通过ContentResovler去获取ContentProvider提供的数据;那么我们如何创建ContentProvider,让别人的ContentResovler调用呢?
相关文章推荐
- Java获取音乐文件艺术家,歌曲名,所属专辑等信息
- Sqlite创建database的两种方法,以及源码分析,以及抽象类如何在SqliteHelper中应用
- Mp3播放器获取艺术家专辑头像、歌手、歌曲信息的方法
- 如何查询redhat的版本信息
- ContentProvider,SQLiteOpenHelper,SQLiteDatabase三者之间的区别和联系
- Use MusicBrainz in iOS(三)查询专辑的完整信息
- 关于如何获取应用中的异常信息
- 如何使你的Android应用记住曾经使用过的账户信息
- Android 如何监控各个应用的流量和其它乱七八糟的信息
- WMI技术介绍和应用——查询正在运行的进程信息
- Android共享文件的几种方式(我这里只总结到了SQLiteDatabase、SharedPreferences、ContentProvider)
- Android如何查看应用签名信息
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- Android如何查看应用签名信息
- 如何使你的Android应用记住曾经使用过的账户信息
- 如何查询Oracle中所有用户信息
- android Sqlitedatabase 应用
- [IT最前沿--有点强大] 都市圈实时公交:一款实时查询公交到站信息的应用
- 学习笔记6-Android查看应用输出的错误信息 如何部署应用到真实手机 发布软件