我正在使用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获取路径所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)