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

时间:2010-08-24 11:28:04

标签: android mime-types

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

我正在开发一个应用程序,它根据mimeType过滤某些已安装的应用程序。

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

非常感谢

4 个答案:

答案 0 :(得分: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();

进行分类

答案 1 :(得分:0)

  

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

应用程序没有MIME类型。

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

答案 2 :(得分:0)

您只能在意图中获取MIME类型的数据:

String type = getIntent().getType();

答案 3 :(得分:0)

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

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();
            }

        }