android中取得mime类型的简便方法

android中有一种匿名intent的方式,只需提供数据和类型,由系统来根据类型判断调用什么程序来解析数据。这个方法很好,但是麻烦的是数据的类型使用的是mime类型,这就带来了一个问题,怎样根据文件类型来确定mime类型?

之前我采用的方法是逐一比较文件的后缀,通过在网上查到的mime类型与文件扩展名的对应关系确定mime类型,而且我发现网上很多例程都是这样写的,后来才发现webkit中有一个MimeTypeMap这个类,可以很方便的由mime类型得到文件扩展名,也可以由文件扩展名得到mime类型,这样就省了好多事情。

Uri uri = Uri.fromFile(file);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    String type = MimeTypeMap.getSingleton()
                            .getMimeTypeFromExtension(ext.substring(1));
                    if (type != null) {
                        intent.setDataAndType(uri, type);    
                    } else {
                        if (".flv".equalsIgnoreCase(ext)) {
                            intent.setDataAndType(uri,
                                    "video/x-flv");
                        }
                    }

需要注意的是如果系统没有注册这种文件类型的话MimeTypeMap是会查找不到的,这样的话还是需要用户自己补全一下。

另外,intent发出后如果没有能够处理的程序,代码就有可能会抛出运行时异常,为了避免这样的情况,我们可以在发出intent之前先查询一下有没有对应的处理软件,如果没有的话,这个intent也就没必要发出了,代码如下:

private static boolean isIntentAvailable(Context context, Intent intent) {
        final PackageManager packageManager = context.getPackageManager();
        List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
                PackageManager.GET_ACTIVITIES);
        return list.size() > 0;
    }

(完)

posted @ 2012-11-09 15:39  岳昂  阅读(1743)  评论(0编辑  收藏  举报