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