Как открыть Gmail Compose при нажатии кнопки в приложении Android?
Я пытаюсь открыть экран Gmail Compose при нажатии кнопки в приложении для Android.
Мне нужен какой-то ключ API для этого от Google? или что мне нужно сделать в моей кнопке onClickListener?
Любые идеи понимаются очень хорошо.
Ответы
Ответ 1
Я не знаю, что вы можете специально запустить gmail. Вы пробовали это в своем onClickListener
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
startActivity(emailIntent);
Здесь вы можете найти более подробную информацию: Утрата электронной почты для Android
Ответ 2
Как отметил JeffC, легко сказать Android, что вы хотите отправить что-то по электронной почте, и Android предоставит пользователям список вариантов, которые, вероятно, будут включать GMail. Если вы специально хотите GMail, вы должны быть немного умнее. (Обратите внимание, что правильный тип MIME на самом деле "text/plain", а не "plain/text". Делайте с реализацией странности, GMail кажется единственной активностью, которая реагирует на последнее, но это не поведение, которое я бы рассчитывать.)
Следующее приложение демонстрирует принцип, которым вы можете следовать: на самом деле изучите все действия, которые говорят, что они могут обрабатывать ваше намерение SEND и посмотреть, выглядит ли кто-нибудь из них GMail.
package com.stackoverflow.beekeeper;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import java.util.List;
public class StackOverflowTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
final PackageManager pm = getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0);
ResolveInfo best = null;
for (final ResolveInfo info : matches)
if (info.activityInfo.packageName.endsWith(".gm") ||
info.activityInfo.name.toLowerCase().contains("gmail")) best = info;
if (best != null)
intent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
startActivity(intent);
}
}
Ответ 3
try{
Intent intent = new Intent (Intent.ACTION_VIEW , Uri.parse("mailto:" + "your_email"));
intent.putExtra(Intent.EXTRA_SUBJECT, "your_subject");
intent.putExtra(Intent.EXTRA_TEXT, "your_text");
startActivity(intent);
}catch(ActivityNotFoundException e){
//TODO smth
}
Ответ 4
Вы просто помещаете код ниже внутри вашего события click. Откроется непосредственно gmail как режим компоновки, скриншот вывода, прикрепленный ниже.
Счастливое кодирование: -)
код:
Intent intent=new Intent(Intent.ACTION_SEND);
String[] recipients={"[email protected]"};
intent.putExtra(Intent.EXTRA_EMAIL, recipients);
intent.putExtra(Intent.EXTRA_SUBJECT,"Subject text here...");
intent.putExtra(Intent.EXTRA_TEXT,"Body of the content here...");
intent.putExtra(Intent.EXTRA_CC,"[email protected]");
intent.setType("text/html");
intent.setPackage("com.google.android.gm");
startActivity(Intent.createChooser(intent, "Send mail"));
Выход:
![введите описание изображения здесь]()
Ответ 5
public static void openGmail(Activity activity,String[] email, String subject, String content) {
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content);
final PackageManager pm = activity.getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
ResolveInfo best = null;
for(final ResolveInfo info : matches)
if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
best = info;
if (best != null)
emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
activity.startActivity(emailIntent);
}
Ответ 6
<TextView
android:id="@+id/EmailId"
android:linksClickable="true"
android:autoLink="email"
android:text="[email protected]"
/>
Это лучший способ отправить электронную почту по щелчку textView.
Ответ 7
Этот код будет непосредственно запускать приложение gmail для отправки электронной почты.
Я узнал, используя этот пост, что важная часть здесь - найти "имя пакета" и "activityInfo.name"
Я хотел использовать gmail без выбора. Обратите внимание, что имя пакета жестко закодировано, поэтому, если Gmail изменяет свой идентификатор пакета, он больше не будет работать.
Ключом к этому был setComponent, где первым параметром является имя пакета, а второй параметр - имя activityInfo.
Но, как я сказал, используйте с осторожностью, повторяю я; если у пользователя нет установленного приложения gmail или gmail изменяет имя своего пакета или имя активации, чтобы отправить электронное письмо, этот (жесткий) код сломается. Ты был предупрежден;)
Вот мой код
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[]{"[email protected]"});
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);
Ответ 8
если вы не получили ничего в этой строке
final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0);
затем замените эту строку на
final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 1);
Ответ 9
Intent intent = new Intent(Intent.ACTION_SEND).setType("text/plain")
.putExtra(Intent.EXTRA_EMAIL, new String[]{emails});
List<ResolveInfo> matches = activity.getPackageManager().queryIntentActivities(intent, 0);
ResolveInfo best = null;
for (ResolveInfo info : matches) {
if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail")) {
best = info;
}
}
if (best != null) {
intent.setClassName(best.activityInfo.packageName,best.activityInfo.name);
}
activity.startActivity(intent);
Ответ 10
Intent intent = new Intent(Intent.ACTION_SEND);
String[] recipients = {"[email protected]"};//Add multiple recipients here
intent.putExtra(Intent.EXTRA_EMAIL, recipients);
intent.putExtra(Intent.EXTRA_SUBJECT, "Mail Subject"); //Add Mail Subject
intent.putExtra(Intent.EXTRA_TEXT, "Enter your mail body here...");//Add mail body
intent.putExtra(Intent.EXTRA_CC, "[email protected]");//Add CC emailid if any
intent.putExtra(Intent.EXTRA_BCC, "ma[email protected]");//Add BCC email id if any
intent.setType("text/html");
intent.setPackage("com.google.android.gm");//Added Gmail Package to forcefully open Gmail App
startActivity(Intent.createChooser(intent, "Send mail"));
Ответ 11
Вы можете использовать простое намерение Intent.ACTION_SEND
установить Intent.EXTRA_EMAIL
для массива писем
установить Intent.EXTRA_SUBJECT
для строки темы в редакторе электронной почты
Узнайте больше дополнительных опций, доступных здесь → https://developer.android.com/guide/components/intents-common#Email
Вот небольшой фрагмент кода
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
if (intent.resolveActivity(ctx.getPackageManager()) != null) {
startActivity(intent);
}