安卓调用手机上的应用打开不同类型的文件

本文介绍了一种简单的方法来识别文件类型并使用系统默认应用打开文件。通过利用Java的FileNameMap接口,可以轻松获取文件的MIME类型,并进一步创建Intent以启动相应的应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上看别人写了一大堆代码,都太麻烦了,在jdk的api中找到了如下两个方法,实现获取文件类型,获取类型后调用系统的intent来打开文件。


代码原理:

public interface FileNameMap {
    /**
     * Returns the MIME type (such as "text/plain") for the given filename, or null.
     */
    public String getContentTypeFor(String filename);
}


/**
     * Return the MIME type for the given extension.
     * @param extension A file extension without the leading '.'
     * @return The MIME type for the given extension or null iff there is none.
     */
    public String getMimeTypeFromExtension(String extension) {
        return MimeUtils.guessMimeTypeFromExtension(extension);
    }



功能详见代码:


try {
                    FileNameMap fileNameMap = URLConnection.getFileNameMap();
                    String path = "/mnt/test/TB_DRAWING.xls";
                    File file = new File(path);
                    String type = fileNameMap.getContentTypeFor(path);
//                  解决部分三星手机无法获取到类型的问题
                    if (TextUtils.isEmpty(type)) {
                        String extension = MimeTypeMap.getFileExtensionFromUrl(path);
                        type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
                    }
                    if(TextUtils.isEmpty(type)){
                        Toast.makeText(context, "无法正确读取文件类型,请尝试在文件夹中直接打开!", Toast.LENGTH_SHORT).show();
                        return;
                    }

                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.addCategory(Intent.CATEGORY_DEFAULT);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    Uri uri = Uri.fromFile(file);
                    intent.setDataAndType(uri, type);
                    startActivity(intent);
                } catch (Exception e) {
                    Toast.makeText(context, "手机上未安装能打开该文件的程序!", Toast.LENGTH_SHORT).show();
                }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值