web-dev-qa-db-ja.com

Android

Androidでメールを送信する必要があるときはいつでも、以下のようにIntent.ACTION_SENDを使用して登録済みメールアプリケーションを呼び出します

_Intent i = new Intent(Intent.ACTION_SEND);
startActivity(Intent.createChooser(i, "Send mail..."));
_

startActivty(i)を使用するのではなく、startActivityでIntent.createChooserを使用する必要があるのはなぜでしょうか。 Intent.createChooser()を使用する特定の理由はありますか?

AFAIK、Intent.createChooserを使用する場合、3つの違いがあります。

  1. 選択ダイアログのタイトルを指定して、わかりやすくすることができます。

  2. ユーザーがデフォルトのダイアログを選択した場合でも、システムは常に選択ダイアログを表示します。

  3. Intent.createChooserによって作成されたインテントがどのアクティビティとも一致しない場合でも、システムは指定されたタイトルのダイアログとエラーメッセージNo application can perform this actionを表示します。または、通常のインテントの場合、Androidランタイムエラー:Caused by: Android.content.ActivityNotFoundException: No Activity found to handle Intent

26
Euporie

セレクターを使用すると、ユーザーはデフォルト以外のメールアプリケーションを選択できます。通常のGmail(プライベート)と電子メール(仕事関連)を使用していて、どちらを使用するかを選択する場合に非常に便利です。

常に使用する必要があります...

10
WarrenFaith

古いメッセージですが、それに遭遇する他の人のために、インテントのタイプをメールのMIMEタイプに設定できます。これにより、少なくとも、適切なタイプのメッセージを送信できるアプリケーションに制限されます。

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType( "message/rfc822");
startActivity(Intent.createChooser(i, "Send mail..."));

選択ダイアログをよりきれいにします。

8
Michael

createChooser()を使用しない場合でも、ユーザーが所定のタスクに使用するインストール済みプログラムに関する決定をすでに表明していない(または以前の決定を撤回していない)場合を除き、システムは選択ダイアログを表示します。 。

createChooser()を使用する場合は、すでに明示的な設定がある場合でも、システムは常にダイアログを表示します。

したがって、どちらも完全に正しいので、どの場合でもどちらを使用するかを決定する必要があります。走行距離はさまざまですが、基本的には、テキスト、画像、ビデオなどの形式を表示または編集用に提供する場合は、createChooser()を省略して、ユーザーがすでに好むものは何でもできるようにする必要がありますすぐに始めましょう。一方、ユーザーが処理するはずの何かを別のインストール済みプログラムと共有したい場合(たとえば、電子メール、Facebook、チャットなどを毎回送信する場合)、おそらくcreateChooser()は、ユーザーがオンザフライで簡単に選択できるようにします。

5
Gábor

私は個人的に使用します:

try {
    startActivity(i);
} catch (ActivityNotFoundException e) {
    startActivity(Intent.createChooser(i, null));
}

したがって、ユーザーにデフォルトがある場合はデフォルトを使用し、アプリがない場合は「アプリなし」ウィンドウをポップアップします。どちらも幸せです。

1
Kai Wang