gpt4 book ai didi

java - 如何从 FileProvider URI 获取真实路径?

转载 作者:搜寻专家 更新时间:2023-11-01 03:17:19 33 4
gpt4 key购买 nike

我有解码 content:// URI 的代码:

Cursor cursor = null;
try {
cursor = context.getContentResolver().query(contentUri,
new String[] { MediaStore.Files.FileColumns.DATA },
null, null, null);

int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA);
cursor.moveToFirst();

return cursor.getString(columnIndex);

} finally {
if (cursor != null) {cursor.close()};
}

但它不适用于 FileProvider URI(例如下载文件的 Chrome Dev URI:content://com.chrome.dev.FileProvider/downloads/) .有没有办法得到真实的路径?

最佳答案

您可以尝试使用此解决方案从文件提供程序 URI 获取真实路径。

首先,您需要定义文件提供程序路径文件,如下所示。

provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="/storage/emulated/0" path="."/>
</paths>

AndroidMenifest.xml 中声明文件提供程序如下。

AndroidMenifest.xml

<application>
.
.
.
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
</application>

现在在 Activity 端。

MyActivity.java

private Uri picUri;

private void takePhotoFromCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (Utils.isNougat()) {
picUri = FileProvider.getUriForFile(this, getPackageName(), imageHelper
.createImageFile());
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}else {
picUri = Uri.fromFile(imageHelper.createImageFile());
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, picUri);
startActivityForResult(intent, Const.ServiceCode.TAKE_PHOTO);
}


/**
* This method is used for handel result after captured image from camera .
*/
private void onCaptureImageResult() {
if(Utils.isNougat()){
documentImage = imageHelper.getRealPathFromURI(picUri.getPath());
}else {
documentImage = imageHelper.getRealPathFromURI(picUri);
}
}

按照我的方法获取真实路径。

public String getRealPathFromURI(Uri contentURI) {
String result;
Cursor cursor = context.getContentResolver().query(contentURI, null,
null, null, null);

if (cursor == null) { // Source is Dropbox or other similar local file
// path
result = contentURI.getPath();
} else {
cursor.moveToFirst();
try {
int idx = cursor
.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx);
} catch (Exception e) {
AppLog.handleException(ImageHelper.class.getName(), e);
Toast.makeText(context, context.getResources().getString(
R.string.error_get_image), Toast.LENGTH_SHORT).show();

result = "";
}
cursor.close();
}
return result;
}

希望你能解决你的问题。

关于java - 如何从 FileProvider URI 获取真实路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45186747/

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