2017-01-09 72 views
-1

我正在創建一個應用程序,其中有一個Gmail按鈕,當用戶點擊Gmail時,它會使用內置gmail客戶端向特定收件人發送郵件,但是當用戶點擊gmail按鈕時會發生什麼,打開設備中安裝的所有客戶端的列表,例如遠程登錄,驅動器,電子郵件,Gmail等,用戶請求選項。Android意圖選擇器

這裏是我的代碼

 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

does not 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

does not 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

我必須要求用戶輸入電子郵件和gmail – neha

+0

String recepientEmail =「[email protected]」; //設置爲目標電子郵件或保留爲空 Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse(「mailto:」+ recepientEmail)); startActivity(intent); –