最近在做應(yīng)用的時(shí)候徙垫,遇到了需要選擇圖片上傳頭像的需求樊展。本著代碼搬運(yùn)工的精神报亩,在網(wǎng)上瀏覽了一圈卷员,發(fā)現(xiàn)解決辦法都大致如下:
Intent intentFromGallery = new Intent();intentFromGallery.setType("image"); // 設(shè)置文件類型
intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intentFromGallery, IMAGE_REQUEST_CODE);
然后在onActivityResult里面做回調(diào)處理:
@Overridepublic
void onActivityResult(int requestCode, int resultCode, Intent data) {
//結(jié)果碼不等于取消時(shí)候
if (resultCode != 0) {
switch (requestCode) {
case IMAGE_REQUEST_CODE:
//選取圖片之后,傳遞圖片地址做圖片剪裁處理
startPhotoZoom(data.getData());
break;
case RESULT_REQUEST_CODE:
if (data != null) {
getImageToView(data);
}
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
在onActivityResult回調(diào)的時(shí)候居砖,判斷如果圖片選擇完成虹脯。通過獲取返回的數(shù)據(jù)里面的圖片地址來對(duì)圖片進(jìn)行處理(我這里是調(diào)用startPhotoZoom對(duì)圖片進(jìn)行剪裁)。
問題1:
這種發(fā)送廣播的方式奏候,通常會(huì)出現(xiàn)多個(gè)廣播接收者需要選擇归形,這種用戶體驗(yàn)并不是很好。
問題2:
在某些機(jī)型上(我用的是華為榮耀4C鼻由,Android4.4.2)會(huì)出現(xiàn)圖片加載失敗暇榴,斷點(diǎn)檢查之后發(fā)現(xiàn)原本選擇的圖片URL:content://com.android.providers.media.documents/document/image/3A5323變成了content://com.android.providers.media.documents/document/image%3A5323最后一個(gè)文件路徑符合變成了“%”。所以導(dǎo)致用該URL加載圖片的時(shí)候失敗蕉世。
解決辦法:
Intent intentFromGallery = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//
startActivityForResult(intentFromGallery,IMAGE_REQUEST_CODE);
通過這種方式不僅可以直接打開系統(tǒng)的選擇圖片Activity蔼紧,而且能正確的返回圖片的URL。