android– 从Google Drive URI获取路径

android– 从Google Drive URI获取路径,第1张

概述我正在使用Android文件选择并从应用程序存储(图像,视频,文档)中选择文件.我有一个函数“getPath”.我从uri得到路径.我对图库图像或下载文档没有任何问题.但是当我从谷歌驱动器中选择一个文件时,我无法获得路径.这是googledriveuri“content://com.google.android.apps.docs.stora

我正在使用Android文件选择并从应用程序存储(图像,视频,文档)中选择文件.我有一个函数“getPath”.我从uri得到路径.我对图库图像或下载文档没有任何问题.但是当我从谷歌驱动器中选择一个文件时,我无法获得路径.这是Google drive uri“content://com.Google.androID.apps.docs.storage/document/acc=25; doc = 12”
你能帮我解决一下吗?

这也是我的“getPath”功能.

public static String getPath(final Context context, final Uri uri) {    // check here to KITKAT or new version    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;    // documentProvIDer    if (isKitKat && documentsContract.isdocumentUri(context, uri)) {        // ExternalStorageProvIDer        if (isExternalStoragedocument(uri)) {            final String docID = documentsContract.getdocumentID(uri);            final String[] split = docID.split(":");            final String type = split[0];            if ("primary".equalsIgnoreCase(type)) {                return Environment.getExternalStorageDirectory() + "/"                        + split[1];            }        }        // DownloadsProvIDer        else if (isDownloadsdocument(uri)) {            final String ID = documentsContract.getdocumentID(uri);            final Uri contentUri = ContentUris.withAppendedID(                    Uri.parse("content://downloads/public_downloads"),                    Long.valueOf(ID));            return getDataColumn(context, contentUri, null, null);        }        // MediaProvIDer        else if (isMediadocument(uri)) {            final String docID = documentsContract.getdocumentID(uri);            final String[] split = docID.split(":");            final String type = split[0];            Uri contentUri = null;            if ("image".equals(type)) {                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;            } else if ("vIDeo".equals(type)) {                contentUri = MediaStore.VIDeo.Media.EXTERNAL_CONTENT_URI;            } else if ("audio".equals(type)) {                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;            }            final String selection = "_ID=?";            final String[] selectionArgs = new String[] { split[1] };            return getDataColumn(context, contentUri, selection,                    selectionArgs);        }        else if(isGoogleDriveUri(uri)){                //Get Google drive path here        }    }    // MediaStore (and general)    else if ("content".equalsIgnoreCase(uri.getScheme())) {        // Return the remote address        if (isGooglePhotosUri(uri))            return uri.getLastPathSegment();        return getDataColumn(context, uri, null, null);    }    // file    else if ("file".equalsIgnoreCase(uri.getScheme())) {        return uri.getPath();    }    return nopath;}public static String iStreamToString(inputStream is1){    BufferedReader rd = new BufferedReader(new inputStreamReader(is1), 4096);    String line;    StringBuilder sb =  new StringBuilder();    try {        while ((line = rd.readline()) != null) {            sb.append(line);        }        rd.close();    } catch (IOException e) {        // Todo auto-generated catch block        e.printstacktrace();    }    String contentOfMyinputStream = sb.toString();    return contentOfMyinputStream;}

解决方法:

I have no problem with gallery images or download documents

你会在许多设备上.

But when i select a file from Google drive i cant get path

没有路径. ACTION_GET_CONTENT不允许用户选择文件.它允许用户选择一段内容.该内容可能是本地文件.该内容也可能是:

>东西on a file server on the network
>云存储服务中的某些内容,例如Google云端硬盘,因此目前不在设备上
> an encrypted volume年的某些事情
>某些文件,但不是您可以直接访问的文件,例如从另一个应用程序的internal storage开始
>等等

您有两个主要选择.如果您只想要文件,请使用a third-party file chooser library替换问题中的所有代码.

或者,如果您仍想使用ACTION_GET_CONTENT或ACTION_OPEN_document,您可以从onActivityResult()中的data.getData()中获取Uri并使用它做两件事:

>首先,使用documentfile.fromSingleUri()获取指向该Uri的documentfile对象.您可以在documentfile上调用getname()来获取内容的“显示名称”,这应该是用户可以识别的内容.
>然后,使用ContentResolver和openinputStream()来获取内容本身,类似于使用fileinputStream获取文件中的字节的方式.

总结

以上是内存溢出为你收集整理的android – 从Google Drive URI获取路径全部内容,希望文章能够帮你解决android – 从Google Drive URI获取路径所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1116488.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存