Android ResolveInfo.isDefault始终为on false

Android ResolveInfo.isDefault始终为on false,android,Android,我正在尝试获取与扩展关联的默认程序的图标 这是我的密码: Intent intent = new Intent(Intent.ACTION_VIEW); MimeTypeMap mime = MimeTypeMap.getSingleton(); String tt = mime.getMimeTypeFromExtension(getExtension()); intent.setDataAndType(Uri.fromFile(getFile()), tt); List<Resol

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

这是我的密码:

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
     }
}
Intent-Intent=新意图(Intent.ACTION\u视图);
MimeTypeMap mime=MimeTypeMap.getSingleton();
字符串tt=mime.getMimeTypeFromExtension(getExtension());
setDataAndType(Uri.fromFile(getFile()),tt);
列表匹配项=c.getPackageManager().QueryInputActivities(intent,0);
用于(ResolveInfo匹配:匹配){
if(match.isDefault){
//获取图标
}
}
问题是
match.isDefault
始终返回false,即使我尝试将PackageManager的标志从
0
设置为
PackageManager.match\u DEFAULT\u ONLY

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

有人能帮我吗


提前感谢。

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

     ResolveInfo info = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
返回的结果将是:

  • 如果意图没有默认设置: info.activityInfo.name将等于“com.android.internal.app.ResolverActivity”

  • 如果有任何针对该意图的默认应用程序集,则可以在ResolveInfo对象上检查默认应用程序信息

  • 编辑:

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

        //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);
    

    如何获得用户偏好?@EugenMarynov-Hmm,很抱歉,我不知道你想要什么。你能为你的问题提供更多细节吗?我选择instagram作为默认应用程序,用于与主机“instagram”的链接。是否可以从PackageManager获取此信息?