2010-08-15 59 views
1

這甚至可以不調用特定的包?我發現了無數通過意向發送電子郵件的例子,但我沒有發現簡單地通過按鈕按鈕打開設備上的默認電子郵件客戶端(最好在用戶有多個客戶端的情況下使用選擇器對話框)。如何直接啓動電子郵件客戶端到收件箱視圖?

+0

我很好奇你爲什麼要這樣做。 – MatrixFrog 2010-08-15 23:05:40

+0

客戶希望他們的應用程序有一個「電子郵件」按鈕,它只是啓動默認郵件客戶端來檢查公司郵件。 – wirbly 2010-08-15 23:16:03

回答

5

沒有標準Intent操作來打開「設備上的默認電子郵件客戶端」的「收件箱視圖」。

+0

有沒有我可以用來打開默認電子郵件客戶端的標準意向操作? (即使它不是收件箱視圖 - 只需觸摸主屏幕上的圖標啓動應用程序就可以啓動它) – wirbly 2010-08-15 23:21:27

+0

@wirbly:不,對不起。 – CommonsWare 2010-08-16 04:20:44

+0

好的,謝謝你的信息。看起來我正在調用一個特定的包。 – wirbly 2010-08-16 13:12:00

1

你可以從你的活動對象試試這個:

不一定會帶你到收件箱直接,但它會打開電子郵件應用程序:

Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.email"); 
startActivity(intent); 
+0

如果Android電子郵件客戶端是默認的電子郵件程序(很少屬於這種情況),那麼這個方法就行得通。如果不是,則startActivity會引發異常。 – KPK 2012-02-07 02:38:40

+0

即使它的默認應用程序它不會工作。我記得一些HTC手機有不同的電子郵件包命名,如「com.htc.android.email」。所以這不起作用 – 2012-02-07 18:33:45

12

沒有默認/簡單的方法來做這個。此代碼爲我工作。它打開一個選擇器與所有電子郵件應用程序註冊到設備,並直接到收件箱:

Intent emailIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:")); 
    PackageManager pm = getPackageManager(); 

    List<ResolveInfo> resInfo = pm.queryIntentActivities(emailIntent, 0); 
    if (resInfo.size() > 0) { 
     ResolveInfo ri = resInfo.get(0); 
     // First create an intent with only the package name of the first registered email app 
     // and build a picked based on it 
     Intent intentChooser = pm.getLaunchIntentForPackage(ri.activityInfo.packageName); 
     Intent openInChooser = 
       Intent.createChooser(intentChooser, 
         getString(R.string.user_reg_email_client_chooser_title)); 

     // Then create a list of LabeledIntent for the rest of the registered email apps 
     List<LabeledIntent> intentList = new ArrayList<LabeledIntent>(); 
     for (int i = 1; i < resInfo.size(); i++) { 
      // Extract the label and repackage it in a LabeledIntent 
      ri = resInfo.get(i); 
      String packageName = ri.activityInfo.packageName; 
      Intent intent = pm.getLaunchIntentForPackage(packageName); 
      intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon)); 
     } 

     LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[intentList.size()]); 
     // Add the rest of the email apps to the picker selection 
     openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents); 
     startActivity(openInChooser); 
    } 
+1

最初這看起來像非常可怕的代碼,但它仍然工作!我爲沒有安裝郵件客戶端的手機添加了一個else語句。 – user1354603 2015-02-09 10:41:37

+1

此代碼是我發現的唯一解決方案,我發現它可以幫助我打開電子郵件收件箱(無需編寫新的電子郵件),同時它可以讓您選擇對話框,這非常棒,謝謝Larisa – Sniper 2016-09-17 18:21:03

+0

唯一的代碼位那有效。你應該把它包裝成一個幫手,並把它放在GitHub Gists上。日Thnx! – CelticParser 2017-01-30 16:29:03

相關問題