ギャラリーから共有することを選択したビデオファイルを編集したいと思うアプリがあります。そのためには、アクティビティのマニフェストにintent-filter
タグを使用する必要があることがわかります。ContentProvider URI経由でギャラリーからアプリケーションに送信されるビデオの実際のパスを取得するにはどうすればよいですか?
ここでは、ギャラリーアプリからこのアプリに「共有」する動画を選択しました。アクティビティが開くと、私は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()
はfalseを返します。
また、カーソル内のURI自体をgetContentResolver().query(uri, null, null, null, null)
経由でクエリし、すべての値を内部に記録しました。私が得たすべてはだった:
_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
私の質問:そのURI場合ギャラリーアプリで共有ビデオの実際のパスを[file://
形態またはcontent://media/external/videos/...
のいずれかで]お問い合わせする方法はありますそれは何を送るのですか?