ファイルを内部ストレージに保存しています。これは、オブジェクトに関するいくつかの情報を持つだけで.txtファイルです:コンテンツプロバイダの内部ストレージからのAndroid Intent.ACTION_SEND
FileOutputStream outputStream;
String filename = "file.txt";
File cacheDir = context.getCacheDir();
File outFile = new File(cacheDir, filename);
outputStream = new FileOutputStream(outFile.getAbsolutePath());
outputStream.write(myString.getBytes());
outputStream.flush();
outputStream.close();
は、その後、私は、このファイルを共有する「shareIntent」を作成しています:
Uri notificationUri = Uri.parse("content://com.package.example/file.txt");
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, notificationUri);
shareIntent.setType("text/plain");
context.startActivity(Intent.createChooser(shareIntent, context.getResources().getText(R.string.chooser)));
選ばれたアプリは現在、民間のファイルにアクセスする必要があります私はコンテンツプロバイダを作成しました。
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
File privateFile = new File(getContext().getCacheDir(), uri.getPath());
return ParcelFileDescriptor.open(privateFile, ParcelFileDescriptor.MODE_READ_ONLY);
}
マニフェスト:私はちょうどのOpenFileメソッドを変更し
<provider
android:name=".ShareContentProvider"
android:authorities="com.package.example"
android:grantUriPermissions="true"
android:exported="true">
</provider>
それが唯一の0バイトを持っているので、それはファイルを添付できないこと、それが言うファイルを共有するためにメールアプリケーションを開きます。 Bluetooth経由で共有することもできませんでした。しかし、私はコンテンツプロバイダーのprivateFile
を読むことができるので、それは存在し、内容を持っています。何が問題ですか?
はあなたのカスタムContentProviderで 'query()'メソッドが呼び出されていますか? – pskink
はい、openFileの前に3回呼び出されます。最初の引数は常に:content://com.package.example/file.txt – L3n95
で、投影/列は_display_nameと_sizeですか? BTWなぜ 'android.support.v4.content.FileProvider'を使用しないのですか? – pskink