27

メッセージの送信を強制する必要なく、プログラムで電子メール クライアントを開く方法はありますか? アプリで、ユーザーが電子メールをチェックする目的で電子メールクライアントを開くことができるようにしたいだけです:)

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

このコードは機能しますが、ユーザーは新しいメッセージを送信する必要があります。

4

5 に答える 5

40
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_APP_EMAIL);
    startActivity(intent);  
    startActivity(Intent.createChooser(intent, getString(R.string.ChoseEmailClient)));

それはちょっとうまくいきました。しかし、他のメールクライアントを持っているにもかかわらず、Gmail が開かれました。

于 2012-12-12T21:31:32.687 に答える
11

このコードは、電子メール クライアントのリストを含むダイアログを表示します。いずれかをクリックすると、アプリケーションが起動します。

try {
    List<String> emailClientNames = new ArrayList<String>();
    final List<String> emailClientPackageNames = new ArrayList<String>();
    // finding list of email clients that support send email
    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
        "mailto", "abc@gmail.com", null));
    PackageManager pkgManager = AppController.getContext().getPackageManager();
    List<ResolveInfo> packages = pkgManager.queryIntentActivities(intent, 0);
    if (!packages.isEmpty()) {
        for (ResolveInfo resolveInfo : packages) {
            // finding the package name
            String packageName = resolveInfo.activityInfo.packageName;
            emailClientNames.add(resolveInfo.loadLabel(getPackageManager()).toString());
            emailClientPackageNames.add(packageName);
        }
        // a selection dialog  for the email clients
        AlertDialog.Builder builder = new AlertDialog.Builder(MyActivity.this);
        builder.setTitle("Select email client");
        builder.setItems(emailClientNames.toArray(new String[]{}), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // on click we launch the right package
            Intent intent = getPackageManager().getLaunchIntentForPackage(emailClientPackageNames.get(which));
                startActivity(intent);
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }
} catch (ActivityNotFoundException e) {
    // Show error message
}
于 2015-04-15T12:12:01.593 に答える
6

Kotlin では、このバージョンではユーザーが使用するメール アプリを選択するためのセレクターが作成されます。を使用して実際のセレクターを作成することを除いて、基本的に Oved が彼の答えで行うことを行いますLabeledIntent

fun emailAppIntent(): Intent? {
    val emailIntent = Intent(Intent.ACTION_VIEW, Uri.parse("mailto:"))
    val packageManager = appLaunchContext.packageManager

    val activitiesHandlingEmails = packageManager.queryIntentActivities(emailIntent, 0)
    if (activitiesHandlingEmails.isNotEmpty()) {
        // use the first email package to create the chooserIntent
        val firstEmailPackageName = activitiesHandlingEmails.first().activityInfo.packageName
        val firstEmailInboxIntent = packageManager.getLaunchIntentForPackage(firstEmailPackageName)
        val emailAppChooserIntent = Intent.createChooser(firstEmailInboxIntent, "")

        // created UI for other email packages and add them to the chooser
        val emailInboxIntents = mutableListOf<LabeledIntent>()
        for (i in 1 until activitiesHandlingEmails.size) {
            val activityHandlingEmail = activitiesHandlingEmails[i]
            val packageName = activityHandlingEmail.activityInfo.packageName
            val intent = packageManager.getLaunchIntentForPackage(packageName)
            emailInboxIntents.add(
                LabeledIntent(
                    intent,
                    packageName,
                    activityHandlingEmail.loadLabel(packageManager),
                    activityHandlingEmail.icon
                )
            )
        }
        val extraEmailInboxIntents = emailInboxIntents.toTypedArray()
        return emailAppChooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraEmailInboxIntents)
    } else {
        return null
    }
}

..その後、後で呼び出す

val emailChooserIntent = emailAppIntent()

if (emailChooserIntent != null) {
    startActivity(emailAppIntent())
}

または必要に応じて null を処理します。

于 2019-11-15T15:36:17.130 に答える
5

に置き換える必要があると思います。これにより、MIME タイプをサポートするアプリケーションのリストが表示され、Gmail アプリ以外のデバイスにデフォルトのメール クライアントが含まれるようになるため、これが機能すると確信していIntent.ACTION_SENDますIntent.ACTION_VIEW。このコードはどうですか:
"message/rfc822"

final Intent emailLauncher = new Intent(Intent.ACTION_VIEW);
emailLauncher.setType("message/rfc822");
try{
       startActivity(emailLauncher);
}catch(ActivityNotFoundException e){

}
于 2014-06-10T07:08:44.483 に答える