gpt4 book ai didi

java - Android - 从 URI 获取文件路径

转载 作者:行者123 更新时间:2023-12-01 11:27:59 26 4
gpt4 key购买 nike

我有一个图像处理应用程序。在我的代码中,我向服务传递了一个 ArrayList,然后服务完成其余的工作。现在我想扩展我的应用程序的功能,让用户能够进入图库,选择一张图片,然后使用共享按钮将其发送到我的应用程序进行处理。我想尽可能重用最多的代码,因此我决定一个好方法是将发送操作返回的 URI 转换为实际文件路径。我的解决方案适用于 QuickPic,但不适用于 Google Photos。我的代码如下:

//MainFragment.onCreateView()
Intent intent = getActivity().getIntent();
if(Intent.ACTION_SEND.equals(intent.getAction()) {
handleSingleImage(intent);
}

private void handleSingleImage(Intent intent) {
Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);

Log.d("MYURISTRING", uri.toString());
ArrayList<String> selectedPaths = new ArrayList<String>();

String path = Utils.getRealPathFromURI(getActivity(), uri);

selectedPaths.add(path);

Utils.startProcessPhotosService(getActivity(), MainFragment.this, selectedPaths);
}

//Utils
public static String getRealPathFromURI(Context context, Uri contentUri) {
/*String[] proj = {MediaStore.Images.Media.DATA};

CursorLoader cursorLoader = new CursorLoader(context, contentUri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();

int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();

return cursor.getString(columnIndex);*/

ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(contentUri, null, null, null, null);
cursor.moveToFirst();

String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));

cursor.close();

return path;
}

如果我使用 QuickPic 应用中的照片进行测试,一切都会按预期运行,日志上的 URI 如下所示:

content://media/external/images/media/135695

但是如果我使用 Google Photos 进行测试,我的应用程序就会崩溃,并且 URI 如下:

content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F135669/ACTUAL

我怎样才能支持这两种风格的 URI(并且可能不止这些)?谢谢

最佳答案

so I decided that a good way to go would be converting those URIs returned by the send action to actual file paths

所以不是一个好方法。

正如我今天已经多次指出的那样,以及过去几个月中数十次指出的,a Uri is not a file 。您无法可靠地获取 Uri 的本地文件路径。甚至可能没有本地路径,更不用说您可以访问的路径了。

如果您希望使用 Uri 表示的内容,请使用 getContentResolver().openInputStream() 或反过来使用它的东西(例如,Picasso for图像加载)。

关于java - Android - 从 URI 获取文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30652714/

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