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);
}
}
總結
以上是生活随笔為你收集整理的android 本地图片uri格式不一致,Android本地相册图片URI转换绝对路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你的名字的图片是谁画的啊?
- 下一篇: 印象武隆演出座位