gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:13 24 4
gpt4 key购买 nike

当我从 Google 云端硬盘中选择一个 pdf 并通过“发送副本”点击共享时,应用程序崩溃了。

我正在尝试根据收到的意向数据创建一个文件。 收到的 Uri 是内容://com.google.android.apps.docs.storage.legacy/enc%3DwZUW7yjtovmYjBMzKXQVChubXRmP0Qum361CVLRoUegdADMl%0A。

当我尝试从这个 uri 创建文件时,它返回 null。

有什么方法可以从 android 共享文件(如图像、mp3、视频、pdf 等)。为保管箱、画廊等创建文件作品。

 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.

第 1 步:删除您那里的所有代码

第 2 步:使用 ContentResolveropenInputStream() 获取由 Uri< 标识的内容的 InputStream/

第 3 步:在您可以控制的文件上创建一个 FileOutputStream(例如,在 getFilesDir()getCacheDir() 中)

第 4 步:将内容从 InputStream 复制到 FileOutputStream

IOW,您对待 Uri 就像对待 Web 站点的 URL,将内容下载到您自己的文件,然后使用您自己的文件。

关于android - 无法将文件从驱动器共享到我的应用程序-android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42719068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com