0

FileProviderを使用してアプリケーションで作成したmp3ファイルを共有しようとしています。私はdocumentationthis stackoverflow postに従っていますが、動作していません。たとえば、gmailに「空のファイルを添付できません」と表示されます。FileProviderを使用して、自分のアクティビティから別のアプリケーションにファイルを共有する

mp3ファイルはEnvironment.getExternalStorageDirectory()+"/MyApp"に保存されます。

私はマニフェストにプロバイダを追加しました:

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="share" path="MyApp/" /> 
</paths> 

をそして、私の活動に、このメソッドを追加しました::

<provider 
    android:name="android.support.v4.content.FileProvider" 
    android:authorities="com.myapp.fileprovider" 
    android:exported="false" 
    android:grantUriPermissions="true"> 
    <meta-data 
     android:name="android.support.FILE_PROVIDER_PATHS" 
     android:resource="@xml/file_provider_paths" /> 
</provider> 

は解像度にfile_provider_paths.xmlを追加しました

public void ShowShareChooser(String filename) 
{ 
    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    File f = new File(filename); 
    Uri fileUri = FileProvider.getUriForFile(this,"com.myapp.fileprovider",f); 
    String type = getContentResolver().getType(fileUri); 
    shareIntent.putExtra(Intent.EXTRA_STREAM,fileUri); 
    shareIntent.setType(type); 
    //shareIntent.setDataAndType(fileUri,type); // another failed attempt 
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    shareIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
    startActivity(Intent.createChooser(shareIntent, "Share song")); 
} 

filenameがあります"/storage/emulated/0/MyApp/Audio.mp3"であり、得られたfileUricontent://com.myapp.fileprovider/share/Audio.mp3typeaudio/mpegです。

私はapi 22をターゲットにしており、これをNexus 5(6.0.1)でテストしています。

+0

テストでは、ファイルuriの入力ストリームを開こうとします。 – greenapps

+0

アプリに外部ストレージからの読み取り権限がないのですか? – cketti

+0

ありがとう、私はちょうどばかだった。初期の研究では、FileProviderを使わないでファイルを共有することはもはやうまくいきませんので、私はこのコードのバグを頑なに探しました。コードの別の場所に新しいバグがあることが判明しました... – athos

答えて

0

よく分かったように、私のところでは愚かな間違いでした。ファイル内に新しいバグがあるため、ファイルはもう作成されませんでした。コードは実際にうまく機能します、私は将来の参照(および個人的な記念品として)のためにここに残します。

関連する問題