2017-08-15 4 views
0

ギャラリーから共有することを選択したビデオファイルを編集したいと思うアプリがあります。そのためには、アクティビティのマニフェストに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/...のいずれかで]お問い合わせする方法はありますそれは何を送るのですか?

答えて

0

私が行うために必要なすべてのURIがContentResolverを経て、その後、それを使用、一時ファイル(今、私は私のアプリのFilesDir内部の一時ファイルを持っている)に向けFileOutputStreamに書き込む言わからInputStreamを開くことです判明代わりにデータソースとして使用します。

関連する問題