2013-07-19 13 views
10

FLAG_GRANT_READ_URI_PERMISSIONstartActivityに渡した場合、setDataを使用してuriを設定すると、Uriのアクセス権を付与できます。しかしUriEXTRA_STREAMに入れると、jeallybeanの前にUriが付与されません。インテントでEXTREA_STREAMのuriへの許可を付与する

grantUriPermissionの後にrevokeUriPermissionをつけて、許可を取り消すことができます。しかし、それはrevokeUriPermissionを実行するための良い場所がないようです。

もっと良い解決策はありますか?またはrevokeUriPermissionを入れるように提案してください。前もって感謝します。

関連リンク:How to grant temporary access to custom content provider using FLAG_GRANT_READ_URI_PERMISSION

+0

あなたはこの質問に答えを見つけましたか?私はEXTRA_STREAMのデータに読み取り権限を与えることを試みるのと同じ問題があります – StuStirling

+0

私が間違っている場合は私を修正してください。 Uri(私設ファイルシステムのポインティングファイル)をデバイスにインストールされている別のアプリに渡そうとしています。 UriはあなたのContentProviderを通してアクセスされます。 –

+0

Intentを作成してアクティビティを開始する場所にマニフェストとコードの部分を投稿してください。 –

答えて

2

私はそれについていくつかの読書をしました。まず、EXTRA_STREAMはFLAG_GRANT_READ_URI_PERMISSIONを使用しません。これは、フードの下で、startActivity()コピーからClipDataを呼び出すので、JellyBeanから始まり、FLAG_GRANT_READ_URI_PERMISSIONを使用します。

あなたの質問に関しては、revokeUriPermission()を呼び出す必要があります。

私が使用することをお勧め:代わりに

startActivity(intent); 

private static final int REQUEST_CODE = 1; 
startActivityForResult(intent, REQUEST_CODE); 

し、次の方法で上書き:活動終了を開始した時に上記の方法

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Check which request we're responding to 
    if (requestCode == REQUEST_CODE) { 
     // Call revokeUriPermission here 

    } 
} 

が呼び出されますが。文書を見てくださいhere

+1

私の要件は、falseに設定されたフラグをエクスポートしたコンテンツプロバイダを使用して電子メールアプリケーションに添付ファイルを提供することです。電子メールの意図によって開始される最初のアクティビティはチューザのアクティビティです。startActivityForResultはメールのアクティビティの終了を返しません。代わりにChooserActivityの仕上げを行います。だから、その瞬間にメールアプリケーションよりも権限が取り消されても、添付ファイルを読むことはできません。 – AndRSoid

+0

ChooserActivityを明示的に呼び出していますか?はいの場合は、無事に試してみてください。電子メールアプリケーションだけが表示されるようにするには、このintent.setData(Uri.parse( "mailto:"));を呼び出します。そうでなければ、あなたのプロバイダのためのが十分であるかもしれません。 ContentProvider(正規表現で動作)経由でアクセスできるファイルを指定することができます。まだよく分からない場合は別の質問をして、コードを貼り付けてお知らせください。私は何かを見つけ出すだろう。いいぞ! –

関連する問題