2015-10-08 14 views
5

Android Mの他のアプリとデータを共有することは、他のアプリが手動でREAD_EXTERNAL_STORAGE権限を求めている場合にのみ可能であると思われます。共有できるすべてのアプリを手動で開き、ストレージのアクセス権を選択します。例えば他のアプリとデータを共有する際のAndroid Mのアクセス許可

私はいくつかのデータを共有するには、次の意向を持っている:

Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.setType("image/*"); 
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Some Image Subject"); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(someFile)); 
    startActivity(Intent.createChooser(shareIntent, "Share via...")); 

someFileが存在し、私はすでに、推奨されるランタイム許可モデルがhttp://developer.android.com/training/permissions/requesting.htmlで提案され、ユーザが私の許可を可能に合意している従っていると仮定実際にはファイルがシステム上に作成されていました。

私が共有しているアプリケーションに通知する方法はありますか?私はこの許可を自分のユーザーに与えましたが、私のためにこれを許可してください。

これは動作しません:

shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

ドキュメントによると:

int型FLAG_GRANT_READ_URI_PERMISSION

設定し、このインテントの受信者が上の読み取り操作を実行する権限を付与する場合インテントのデータ内のURIとそのClipDataで指定されたURI。

そして、さらに興味深いこのフラグが設定されていて、私はGmailに共有されている場合、フラグが検出されないとGoogleが許可を要求するように要求ではなく、単に例外をキャッチし、私のファイルを添付していないことはありません。

ご協力いただければ幸いです。

+0

こんにちは上

Uri uri = FileProvider.getUriForFile(context, "com.mydomain.fileprovider", file); 

詳しい情報。解決策はまだ見つかりましたか?私は同様のエラーに直面している。 Youtubeに動画を共有したいそして、YoutubeがSecurityExceptionでクラッシュする:権限拒否。 READ_EXTERNAL_STORAGE権限または許可を付与する必要があります。 – TOP

答えて

2

ファイルを共有するには、FileProviderを設定します。

このようなAndroidManifestでそれを定義します。

authoritiesは任意の名前である
<manifest> 
    ... 
    <application> 
     ... 
     <provider 
      android:name="android.support.v4.content.FileProvider" 
      android:authorities="com.mydomain.fileprovider" 
      android:exported="false" 
      android:grantUriPermissions="true"> 
      ... 
      <meta-data 
       android:name="android.support.FILE_PROVIDER_PATHS" 
       android:resource="@xml/file_provider_paths" /> 
     </provider> 
     ... 
    </application> 
</manifest> 

を。次に、共有するファイルのパスを定義するxmlファイルを作成します。たとえば、あなたが外部ストレージにあるファイルを共有したい場合は、file_provider_paths.xmlファイルは次のようになります。

<paths> 
    <external-path name="share_image" path="/MYAppFolder/Images/" /> 
</paths> 

次に、あなたがしたいファイルのコンテンツのURIを得るためにあなたのFileProviderを使用シェア:docs

+0

あなたは正しいです、私の悪いです。 – Romain

+0

なぜこの回答は下降しましたか? – Krystian

+0

誰かの気持ちがないから –

関連する問題