Androidでストレージのファイルを添付メールで送る
Androidでストレージのファイルを添付メールで送る方法を備忘録で残します。
昔は内部ストレージのファイルのURLをインテントに渡すだけで、
添付メールとして送信できましたが、API Level 24以降では、ファイルプロバイダーが必須になりました。以下のようなエラーがでます。
android.os.FileUriExposedException: <ファイルパス> exposed beyond app through ClipData.Item.getUri()
1. AndroidManifest.xmlにファイルプロバイダーを追加
AndroidManifest.xmlにファイルプロバイダーを追加します。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="false"
android:theme="@style/AppTheme">
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.package.name.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
・・・
</application>
</manifest>
2. res/xmlにfilepaths.xmlを追加
res/xmlにfilepaths.xmlを追加します。
内部ストレージのファイルを使う時は、次のように記述します。
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path path="." name="name" />
</paths>
外部ストレージのファイルを使う時は、次のように記述します。
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="." />
</paths>
3. 添付メールの送信
添付メールを送信するコードは次の通りです。
以下の「<メールアドレス>」は送信先のメアドを指定してください。
//添付メールの送信
private void sendMain(File file) {
try {
Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putExtra(Intent.EXTRA_SUBJECT,"Subject");
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"<メールアドレス>"});
Uri uri = FileProvider.getUriForFile(this, "com.package.name.fileprovider", file);
ArrayList<Uri> uris = new ArrayList<Uri>();
uris.add(uri);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(shareIntent , "Email:").
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} catch (Exception e) {
e.printStackTrace();
}
}
この記事が気に入ったらサポートをしてみませんか?