1

FileProvider を使用して、アプリの内部ファイル ストレージから読み取り、電子メール (または同様のアプリ) でファイルを送信するという意図があります。このコードは、奇妙なことにプロバイダー パス自体のバージョンを電子メールの宛先リストに追加する Gmail を除いて、どこでもうまく機能するようです。

インテントを生成するコードは次のとおりです。

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[] { "my@email.com" });
    i.putExtra(Intent.EXTRA_SUBJECT, "Export");
    i.putExtra(Intent.EXTRA_TEXT, "See the attached...");
    i.putExtra(Intent.EXTRA_STREAM, uri);
    return i;
}

アクティビティを開始するコードは次のとおりです。

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();
}

Slack、Evernote などではうまく機能しますが、Gmail では、私が提供した電子メール アドレスに加えて、この種の形式の別の宛先が追加されます。

//com.example.myapplication.provider/my_files/filefile.csv

これにより、メッセージから手動で削除されるまで電子メールが送信されなくなります。メッセージに関する他のすべては期待どおりです。

これを防ぐ方法の手がかりはありますか?

4

1 に答える 1