获取点击文件后onActivityResult中文件路径错误
if (data.getData() != null) {
if (data.getData().getScheme().equals("content")) {
String s = data.getData().getPath(); //文件路径
Uri uri = data.getData(); // uri
File file = new File(s); //可打开的文件路径
Z.log("path: "+s);
Z.log("uri: "+uri);
Z.log("file: "+file);
Z.show("获取了返回值");
Z.log(file.exists()+"");
if (file.exists()) { //判断文件是否存在
Log.e("file", "f是文件且存在");
Conversation conversation = getCurrentConversation();
sendFile(conversation.getConversationType(), conversation.getTargetId(), file, uri);
} else {
Z.log("文件不存在");
}
}else {
Z.show("如果文件类型不同");
}
没毛病吧?结果是打印的path是 /document/image:4935 ,为啥是这样啊,但奇怪的事来了:我使用下载的第三方re管理器打开选择文件,却可以正常打印/storage/emulated/0/Download/1452843394654564.jpg,,,,,什么情况?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
并不是错误,而是你拿到的还只是文件的scheme路径,是uri地址,还不是真正的file路径,需要把uri转换成file,比如你现在取的是图片文件,可以这么转换
使用这句了..虽然有点长
android 4.4以上和以下版本使用自带文件管理器打开本地文件路径不同,的解决方法
*
@param context
@param uri
@return
*/
static String getPath(final Context context, final Uri uri) {
Get the value of the data column for this Uri. This is useful for
MediaStore Uris, and other file-based ContentProviders.
*
@param context The context.
@param uri The Uri to query.
@param selection (Optional) Filter used in the query.
@param selectionArgs (Optional) Selection arguments used in the query.
@return The value of the _data column, which is typically a file path.
*/
static String getDataColumn(Context context, Uri uri, String selection,
@param uri The Uri to check.
@return Whether the Uri authority is ExternalStorageProvider.
*/
static boolean isExternalStorageDocument(Uri uri) {
@param uri The Uri to check.
@return Whether the Uri authority is DownloadsProvider.
*/
static boolean isDownloadsDocument(Uri uri) {
@param uri The Uri to check.
@return Whether the Uri authority is MediaProvider.
*/
static boolean isMediaDocument(Uri uri) {
其实就一句话,不同手机拿到路径不同,需要将拿到的路径转换成绝对路径