Этот код запускает приложение gmail для отправки электронного письма.
Я узнал, используя этот пост , что важной частью здесь является поиск "packageName" и "activityInfo.name"
Я хотел использовать только gmail без выбора. Обратите внимание, что имя пакета жестко запрограммировано, поэтому, если Gmail изменит свое имя пакета, оно больше не будет работать.
Ключом к этому был setComponent, где первый параметр - это имя пакета, а второй параметр - имя ActivityInfo.
Но, как я сказал, используйте с осторожностью, я повторяюсь; если у пользователя не установлено приложение gmail, или gmail меняет имя своего пакета или имя Activty для отправки электронного письма, этот (жесткий) код сломается. Твои были предупреждены;)
Вот мой код
Intent myIntent = new Intent(Intent.ACTION_SEND);
PackageManager pm = getPackageManager();
Intent tempIntent = new Intent(Intent.ACTION_SEND);
tempIntent.setType("*/*");
List<ResolveInfo> resInfo = pm.queryIntentActivities(tempIntent, 0);
for (int i = 0; i < resInfo.size(); i++) {
ResolveInfo ri = resInfo.get(i);
if (ri.activityInfo.packageName.contains("android.gm")) {
myIntent.setComponent(new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name));
myIntent.setAction(Intent.ACTION_SEND);
myIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"exampleto@gmail.com"});
myIntent.setType("message/rfc822");
myIntent.putExtra(Intent.EXTRA_TEXT, "extra text");
myIntent.putExtra(Intent.EXTRA_SUBJECT, "Extra subject");
myIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("uri://your/uri/string");
}
}
startActivity(myIntent);