我有一个应用程序,我想在其中查看我选择从图库中共享的视频文件以进行编辑。为此,我知道我必须在活动清单中使用intent-filter
标签。
所以我在这里,从图库应用程序中选择一个视频以"共享"到此应用程序中。当活动打开时,我使用Uri videoUri = getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
来检索视频的 URI。URI 如下所示:
content://com.google.android.apps.photos.contentprovider/-1/2/file%3A%2F%2F%2Fdata%2Fdata%2Fcom.google.android.apps.photos%2Fcache%2Fshare-cache%2Fmedia.tmp%3Ffilename%3Dimage.jpg/ORIGINAL/NONE/1804018524
我可以在 MediaPlayer 中很好地播放它,但是当我必须使用需要文件 [即 MP4Parser] 的库时,问题就来了,这意味着文件路径 - 这个 URI 不起作用。
我已经解析了file%3A%2F%2F%2Fdata%2Fdata%2Fcom.google.android.apps.photos%2Fcache%2Fshare-cache%2Fmedia.tmp%3Ffilename%3Dimage.jpg
部分,它给了我:
file:///data/data/com.google.android.apps.photos/cache/share-cache/media.tmp?filename=image.jpg
这样做的问题是打开它会导致 ENOENT。new File("/data/data/com.google.android.apps.photos/cache/share-cache/media.tmp").exists()
返回假。
我还通过getContentResolver().query(uri, null, null, null, null)
在光标中查询了 URI 本身,并在其中记录了所有值。我得到的只是:
_id:0 _display_name:image.jpg _size:2183131 mime_type:video/mpeg _data:null orientation:0 datetaken:0 latitude:null longitude:null special_type_id:null
我的问题:有没有办法查询图库应用程序共享的视频的实际路径[以file://
形式或content://media/external/videos/...
],如果该URI是它发送的内容?
事实证明,我需要做的就是通过ContentResolver
从所述URI打开一个InputStream
,将其写入指向临时文件的FileOutputStream
(现在我在应用程序的FilesDir
中有临时文件(,然后将其用作数据源。