我正在查询 MediaStore 以获取基于持续时间(MAX 15 秒)的视频。
我面临的问题是当我使用图库录制视频时。然后,如果我转到我的应用程序,此视频不会显示在此光标中。但是,如果我去画廊打开视频,下次查询时会返回。
这是我的查询:
private Cursor getVideos() {
_.log("getVideos");
String[] proj = { MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DATE_TAKEN,
MediaStore.Video.Media.DURATION };
return managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj,
MediaStore.Video.Media.DURATION + "<=?" + " AND "
+ MediaStore.Video.Media.DURATION + ">=?" + " AND "
+ MediaStore.Video.Media.SIZE + ">=?", new String[] {
"15000", "1000", "1000" }, null);
}
可能的解决方案是在查询之前强制刷新。我使用以下使用 MediaScannerConnection 的代码进行了尝试:
_.log("new MediaScannerConnection");
msc = new MediaScannerConnection(mContext, new MediaScannerConnectionClient() {
public void onScanCompleted(String path, Uri uri) {
_.log("onScanCompleted:"+path);
msc.disconnect();
synchronized (lock) {
lock.notifyAll();
}
}
public void onMediaScannerConnected() {
_.log("onMediaScannerConnected:" + MediaStore.Video.Media.EXTERNAL_CONTENT_URI.toString());
msc.scanFile(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.getPath(),
null);
}
});
_.log("connect");
msc.connect();
synchronized (lock) {
try {
_.log("waiting");
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
_.log("done waiting");
}
然而这并没有解决问题。在某些手机上,我多次调用 onMediaScannerConnected 并且从未调用 onScanCompleted