如題呼叫系統相冊,然后在onActivityResult接受選擇的圖片 再呼叫系統的裁剪圖片,然后回傳bitmap.在其他手機沒問題,.在小米上失敗包括小米9se 和小米8 系統都是anroid 9的 ,
debug時候發現小米在選擇圖片回傳的路勁并不是絕對路勁,而是FileProvider的uri,所以這個Uri到底怎么使用呢?我能把這個Uri轉換成Bitmap嗎? 如果不能那這個Uri給我有什么作用??
貼出邏輯代碼
呼叫系統相冊
Intent intent;
if (Build.VERSION.SDK_INT < 19) {
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
} else {
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
}
startActivityForResult(intent, requestPic);
onActivityResult回傳
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == requestPic && resultCode == Activity.RESULT_OK) {//相冊選擇結果
photouri = data.getData();
startPhotoZoom(requestPic, photouri);
} else if (requestCode == requestCup && resultCode == Activity.RESULT_OK) {//裁剪成功
Bundle extras = data.getExtras();
isNewHeadBitmap = false;
if (extras != null) {
photo = extras.getParcelable("data");
roundImageButtonView.setImageBitmap(photo);
isNewHeadBitmap = true;
}
} else if (requestCode == requestCup && resultCode != Activity.RESULT_OK) {// 截圖失敗
isNewHeadBitmap = false;
if (action == requestCarmela) {
if (!TextUtils.isEmpty(bimapPath)) {
photo = BitmapUtils.decodeSampledBitmapFromResource(bimapPath, 320, 320);
if (photo != null) {
roundImageButtonView.setImageBitmap(photo);
isNewHeadBitmap = true;
}
}
}
}
}
裁剪的方法
public void startPhotoZoom(int code, Uri uri) {
action = code;
Intent intent = new Intent("com.android.camera.action.CROP");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加這一句表示對目標應用臨時授權該Uri所代表的檔案
// intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// uri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".pic", new File(bimapPath));//7.0
intent.setDataAndType(uri, "image/*");
} else
intent.setDataAndType(uri, "image/*");
// 設定裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪圖片寬高
intent.putExtra("outputX", 320);
intent.putExtra("outputY", 320);
intent.putExtra("return-data", true);
startActivityForResult(intent, requestCup);
}
代碼貼出來,希望大佬門看看,
uj5u.com熱心網友回復:
Android 7.0 以后獲取的就不是絕對路勁了,需要特殊適配uj5u.com熱心網友回復:
附上適配方法:https://blog.csdn.net/qq_19707091/article/details/78415306(網上找的,遇到問題懂得度娘、谷爹很重要)
uj5u.com熱心網友回復:
確實如此,7.0后做了路勁的處理,但是目前來看很多手機直接把這個去掉還是使用之前的API,只有miui才真正做到了
uj5u.com熱心網友回復:
各家手機系統的定制情況不好說啊
uj5u.com熱心網友回復:
附上適配方法:https://blog.csdn.net/qq_19707091/article/details/78415306(網上找的,遇到問題懂得度娘、谷爹很重要)
非常感謝
你的方法是正向的,是你要共享路勁出去的時候通過FileProvider來掩飾真實路勁,,而我是從相冊選擇圖片是相冊app把掩飾過的路勁地址回傳給了我,而我要怎么去使用這個路勁.拿到圖片呢? 相當于你給的是加密,而我需要解密.雖然現在用資源查詢找到了圖片的真實,但這明顯不是google的初衷.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/79887.html
標籤:Android
上一篇:怎么才能從微信收付款二維碼中提取用戶名、id及金額等資訊
下一篇:ios復習題
