无法将文件从驱动器共享到我的应用程序-android

无法将文件从驱动器共享到我的应用程序-android,第1张

概述当我从Google云端硬盘中选择PDF并通过“发送副本”应用单击共享时崩溃.我正在尝试根据收到的意图数据创建文件. 收到的Uri是content://com.google.android.apps.docs.storage.legacy/enc=wZUW7yjtovmYjBMzKXQVChubXRmP0Qum361CVLRoUegdADMl.当我尝试从此uri创建文件时,它返回nul

当我从Google云端硬盘中选择pdf并通过“发送副本”应用单击共享时崩溃.

我正在尝试根据收到的意图数据创建文件.
 收到的Uri是content://com.Google.android.apps.docs.storage.legacy/enc=wZUW7yjtovmYjBMzKXQVChubXRmP0Qum361CVLRoUegdADMl
.

当我尝试从此uri创建文件时,它返回null.

有什么方法可以共享来自androID的文件(例如图像,mp3,视频,pdf等).
创建文件可用于DropBox,gallery等.

 file file = fileHelper.getfile(this, mUri);public static file getfile(Context context, Uri uri) {        if (uri != null) {            String path = getPath(context, uri);            if (path != null && isLocal(path)) {                return new file(path);            }        }        return null;    } public static String getPath(final Context context, final Uri uri) {        if (DEBUG)            Log.d(TAG + " file -",                    "Authority: " + uri.getAuthority() +                            ", Fragment: " + uri.getFragment() +                            ", Port: " + uri.getPort() +                            ", query: " + uri.getquery() +                            ", Scheme: " + uri.getScheme() +                            ", Host: " + uri.getHost() +                            ", Segments: " + uri.getPathSegments().toString()            );        final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;        // documentProvIDer        if (isKitKat && documentsContract.isdocumentUri(context, uri)) {            // localstorageProvIDer            if (islocalstoragedocument(uri)) {                // The path is the ID                return documentsContract.getdocumentID(uri);            }            // ExternalStorageProvIDer            else 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];                }                // Todo handle non-primary volumes            }            // 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);            }        }        // 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 null;    }

解决方法:

I’m trying to create a file from the intent data received.

@H_419_24@

步骤#1:删除那里的所有代码

步骤#2:使用ContentResolver和openinputStream()在Uri标识的内容上获取inputStream

步骤#3:在您可以控制的文件上创建fileOutputStream(例如,在getfilesDir()或getCacheDir()中)

步骤4:将内容从inputStream复制到fileOutputStream

IOW,您对待Uri的方式就如同对待网站的URL,将内容下载到您自己的文件中,然后使用您自己的文件.

总结

以上是内存溢出为你收集整理的无法将文件从驱动器共享到我的应用程序-android全部内容,希望文章能够帮你解决无法将文件从驱动器共享到我的应用程序-android所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存