Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🔥 【置顶】获取路径为空的问题(Path return null problem) #49

Open
javakam opened this issue Sep 7, 2021 · 10 comments
Open
Assignees
Labels
good first issue Good for newcomers

Comments

@javakam
Copy link
Owner

javakam commented Sep 7, 2021

✨基本上每一个issue都会提到的问题👉Android Q及以上版本获取路径为空

🌴测试环境 API 30 , Android 11.0

Video_2021-09-07_155012.convert-video-online.com.mp4

🍎 可以看到, 同一文件会有两种不同的 Uri :

  1. 从侧边栏手机图标进入时获取到文件的Uricontent://com.android.externalstorage.documents/...,此时路径不为空;
  2. 从侧边栏Download进入时Uricontent://com.android.providers.downloads/..., 此时路径为空。

🌴建议使用Uri替换Path, 如上传文件操作可以使用ContentResolver.openInputStream/openFile/...等API操作, 唯一缺点是不能显示文件路径, 但不会影响功能使用。

@javakam javakam changed the title Path Null 获取路径为空的问题(Path return null problem) Sep 7, 2021
@javakam javakam added the good first issue Good for newcomers label Sep 8, 2021
@javakam javakam self-assigned this Sep 8, 2021
@javakam javakam closed this as completed Sep 8, 2021
@javakam javakam reopened this Sep 8, 2021
@yykou

This comment has been minimized.

@javakam

This comment has been minimized.

@yykou

This comment has been minimized.

@javakam

This comment has been minimized.

@yykou

This comment has been minimized.

@javakam javakam changed the title 获取路径为空的问题(Path return null problem) 🔥获取路径为空的问题(Path return null problem) Oct 14, 2021
@Payaml
Copy link

Payaml commented Nov 3, 2021

图片压缩的时候,传入 Uri ,会有部分图片返回的 Uri 为空,这个问题要怎么解决

@javakam
Copy link
Owner Author

javakam commented Nov 5, 2021

图片压缩的时候,传入 Uri ,会有部分图片返回的 Uri 为空,这个问题要怎么解决

  1. 先检测下传入的图片Uri是否正确, 参考方法 fun checkUri(uri: Uri?): Boolean {...}

https://github.com/javakam/FileOperator/blob/master/library_core/src/main/java/ando/file/core/FileUtils.kt

  1. 如果传入的Uri没问题, 可以试试屏蔽掉setRenameListener

image

  1. [推荐]如果只是单图片处理, 建议压缩图片别缓存, 比如做图片上传可以使用ByteArrayOutputStream

参考方法👉 fun compressPure(uri: Uri?, maxSize: Long = 300L): Bitmap? {...}

https://github.com/javakam/FileOperator/blob/master/library_compressor/src/main/java/ando/file/compressor/ImageCompressEngine.kt

@wsdydeni
Copy link

可以看下这篇文章 Android通过uri获取文件路径
把URI对应的拷到沙盒里面去

@javakam
Copy link
Owner Author

javakam commented Jan 14, 2022

可以看下这篇文章 Android通过uri获取文件路径 把URI对应的拷到沙盒里面去

他的解决方式是把读取不到路径的文件复制到可以读取路径的目录中, 这种方式大概在 v1.3.7 版本时也是有的。可以参照 #21 中的解释:

image

和上面原理相同的还有另外一种方式: https://github.com/coltoscosmin/FileUtils/blob/master/FileUtils.java 也可以解决路径为空的问题:

image

之所以后面删掉这种方式是因为它对于处理小文件和少量文件时还可以, 一旦文件过大或数量多的话就会严重占用手机存储, 所以建议尽量用uri操作文件而不是直接使用path。 当然万不得已的情况下不失为一种解决方式。
image

@wsdydeni
Copy link

wsdydeni commented Jan 14, 2022

可以看下这篇文章 Android通过uri获取文件路径 把URI对应的拷到沙盒里面去

他的解决方式是把读取不到路径的文件复制到可以读取路径的目录中, 这种方式大概在 v1.3.7 版本时也是有的。可以参照 #21 中的解释:

image

和上面原理相同的还有另外一种方式: coltoscosmin/FileUtils@master/FileUtils.java 也可以解决路径为空的问题:

image

之所以后面删掉这种方式是因为它对于处理小文件和少量文件时还可以, 一旦文件过大或数量多的话就会严重占用手机存储, 所以建议尽量用uri操作文件而不是直接使用path。 当然万不得已的情况下不失为一种解决方式。 image

我现在的场景就是必须得获取到真实路径,单从不能出问题的角度来看,这个方法不失为暂时的解决之策。还有就是那个 FileSelector的构建能不能改改啊,以及示范例子给多点,点进去看源码才知道,还要处理回调。。。

@javakam javakam changed the title 🔥获取路径为空的问题(Path return null problem) 🔥 【置顶】获取路径为空的问题(Path return null problem) Nov 15, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

4 participants