FileProviderを使用して、電子ファイル(または同様のアプリケーション)を介してファイルを送信するための内部ファイルストレージをアプリから読み込む予定があります。このコードはGmailを除いてどこでもうまく機能します.Gmailは不思議なことに、電子メールのアドレスのリストにプロバイダパス自体のバージョンを追加します。FileProvider添付ファイルを使用してインテントで電子メールに追加された迷子ファイルパス
public static Intent getSendIntent(Uri uri) {
final Intent i = new Intent(Intent.ACTION_SEND);
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.setDataAndType(uri, "message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
i.putExtra(Intent.EXTRA_SUBJECT, "Export");
i.putExtra(Intent.EXTRA_TEXT, "See the attached...");
i.putExtra(Intent.EXTRA_STREAM, uri);
return i;
}
これは、活動を開始するためのコードは次のとおりです:
これは意図を生成するコードであるウェルに加えてなどスラック、Evernoteの、でなく、Gmailの
File file = new File(getFilesDir(), filename);
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.myapplication.provider", file);
Intent i = Utils.getSendIntent(uri);
try {
startActivity(Intent.createChooser(i, "Send file..."));
} catch (Exception e) {
Log.d(TAG, "failed to start send activity: " + e.getMessage());
Toast.makeText(MainActivity.this, "No suitable activity found for export.", Toast.LENGTH_SHORT).show();
}
作品私が提供した電子メールアドレス、この種類の別の宛先が追加されます:
//com.example.myapplication.provider/my_files/filefile.csv
は、電子メールがメッセージから手動で削除されるまで送信されないようにします。メッセージに関する他のすべては、期待通りです。
これを防ぐ手がかりはありますか?
'file'は実際に' message/rfc822'形式のファイルを指していますか? – CommonsWare
@CommonsWareいいえ、実際にあなたの質問は私の問題の原因に私を導いた。私はちょうどsetDataAndTypeを標準のsetTypeに置き換えました。 *頭を叩く – k3davis