【问题标题】:how to get the mimeType from an application?如何从应用程序中获取 mimeType?
【发布时间】:2010-08-24 11:28:03
【问题描述】:

如何从应用程序中获取 mimeType。

我正在开发一个基于 mimeType 过滤某些已安装应用程序的应用程序。

有人可以帮我解决这个问题吗?

非常感谢

【问题讨论】:

    标签: android mime-types


    【解决方案1】:

    mime 类型与活动相关联。您可以使用 List 和 PackageManager.queryIntentActivities(i, 0) 来获取所有活动,从而获取给定数据 mime 类型的应用程序。

    public static List<ResolveInfo> getIntents(String action, String category,
                PackageManager pm) {
            Intent i = new Intent(action, null);
            i.addCategory(category);
            i.setData(data_uri)
            List<ResolveInfo> list = pm.queryIntentActivities(i, 0);
            return list;
        }
    

    否则,您可以通过以下方式获取所有应用程序(可启动):

    getIntents(Intent.ACTION_DEFAULT,Intent.CATEGORY_LAUNCHER,pm);

    现在按String type = getIntent().getType();进行分类

    【讨论】:

    • 嗨,sameer,你能给我举个例子吗?就像我想要所有具有视频 mimeType 的应用程序。
    【解决方案2】:

    如何从应用程序中获取 mimeType。

    应用程序没有 MIME 类型。

    您可以使用某种 MIME 类型创建ACTION_VIEWIntent,并使用PackageManagerqueryIntentActivities() 来确定哪些活动将响应该Intent

    【讨论】:

      【解决方案3】:

      intent 中只能获取 MIME 类型的数据:

      String type = getIntent().getType();
      

      【讨论】:

        【解决方案4】:

        虽然这不是一个完整的答案,但这应该可以帮助您更接近:

        PackageManager pm = getPackageManager();
                Intent i = new Intent(Intent.ACTION_MAIN);
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                //i.setData(Media.INTERNAL_CONTENT_URI);
        
                List<ResolveInfo> list = pm.queryIntentActivities(i, 0);
                for(ResolveInfo item : list){
        
        
                    try {
        
                        PackageInfo info = pm.getPackageInfo(item.activityInfo.applicationInfo.packageName, pm.GET_SIGNATURES);
                        Signature[] s = info.signatures;
        
                        Log.d(LOG_TAG,item.activityInfo.name +":"+ s.toString());
        
                    } catch (NameNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if(item.filter!=null){
                        Log.d(LOG_TAG,item.activityInfo.name + ": " + item.filter.toString());
                        List<String> types = (List<String>) item.filter.typesIterator();
                    }
        
                }
        

        【讨论】:

        • 我使用这段代码来获取所有的 mimetypes。但我得到空指针,因为变量 item.filter 在模拟器和设备中始终为空。
        猜你喜欢
        • 2016-11-15
        • 2018-06-11
        • 2016-10-29
        • 1970-01-01
        • 2019-03-02
        • 2014-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多