ResolveInfo.isDefault始终为false

时间:2012-08-10 03:09:15

标签: android

我正在尝试获取与扩展名相关联的默认程序的图标。

这是我的代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
MimeTypeMap mime = MimeTypeMap.getSingleton();
String tt = mime.getMimeTypeFromExtension(getExtension());

intent.setDataAndType(Uri.fromFile(getFile()), tt);

List<ResolveInfo> matches = c.getPackageManager().queryIntentActivities(intent, 0);

for (ResolveInfo match : matches) {
     if(match.isDefault){
          //GET ICON
     }
}

问题是match.isDefault总是返回false,即使我尝试将PackageManager的标志从0设置为PackageManager.MATCH_DEFAULT_ONLY

很明显,我正在测试的文件(视频)默认与程序(MX播放器)相关联。

有人能帮助我吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

作为替代解决方案,您可能希望使用此方法获取默认意图:

     ResolveInfo info = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);

返回的结果是:

  1. 如果没有针对intent的默认设置: info.activityInfo.name等于“com.android.internal.app.ResolverActivity”

  2. 如果为intent设置了任何默认应用程序,那么您可以在ResolveInfo对象上查看默认的应用信息。

  3. 修改

    对于网址,您可以执行以下操作:

        //Example: youtube url
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=something"));
        ResolveInfo defaultResolution = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    
        //Print the activity name
        Log.i(TAG, "defaultResolution:" + defaultResolution.activityInfo.name);