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