Открытие почтового клиента через Intent (но не для отправки сообщения)

Есть ли способ программно открыть почтовый клиент без необходимости форсировать отправку сообщений? Я просто хочу, чтобы приложение позволяло пользователю открывать свой почтовый клиент для проверки электронной почты:)

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

Этот код работает, но он заставляет пользователя отправлять новое сообщение.

Ответ 1

Я думаю, вы должны заменить Intent.ACTION_SEND на Intent.ACTION_VIEW,
я уверен, что это сработает, так как это подскажет список приложений, поддерживающих MIME-тип "message/rfc822", поэтому он будет включать ваш почтовый клиент по умолчанию в вашем устройство, отличное от приложения gmail.

Как насчет этого кода:

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

}

Ответ 2

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

Это сработало. Но для меня это Gmail, так как у меня есть другие почтовые клиенты.

Ответ 3

Этот код отобразит диалог со списком почтовых клиентов. Нажав один, вы запустите приложение:

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", "[email protected]", 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
}