- MediaScanner
MediaScanner主要用于自动扫描Android系统中的音视频等媒体资源;本文主要讲述相关源代码以及如何触发媒体扫描。
相关代码:MediaScannerReceiver.java 和 MediaScanner,建议直接阅读源代码,如在线代码阅读网站[1]。
/
packages
/
providers
/
MediaProvider
/
src
/
com
/
android
/
providers
/
media
/
MediaScannerService.java
/
packages
/
providers
/
MediaProvider
/
src
/
com
/
android
/
providers
/
media
/
MediaScannerReceiver.java
说明:1. 在系统启动的时候,会进行媒体扫描:内部
和外部;
内部地址:(Environment.getRootDirectory() + "/media") 外部地址: 123 StorageManager storageManager = (StorageManager)getSystemService(Context.STORAGE_SERVICE); 124 mExternalStoragePaths = storageManager.getVolumePaths(); |
其中1,2自动完成: 完成前后会向APP发送
Intent
.
ACTION_MEDIA_SCANNER_STARTED 和
Intent
.
ACTION_MEDIA_SCANNER_FINISHED;3完成之后,貌似不会发送以上广播给用户。
- 如何运行Media scanner ?
方法1: 采用broadcast 事件;
|
方法2: 采用MediaScannerConnection
适合查询单个文件,先建立连接、注册监听器、然后调用scanFile接口即可,代码如下。
public
class
SingleMediaScan
implements
MediaScannerConnectionClient{
private
static
final
String
TAG
=
"SingleMediaScan"
;
private
static
SingleMediaScan
mInstance
;
private
MediaScannerConnection
mScan
;
private
String
mPath
;
private
int
mCount
= 0;
private
SingleMediaScan(Context context) {
mScan
=
new
MediaScannerConnection(context,
this
);
}
public
static
SingleMediaScan getInstance() {
if
(
mInstance
==
null
) {
mInstance
=
new
SingleMediaScan(MyApplication.getContext());
}
return
mInstance
;
}
public
void
startScan(String path) {
mPath
= path;
mCount
++;
mScan
.connect();
}
/**
* Part of the MediaScannerConnectionClient interface. Do not call.
*/
@Override
public
void
onMediaScannerConnected() {
//
TODO
Auto-generated method stub
Log. d(
TAG
,
"scan connected! path: "
+
mPath
);
//mScan.scanFile(mPath, "audio/mpeg3");
mScan
.scanFile(
mPath
,
null
);
}
/**
* Part of the MediaScannerConnectionClient interface. Do not call.
*/
@Override
public
void
onScanCompleted(String path, Uri uri) {
//
TODO
Auto-generated method stub
if
(--
mCount
== 0) {
mScan
.disconnect();
}
Log. d(
TAG
,
"scan Completed"
+ path +
" || "
+ uri);
if
(uri ==
null
) {
Log. e(
TAG
,
"scan failed!"
);
return
;
}
}
}
==========
只需要运行
SingleMediaScan.getInstance().startScan("/mnt/sdcard/xxx.mp3")
|
参考文献