声明:本文是收集自网上的提问与回复
首先扫描制定 文件的类
public class MediaScannerFile {
/**
* 扫描指定的文件
*
* @param context
* @param filePath
* @param sListener
*/
public MediaScannerConnection scanFile(Context context,
String[] filePath, String[] mineType,
OnScanCompletedListener sListener) {
ClientProxy client = new ClientProxy(filePath, mineType, sListener);
try {
MediaScannerConnection connection = new MediaScannerConnection(
context.getApplicationContext(), client);
client.mConnection = connection;
connection.connect();
return connection;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
class ClientProxy implements MediaScannerConnectionClient {
final String[] mPaths;
final String[] mMimeTypes;
final OnScanCompletedListener mClient;
MediaScannerConnection mConnection;
int mNextPath;
ClientProxy(String[] paths, String[] mimeTypes,
OnScanCompletedListener client) {
mPaths = paths;
mMimeTypes = mimeTypes;
mClient = client;
}
public void onMediaScannerConnected() {
scanNextPath();
}
public void onScanCompleted(String path, Uri uri) {
if (mClient != null) {
mClient.onScanCompleted(path, uri);
}
scanNextPath();
}
/**
* 自动扫描下一个
*/
void scanNextPath() {
if (mNextPath >= mPaths.length) {
mConnection.disconnect();
return;
}
String mimeType = mMimeTypes != null ? mMimeTypes[mNextPath]
: null;
mConnection.scanFile(mPaths[mNextPath], mimeType);
mNextPath++;
}
}
}
调用
添加扫描完毕的监听:
MediaScannerFile mMediaScannerFile = new MediaScannerFile();
if (null != mMediaScannerFile) {
mMediaScannerFile
.scanFile(context,
new String[] { dinfo
.getSavePath() },
null, new OnScanCompletedListener());
}
注:直接复制粘贴以上代码后,所有代码段均可通过导包的方式来消去红线报错(alt+enter组合键),除了dinfo.getSavePath()这句。这句其实就是代表需要扫描的文件夹所在路径。
参考以下方式修改这句代码:
将scan_Music函数修改后:
private void scan_Music(String filepath){
MediaScannerFile mMediaScannerFile = new MediaScannerFile();
if (null != mMediaScannerFile) {
mMediaScannerFile.scanFile(this, new String[] { filepath },
null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String s, Uri uri) {
}
});
}
}
调用代码:
String filepath = "/sdcard";
scan_Music(filepath);//扫描指定文件夹下的所有音乐,为的就是刷新新加进来的音乐文件