2012-09-27 48 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"); 
相关问题