2017-01-09 7 views
-1

Я создаю приложение, в котором есть кнопка Gmail, и когда пользователь при нажатии на Gmail отправляет письмо конкретному получателю с использованием встроенного клиента gmail, но происходит то, что пользователь нажимает кнопку gmail, это открывает список всех клиентов, установленных на устройстве, например, походы, диск, электронная почта, gmail и т. д., когда пользователи запрашивают этот параметр.Android Intent Chooser

Вот мой код

 protected void sendEmail() { 
     Log.i("Send email", ""); 
     String[] TO = {""}; 
     String[] CC = {""}; 
     Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
     emailIntent.setType("message/rfc822"); //should i have to change this line of code 
     emailIntent.putExtra(Intent.EXTRA_EMAIL, TO); 
     emailIntent.putExtra(Intent.EXTRA_CC, CC); 
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your subject"); //message subject 
     emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message goes here"); //message content 

     try { 
      startActivity(Intent.createChooser(emailIntent,"Send mail...")); 
      finish(); 
      Log.i("Finished sending email.", ""); 
     } 
     catch (android.content.ActivityNotFoundException ex) { 
      Toast.makeText(MailSenderActivity.this, "There is no email client installed.", Toast.LENGTH_SHORT).show(); 
     } 
    } 

То, что я хочу, когда пользователь нажимает на кнопку Gmail она только открывает встроенные клиенты Gmail и электронной почты только не походу и все. Как я могу добиться этого (изменив тип или что?). Я пробовал так много способов, но напрасно.

+0

Возможный дубликат http://stackoverflow.com/questions/21800948/how-to-start-and-app-chooser –

+0

L ook at http://stackoverflow.com/questions/3470042/intent-uri-to-launch-gmail-app – birraa

+0

doesnt work ,, .. – neha

ответ

0

Это работает только с приложением gmail.

Intent sendIntent = new Intent(Intent.ACTION_VIEW); 
sendIntent.setType("plain/text"); 
sendIntent.setData(Uri.parse("[email protected]")); 
sendIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"); 
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "test"); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "hello. this is a message sent from my demo app :-)"); 
startActivity(sendIntent); 

использование для большого количества писем:

sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 

для одного сообщения электронной почты:

sendIntent.setData(Uri.parse("[email protected]")); 

Вы можете добавить дополнительные "putExtra (Intent.EXTRA ..)" и изменить «SetType «для вашей цели.

+0

doesnt work ,, все еще отображает весь список клиентов – neha

0

Вот мой код

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); 

ИЛИ Вы можете сделать с ниже код

Intent intent = new Intent(Intent.ACTION_SEND); 

String[] strTo = { getString(R.string.mailto) }; 

intent.putExtra(Intent.EXTRA_EMAIL, strTo); 
intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.mail_subject)); 
intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.mail_body)); 

Uri attachments = Uri.parse(image_path); 
intent.putExtra(Intent.EXTRA_STREAM, attachments); 

intent.setType("message/rfc822"); 

intent.setPackage("com.google.android.gm"); 

startActivity(intent); 
+0

это работает, но это перенаправление только встроенному клиенту Gmail, я хочу, чтобы он запрашивал EMAIL/GMAIl – neha

+0

@neha, если вы этого хотите, тогда вам нужно отобразить диалоговое окно вручную, чтобы выбрать выбор приложения. – Andrain

+0

yaa Я так хочу, чтобы мне было позволено сделать это – neha

0

Вы можете использовать следующий код для перенаправления на Gmail не спрашивая другого приложения электронной почты

final Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.setType("plain/text"); 

     PackageInfo pInfo = null; 
     try { 
      pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
     } catch (PackageManager.NameNotFoundException e) { 
      e.printStackTrace(); 
     } 
     String version = ""; 
     if (pInfo != null) { 
      version = pInfo.versionName; 
     } 

     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); 

     intent.putExtra(Intent.EXTRA_EMAIL, "abc.gmail.com"); 
     intent.putExtra(Intent.EXTRA_SUBJECT,"subject here !"); 
     intent.putExtra(Intent.EXTRA_TEXT,"Body here !"); 
     startActivity(intent); 
+0

I должны спросить пользователя по электронной почте и gmail – neha

+0

String recepientEmail = "[email protected]"; // либо установить на адрес электронной почты получателя, либо оставить пустым Intent intent = new Intent (Intent.ACTION_SENDTO); intent.setData (Uri.parse ("mailto:" + recepientEmail)); startActivity (намерение); –