2017-02-15 6 views
0

ファイルブラウザでオーディオファイルを選択/共有した後、オーディオファイルを再生しようとしました。これを行うには、私はオーディオファイルのUriを取得するために、フィルタインテントを使用します。ウリに基づいて私はそれをプレイすることができます。 UriはMediaPlayerがFileDescriptorを開くために使用します。デフォルトの「ダウンロード」アプリから共有されるファイルに一時的なアクセス許可はありますか?

私はUriを保存するので、アプリを再起動してから使用できます。これは、アンドロイドのデフォルトのダウンロードアプリを除くすべてのファイルブラウザで動作します。ダウンロードアプリからファイルを開くと、私はウリを次のように受け取ります。

私はそれを再生できます。しかし、アプリケーションが再起動した後、私はもはや同じuriを再生することはできません。この権限についてdocsから

java.lang.SecurityException: Permission Denial: 
opening provider com.android.providers.downloads.DownloadStorageProvider from 
ProcessRecord{160760b 3618:com.sample/u0a71} (pid=3618, uid=10071) 
requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS 

:私は例外を取得

この権限は唯一のプラットフォームの文書 管理アプリによって要求されなければなりません。この権限はサードパーティ製のアプリケーションには付与できません。

これは、アプリケーションが一時的なファイルアクセス権を持っているということですか?これには何か解決策はありますか?

答えて

0

送信者アプリがこれらのフラグFLAG_GRANT_WRITE_URI_PERMISSIONFLAG_GRANT_READ_URI_PERMISSIONを使用して一時的なアクセス許可のみを設定していることがわかりました。許可は、インテントを処理したアクティビティがアクティブである限り有効です。 少なくともこれを検出するには

if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION) == Intent.FLAG_GRANT_READ_URI_PERMISSION || (flags & Intent.FLAG_GRANT_WRTITE_URI_PERMISSION) == Intent.FLAG_GRANT_WRITE_URI_PERMISSION) { 
//only temporary permission 
} 
関連する問題