Android通过Intent打开各种文件类型

首先得知道文件的具体类型,也即是文件的后缀名

  • 通过对File文化进行截取得到扩展名

  • 或者直接获取文件路径的后缀名 获取最后一个下标“.”的位置 然后字符串截取

    取得扩展名 
    String end = file.getName().substring(file.getName().lastIndexOf(".") + 1, file.getName().length()).toLowerCase(Locale.getDefault());	
    

我们还需要知道各种类型文件的dataType

    private static final String DATA_TYPE_ALL = "*/*";//未指定明确的文件类型,不能使用精确类型的工具打开,需要用户选择
    private static final String DATA_TYPE_APK = "application/vnd.android.package-archive";  打开apk
    private static final String DATA_TYPE_VIDEO = "video/*";打开视频
    private static final String DATA_TYPE_AUDIO = "audio/*";打开音频
    private static final String DATA_TYPE_HTML = "text/html";打开Html
    private static final String DATA_TYPE_IMAGE = "image/*";打开图片
    private static final String DATA_TYPE_PPT = "application/vnd.ms-powerpoint";打开PPT
    private static final String DATA_TYPE_EXCEL = "application/vnd.ms-excel";打开Excel
    private static final String DATA_TYPE_WORD = "application/msword";打开Word
    private static final String DATA_TYPE_CHM = "application/x-chm";打开chm(这个格式可以百度下)
    private static final String DATA_TYPE_TXT = "text/plain";打开txt
    private static final String DATA_TYPE_PDF = "application/pdf";打开PDF
    private static final String DATA_TYPE_VCF = "application/pdf";打开VCF
    private static final String DATA_TYPE_SWF = "flash/*";打开SWF

// 封装Android获取一个用于打开各类文件的intent

    /**
     *
     * @param filePath 文件路径
     * @param context
     * @param type 文件类型
     * @return
     */
    private static Intent getTxtFileIntent(String filePath, Context context,String type) {
        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //getUri方法 下面已写
        Uri uri=getUri(intent,filePath,context);
        intent.setDataAndType(uri, type);
        return intent;
    }

Android7.0获取文件路径改变了行为,去除项目中传递 file:// 类似格式的 Uri,所以7.0以上采用FileProvider

    /**
     * 获取对应文件的Uri
     * @param intent 相应的Intent
     * @param param path
     * @return
     */
    private static Uri getUri(Intent intent, String param,Context context) {
        Uri uri = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            //判断版本是否在7.0以上
            uri =
                    FileProvider.getUriForFile(context,
                            context.getPackageName() + ".FileProvider",
                            new File(param));
            //添加这一句表示对目标应用临时授权该Uri所代表的文件
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        } else {
            uri = Uri.fromFile(new File(param));
        }
        return uri;
    }

最后就是根据文件类型进行调用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值