内部ストレージにファイルを保存しています。これは、オブジェクトに関するいくつかの情報を含む単なる .txt ファイルです。
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)));
選択したアプリはプライベート ファイルにアクセスする必要があるため、コンテンツ プロバイダーを作成しました。openFile メソッドを変更しました:
@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);
}
マニフェスト:
<provider
android:name=".ShareContentProvider"
android:authorities="com.package.example"
android:grantUriPermissions="true"
android:exported="true">
</provider>
ファイルを共有するためにメール アプリを開くと、0 バイトしかないため、ファイルを添付できませんでした。Bluetooth 経由での共有も失敗しました。しかし、コンテンツ プロバイダーで を読み取ることができるprivateFile
ので、存在し、コンテンツがあります。何が問題ですか?