我已经编写了一个Android应用程序,它是一个更简单的相机版本。它只记录视频。
尽管这是一款自定义应用,但我希望通过照片和图库应用可以轻松看到由此录制的视频。
我的印象是,这就是" MediaScannerConnection"上课是为了。我找到了一些常见的建议,说明如何在" sendBroadcast"模式,或更多手动" scanFile"做法。我已经实施了这两个选项,发现它们似乎没有效果。当我停止录制器时,会存储一个有效的视频(之后我可以从文件浏览器播放),但照片或图库都不会识别新视频。
我一直将视频存储在" /storage/emulated/0/DCIM/Camera/20151223_150115.mp4"等文件中。该目录还包含相机应用程序拍摄的视频。基本路径是从" Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)"获得的。我最初尝试更换"相机"目录名称基于我的应用程序名称,但因为它没有工作(照片/图库没有看到它,尽管它存储得当),我决定尝试将它们存储在存储股票视频的地方。那也不行。
我的测试设备是Galaxy Note 3,运行Android 5.0。
我第一次尝试使用MediaScannerConnection是这样的:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + outputFilePath)));
" outputFilePath"的一个值正是上面显示的路径。
由于这似乎没有做任何事情,我后来尝试了这个:
new SingleMediaScanner(getApplicationContext(), new File(outputFilePath));
其中" SingleMediaScanner"是这样的:
public static class SingleMediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {
private MediaScannerConnection mMs;
private File mFile;
public SingleMediaScanner(Context context, File f) {
mFile = f;
mMs = new MediaScannerConnection(context, this);
mMs.connect();
}
@Override
public void onMediaScannerConnected() {
mMs.scanFile(mFile.getAbsolutePath(), "image/*");
}
@Override
public void onScanCompleted(String path, Uri uri) {
mMs.disconnect();
}
}
我尝试在调试器中运行最后一个实现,我看到它已经到了" onScanCompleted",但上述应用都没有看到新视频。
更新:
通过当前的实施," onScanCompleted"使用" path"来调用回调方法和" uri"参数,具有以下值:
path: /storage/emulated/0/DCIM/Camera/20151223_194434.mp4
uri.toString(): content://media/external/file/106639
Uri.fromFile(new File(Path)): file:///storage/emulated/0/DCIM/Camera/20151223_194434.mp4