2012-09-27 74 views
3

我需要檢查電子郵件客戶端是否安裝在設備上。我使用了下面的代碼,但它不適合我。如何檢查電子郵件客戶端是否安裝在設備上

public boolean isIntentAvailable() { 
    final PackageManager packageManager = getApplicationContext().getPackageManager(); 
    final Intent intent = new Intent(Intent.ACTION_SEND); 
    intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]"); 
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.GET_META_DATA); 
    return list.size() > 0; 
} 

回答

12

使用此,工作對我來說:

public static boolean isMailClientPresent(Context context){ 
    Intent intent = new Intent(Intent.ACTION_SEND); 
    intent.setType("text/html"); 
    final PackageManager packageManager = context.getPackageManager(); 
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 0); 

    if(list.size() == 0) 
     return false; 
    else 
     return true; 
} 
+0

非常感謝你許多。它的工作 – user1503346

+0

這並不完全證明。如果你使用「text/html」類型來運行它,它仍然可以找到除電子郵件以外的其他工具。例如,我設置了一個新的模擬器,當試圖調用它時,它顯示了包含通過藍牙的項目的ResolveInfo對象列表。所以,這個函數調用返回true,沒有可用的電子郵件客戶端。我建議你更新這個,並將類型改爲「message/rfc822」,就像@eyal建議的一樣。 – cking24343

+0

不能始終工作 – TeeTracker

2

對於電子郵件客戶端,特別是,你應該使用:的

intent.setType("message/rfc822"); 

代替:

intent.setType("text/html"); 
相關問題