1: private void openDatabase(String volumeName) {
2: try {
3: ContentValues values = new ContentValues();
4: values.put("name", volumeName);
5: getContentResolver().insert(Uri.parse("content://media/"), values);
6: } catch (IllegalArgumentException ex) {
7: Log.w(TAG, "failed to open media database");
8: }
9: }
10:
11: private void closeDatabase(String volumeName) {
12: try {
13: getContentResolver().delete(
14: Uri.parse("content://media/" + volumeName), null, null);
15: } catch (Exception e) {
16: Log.w(TAG, "failed to close media database " + volumeName + " exception: " + e);
17: }
18: }
19: //创建扫描器
20: private MediaScanner createMediaScanner() {
21: MediaScanner scanner = new MediaScanner(this);
22: Locale locale = getResources().getConfiguration().locale;
23: if (locale != null) {
24: String language = locale.getLanguage();
25: String country = locale.getCountry();
26: String localeString = null;
27: if (language != null) {
28: if (country != null) {
29: scanner.setLocale(language + "_" + country);
30: } else {
31: scanner.setLocale(language);
32: }
33: }
34: }
35:
36: return scanner;
37: }
38: //扫描目录
39: private void scan(String[] directories, String volumeName) {
40: // don't sleep while scanning
41: mWakeLock.acquire();
42:
43: ContentValues values = new ContentValues();
44: values.put(MediaStore.MEDIA_SCANNER_VOLUME, volumeName);
45: Uri scanUri = getContentResolver().insert(MediaStore.getMediaScannerUri(), values);
46:
47: Uri uri = Uri.parse("file://" + directories[0]);
48: sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_STARTED, uri));
49:
50: try {
51: if (volumeName.equals(MediaProvider.EXTERNAL_VOLUME)) {
52: openDatabase(volumeName);
53: }
54:
55: MediaScanner scanner = createMediaScanner();
56: scanner.scanDirectories(directories, volumeName);
57: } catch (Exception e) {
58: Log.e(TAG, "exception in MediaScanner.scan()", e);
59: }
60:
61: getContentResolver().delete(scanUri, null, null);
62:
63: sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_FINISHED, uri));
64: mWakeLock.release();
65: }
66: //扫描文件
67: private Uri scanFile(String path, String mimeType) {
68: String volumeName = MediaProvider.INTERNAL_VOLUME;
69: String externalStoragePath = Environment.getExternalStorageDirectory().getPath();
70:
71: if (path.startsWith(externalStoragePath)) {
72: volumeName = MediaProvider.EXTERNAL_VOLUME;
73: openDatabase(volumeName);
74: }
75: MediaScanner scanner = createMediaScanner();
76: //扫描单个文件
77: return scanner.scanSingleFile(path, volumeName, mimeType);
78: }
相关推荐
关于Android媒体存储和手机数据库扫描流程以及优化的部分代码贴图
自己总结学习MediaProvider的一些重要函数,为了以后学习方便
主要介绍了Android4.4下MediaProvider无法向外置SD卡中文件写数据的解决方法,实例分析了Android4.4下针对读写限制的修改技巧,具有一定参考借鉴价值,需要的朋友可以参考下
media provider源码,原生系统代码,通过ContentProvider实现了数据管理功能。
apk文件 MediaProvider(电视直播视频)apk文件 MediaProvider(电视直播视频)apk文件 MediaProvider(电视直播视频)apk文件 MediaProvider(电视直播视频)apk文件 MediaProvider(电视直播视频)apk文件 ...
Mediaprovider的简单说明。 MediaProvider包括五个类: com.android.providers.media.MediaProvider com.android.providers.media.MediaScannerCursor com.android.providers.media.MediaScannerReceiver ...
Android 获取音乐文件的信息 Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Content Provider的方式提供给用户。
第1章 搭建Android源码工作环境 1.1 Android系统架构 1.2 搭建开发环境 1.2.1 下载源码 1.2.2 编译源码 1.2.3 利用Eclipse调试system_process 1.3 本章小结 第2章 深入理解Java Binder和MessageQueue 2.1 ...
由于现在大多数手机都是带有内存的,原本获取外置SD卡路径的方法Environment.getExternalStorageDirectory() 获取得到的是手机自身内存的根目录。那么我们要怎么来获取到外置SD卡的路径,首先需要A判断是否挂载了sdk...
深入理解android 卷II 第7章 ContentProvider深入理解
Android源码的Music应用相关代码不算多,packages/apps/Music是关于UI界面的,\packages\providers\MediaProvider关于数据库的,数据库文件放在data/data/com.android.providers.media, 这里面有两个或更多个.db文件...
Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Content Provider的方式提供给用户。当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的...
简介:本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner、MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文件更新到媒体数据库、如何在多媒体应用中隐藏 APP...
这篇文章从系统源代码分析,讲述如何将程序创建的多媒体文件加入系统的媒体库,如何从媒体库删除,以及大多数程序开发者经常遇到的无法添加到媒体库的问题等。本人将通过对源代码的分析,一一解释这些问题。 Android...
快速定位、分析和解决Android系统SELinux相关的权限问题。
从Android 2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework的android.media.ThumbnailUtils位 置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接...
下面我们来看一下媒体库的内容提供者的URI(源码地址) 媒体库Uri 图片MediaStore.Images.Media.EXTERNAL_CONTENT_URI 音频MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 视频MediaStore.Video.Media.EXTERNAL_CONTENT...
1、问题解决主要文件:/m8976/packages/providers/MediaProvider/src/com/android/providers/media/MtpService.java 需要在MtpService.java中updateDisabledStateLocked 方法添加锁屏情况限制: final ...