android uri转换file

这篇具有很好参考价值的文章主要介绍了android uri转换file。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下载jar包commons-io-2.11.0.jar导入项目工程,导入import org.apache.commons.io.FileUtils;

如果使用系统import android.os.FileUtils;有些手机不兼容会导致项目崩溃文章来源地址https://www.toymoban.com/news/detail-665112.html

 public static File uriToFileApiQ(Uri uri, Context context) {
 
        Log.e("uriToFileApiQ","哦=="+uri);
        File file = null;
        if(uri == null) return file;
        //android10以上转换
        if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) {
            file = new File(uri.getPath());
        } else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
            //把文件复制到沙盒目录
            ContentResolver contentResolver = context.getContentResolver();
            String displayName = System.currentTimeMillis()+ Math.round((Math.random() + 1) * 1000)
                    +"."+ MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri));
 
//            注释掉的方法可以获取到原文件的文件名,但是比较耗时
//            Cursor cursor = contentResolver.query(uri, null, null, null, null);
//            if (cursor.moveToFirst()) {
//                String displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));}
Log.e("兼容","兼容=="+displayName);
 
            try {
                InputStream is = contentResolver.openInputStream(uri);
                File cache = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath(), displayName);
                FileOutputStream fos = new FileOutputStream(cache);
                Log.e("uriToFileApiQ","进入=");
//                FileUtils.copy(is, fos);//有的手机会崩溃
                FileUtils.copyInputStreamToFile(is,cache);
                Log.e("uriToFileApiQ","来了=");
                file = cache;
                fos.close();
                is.close();
            } catch (IOException e) {
                Log.e("uriToFileApiQ","报错="+e.getMessage());
                e.printStackTrace();
            }
        }
 
 
        return file;
    }

到了这里,关于android uri转换file的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android各个应用商店Uri

    三星: URL: https://apps.samsung.com/appquery/AppRating.as?appId=PackageName URI: “samsungapps://AppRating/PackageName” Onestore ”onestore://common/product/bg_update/PID“ https://m.onestore.co.kr/mobilepoc/apps/appsDetail.omp?prodId=PID Google Play “market://details?id=PackageName” 华为 “appmarket://details?id=PackageName” vivo “vivoMa

    2024年01月22日
    浏览(26)
  • Android系统的问题分析笔记(9) - Android 中的 Uri 如何使用呢 ?

    Android 中常用的 uri 如何使用呢 ?(此篇分析基础为Android 7.1.1系统源码),参看Android官方说明:https://developer.android.com/reference/android/net/Uri,代码可在此查看:https://github.com/LineageOS/android_frameworks_base/blob/lineage-20.0/core/java/android/net/Uri.java   通用资源标志符 URI (Universal Resour

    2024年02月09日
    浏览(39)
  • 【Android 11/12】 通过Uri获取绝对路径的方法

    原理:通过对不同的Uri进行辨别,提取ID, 需要 android.permission.MANAGE_EXTERNAL_STORAGE 权限 直接获取\\\"primary:\\\"后的路径即可,后面即是相对路径. 与下一个类似,获取ID后进入数据表中查找. 进入MediaStore.Files表中进行查询_data字段,旧版通过直接查询uri的方法获取_data已经无效. 下面

    2024年02月15日
    浏览(35)
  • Android 调用系统文件选择器读取Uri并获得文件名

    需要申请权限读写外部文件,在Manifest文件中输入以下代码对权限进行声明,分别是读外部文件权限和写外部文件权限: 运行效果: 直接复制就能用,没效果你来砍我

    2024年02月08日
    浏览(34)
  • Java的URI类

    URI是对URL的抽象,不仅包含统一资源定位符,还包括统一资源名(URN)。实际使用的URI大多是URL,但大多数规范和标准都是用URI定义的,在Java中用java.net.URI类表示,这个类与java.net.URL类的区别表现在3个重要的方面: URI类完全有关于资源的标识和URI的解析。它没有提供方法来

    2024年02月06日
    浏览(26)
  • 开发Android原生插件,引入自己打的jar报,编译报 Unsupported class file major version 61

    “Unsupported class file major version 61” 错误的原因是由于你自己大的jar包当时是用的Java 17打包的,因为在 Java 中,每个主要版本都有一个对应的 major version 值。例如,Java 8 的 major version 值为 52,Java 9 的 major version 值为 53,以此类推。Java 17 的 major version 值为 61。 解决这个问题,

    2024年02月09日
    浏览(37)
  • Android将Uri转为路径字符串(适配安卓全版本)并使用第三方应用打开文件(适配Android7.0+)

    做这个功能时在网上找了无数篇例子,有些方法是有问题的,故自己写一篇完整实现的总结,作备忘也作案例。顺便说一句,Android对存储权限的给予真的越来越严格 目录 1.Uri转为路径String以获得文件名  2.获取文件后缀名 3.通过后缀名获取文件MIME类型  4.设置Intent的Uri与权限

    2024年02月19日
    浏览(33)
  • 整数转换-C语言/Java

    描述 整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。A,B范围在[-2147483648, 2147483647]之间。 示例1: 示例2: 输入:A = 1,B = 2  输出:2 分析: 确定需要改变几个位才能将整数A转成整数B是说A需要改变几个二进制位才能转换为B,也就是A中有几个不同于

    2024年02月15日
    浏览(31)
  • Android Java代码与JNI交互 引用类型转换(五)

    🔥 Android Studio 版本 🔥   🔥 Java中基础数据类型对应Native的数据类型 🔥 🔥 Java中引用数据类型 对应Native中的数据类型 🔥   🔥 创建  JNIReferenceType 🔥 🔥 生成可关联的库链接 🔥 为了让Java能够调用reference-type-lib库中的函数,您需要使用 CMake 构建脚本中的 target_link_l

    2024年02月13日
    浏览(37)
  • Android Java代码与JNI交互基础数据类型转换(三)

    🔥 Android Studio 版本 🔥  🔥 基础类型数据的转换 🔥 定义传递基础数据类型到Native的JNI接口函数 Native层创建callNativeInt 提供给Java调用 CMakeLists.txt 文件下配置动态库名称  添加 target_link_libraries 配置 Java调用Native层函数   运行打印日志 Java调用Native分别打印基础类型数据  下

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包