2014-09-01 109 views
1

Intent.ACTION_SENDTO兩個選擇,但我的克倫特是要求刪除Gmail的選項,我看不到出路,請幫我Intent.ACTION_SENDTO顯示兩個選擇,我想在節目只顯示一個

Intent emailIntent = 
new Intent(Intent.ACTION_SENDTO, 
Uri.fromParts("mailto",userInput.getText().toString(), null)); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Press Release"); 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Please view this press release"); 
startActivity(Intent.createChooser(emailIntent,"Send mail using...")); 

enter image description here

+0

它會顯示所有默認的可能的行動這是在設備可用。由於該設備具有Gmail應用,因此該選擇器也會顯示Gmail。 – 2014-09-01 09:15:00

+0

是否意味着您想要直接打開電子郵件編輯器或僅用於刪除Gmail。 – SilentKiller 2014-09-01 09:15:01

+0

我的需求是從這個意圖刪除Gmail,但我知道,但是告訴如果有一種方法可以直接去電子郵件作曲家而不顯示這兩個圖標 – 2014-09-01 09:31:07

回答

3

在調用startActivity之前使用 emailIntent.setPackage(PackageName of Email app);


您需要設置郵件客戶端包名,不過,在三星設備com.sec.android.email是默認內置的郵件客戶端,但在HTC是com.htc.android.mail等。所以首先你需要過濾該應用程序,然後設置爲意圖。我加入的解決方案

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
     "mailto", userInput.getText().toString(), null)); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Press Release"); 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
     "Please view this press release"); 

// Identify the package name of email client and set to intent 
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(emailIntent, 0); 
if (!resInfo.isEmpty()) { 
    for (ResolveInfo info : resInfo) { 
     if (info.activityInfo.packageName.toLowerCase().contains(".android.email") 
       || info.activityInfo.name.toLowerCase().contains(".android.email")) { 
      emailIntent.setPackage(info.activityInfo.packageName); 
      // And now call 
      startActivity(Intent.createChooser(emailIntent, "Send mail using...")); 
     } 
    } 
} 

你應該閱讀Android: How to get the native Email clients package name

+2

我認爲'com.google.android.gm'是Gmail應用程序的包名,而問題是關於**,但我的clent要求刪除Gmail選項** – SilentKiller 2014-09-01 09:28:44

+0

感謝您與我分享您的研究 – 2014-09-01 09:59:31

0

如果要刪除Gmail客戶端從列表中創建一個自定義cooser

List<Intent> intents = new ArrayList<Intent>(); 
      Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND); 
      sendIntent.setType("text/plain"); 
      List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(sendIntent, 0); 
      if (!resInfo.isEmpty()){ 
       for (ResolveInfo resolveInfo : resInfo) { 
        String packageName = resolveInfo.activityInfo.packageName; 
        Intent neededShareIntent = new Intent(android.content.Intent.ACTION_SEND); 
        neededShareIntent.setType("text/plain"); 
        neededShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject"); 
        neededShareIntent.setPackage(packageName); 
        if (!StringUtils.equals(packageName, "com.google.android.gm")){ 
         intents.add(neededShareIntent); 
        } 

       } 
       Intent chooserIntent = Intent.createChooser(intents.remove(0), "Select app to share"); 

       chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new Parcelable[]{})); 

       startActivity(chooserIntent); 
      } 

PLS測試此代碼,並檢查

+1

我認爲'com.google.android.gm'是Gmail應用程序的包名,而問題是關於**但我的clent要求刪除Gmail選項** – SilentKiller 2014-09-01 09:29:38

+0

好友我複製了您的代碼但仍顯示我兩個圖標 – 2014-09-01 09:34:06

+0

什麼關於他是否在設備上有三個電子郵件客戶端? – 2014-09-01 09:41:07

相關問題