zoukankan      html  css  js  c++  java
  • 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;
        }

    (完)

  • 相关阅读:
    Elasticsearch倒排索引结构
    Redis(二)冰叔带你了解Redis-哨兵模式和高可用集群解析
    jenkins构建配置
    jenkins配置email
    jenkins配置maven
    jenkins配置java
    jenkins配置git
    centos安装jenkins
    centos安装tomcat
    centos安装jdk
  • 原文地址:https://www.cnblogs.com/yueang/p/2762749.html
Copyright © 2011-2022 走看看