1

我正在查询 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

4

0 回答 0