700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android 本地图片uri格式不一致 Android本地相册图片URI转换绝对路径

android 本地图片uri格式不一致 Android本地相册图片URI转换绝对路径

时间:2022-09-20 11:48:32

相关推荐

android 本地图片uri格式不一致 Android本地相册图片URI转换绝对路径

最近做毕设的时候遇到了这个问题,一直给我报错java.io.notFound啥的啥的,不管怎么修改路径都是报这个错误,今天终于解决了,记录一下解决过程。

首先我们调用系统相册。

Intent intent = new Intent(Intent.ACTION_PICK, null);

intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");

startActivityForResult(intent, 2);

protected void onActivityResult(int requestCode, int resultCode, Intent data){

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 2) {

// 从相册返回的数据

if (data != null) {

// 得到图片的全路径

Uri uri = data.getData();

imageView.setImageURI(uri);

ocrtest.ocrtest(uri);

}

}

如上即可调用相册模块进行选择本机图片,但是这样选出来的路径是URI,也就是资源统一标识符,并不是图片的绝对路径,我们需要做修改,这里把我的FileUtil类上传,直接使用即可FileUtil类下载。

在FileUtil类中,getFileAbsolutePath函数是根据URI获取绝对路径,包含两个参数context,uri。

第一个是上下文,第二个就是文件的uri。函数返回值时String类型的绝对路径RealPath。

在新建类ORCtest中调用如下

其中mContext如下

Context mContext;

public OcrTest(Context context){

mContext = context;

}

此后就可以转换为绝对路径,之后在调用百度AI的官方文档中的代码即可。

String realpath = FileUtil.getFileAbsolutePath(mContext, uri);

Log.i("realpath", realpath);

byte[] imgData = FileUtil.readFileByBytes(realpath);

String imgStr = Base64Util.encode(imgData);

String imgParam = URLEncoder.encode(imgStr, "UTF-8");

String param = "image=" + imgParam;

// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。

String result = HttpUtil.post(url, accesstoken, param);

System.out.println(result);

return result;

返回结果

需要注意的是,在Android6.0之后,则需要加入动态权限获取,否则会报Permission denied错误。

权限获取代码如下

在AndroidManifest.xml文件中加入

在java代码中加入此函数

private static final int REQUEST_EXTERNAL_STORAGE = 1;

private static String[] PERMISSIONS_STORAGE = {

Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.WRITE_EXTERNAL_STORAGE };

/**

* Checks if the app has permission to write to device storage

*

* If the app does not has permission then the user will be prompted to

* grant permissions

*

* @param activity

*/

public static void verifyStoragePermissions(Activity activity) {

// Check if we have write permission

int permission = ActivityCompat.checkSelfPermission(activity,

Manifest.permission.WRITE_EXTERNAL_STORAGE);

if (permission != PackageManager.PERMISSION_GRANTED) {

// We don't have permission so prompt the user

ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,

REQUEST_EXTERNAL_STORAGE);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。