解決小米miui系統呼叫系統裁剪圖片功能camera.action.CROP後崩潰或重新開啟app的問題
選擇相簿圖片(或呼叫MediaStore.ACTION_IMAGE_CAPTURE拍照),然後裁剪。在其他系統上都測試正常,但是在小米上出現了問題。小米2s上,裁剪後點擊確定直接卡死系統;小米3上,裁剪後點擊確定直接回到主介面,相當於重新開啟app。就是說,裁剪後,無法響應onActivityResult(),裁剪方法如下:
- /**
- * 裁剪圖片
- */
- privatevoid startPhotoZoom(Uri uri, int size) {
-
Intent intent = new Intent("com.android.camera.action.CROP");
- intent.setDataAndType(uri, "image/*");
- // crop為true是設定在開啟的intent中設定顯示的view可以剪裁
- intent.putExtra("crop", "true");
- // aspectX aspectY 是寬高的比例
- intent.putExtra("aspectX", 1);
- intent.putExtra("aspectY", 1);
- // outputX,outputY 是剪裁圖片的寬高
- intent.putExtra("outputX", size);
-
intent.putExtra("outputY"
- intent.putExtra("return-data", true);
- startActivityForResult(intent, PHOTO_REQUEST_CUT);
- }
上述方法中,裁剪後的圖片通過Intent的putExtra("return-data",true)方法進行傳遞,miui系統問題就出在這裡,return-data的方式只適用於小圖,miui系統預設的裁剪圖片可能裁剪得過大,或對return-data分配的資源不足,造成return-data失敗。
解決思路是:裁剪後,將裁剪的圖片儲存在Uri中,在onActivityResult()方法中,再提取對應的Uri圖片轉換為Bitmap使用。
其實大家直觀也能感覺出來,Intent主要用於不同Activity之間通訊,是一種動態的小巧的資源佔用,類似於Http請求中的GET,並不適用於傳遞圖片之類的大資料。於是當A生成一個大資料要傳遞給B,往往不是通過Intent直接傳遞,而是在A生成資料的時候將資料儲存到C,B再去呼叫C,C相當於一個轉換的中介軟體。
- /**
- * 裁剪圖片
- */
- privatevoid startPhotoZoom(Uri uri, int size) {
- Intent intent = new Intent("com.android.camera.action.CROP");
- intent.setDataAndType(uri, "image/*");
- // crop為true是設定在開啟的intent中設定顯示的view可以剪裁
- intent.putExtra("crop", "true");
- // aspectX aspectY 是寬高的比例
- intent.putExtra("aspectX", 1);
- intent.putExtra("aspectY", 1);
- // outputX,outputY 是剪裁圖片的寬高
- intent.putExtra("outputX", size);
- intent.putExtra("outputY", size);
- /**
- * 此方法返回的圖片只能是小圖片(sumsang測試為高寬160px的圖片)
- * 故將圖片儲存在Uri中,呼叫時將Uri轉換為Bitmap,此方法還可解決miui系統不能return data的問題
- */
- //intent.putExtra("return-data", true);
- //uritempFile為Uri類變數,例項化uritempFile
- uritempFile = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg");
- intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);
- intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
- startActivityForResult(intent, PHOTO_REQUEST_CUT);
- }
然後在onActivityResult()中處理:
- /**
- * 處理返回結果
- */
- @Override
- protectedvoid onActivityResult(int requestCode, int resultCode, Intent data) {
- // TODO Auto-generated method stub
- case PHOTO_REQUEST_CUT:
- //將Uri圖片轉換為Bitmap
- Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));
- //TODO,將裁剪的bitmap顯示在imageview控制元件上
- break;
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
相關推薦
解決小米miui系統呼叫系統裁剪圖片功能camera.action.CROP後崩潰或重新開啟app的問題
選擇相簿圖片(或呼叫MediaStore.ACTION_IMAGE_CAPTURE拍照),然後裁剪。在其他系統上都測試正常,但是在小米上出現了問題。小米2s上,裁剪後點擊確定直接卡死系統;小米3上,裁剪後點擊確定直接回到主介面,相當於重新開啟app。就是說,裁剪後,無法響
解決小米miui系統呼叫系統裁剪圖片功能崩潰失敗的問題
專案中選擇圖片作為頭像,都要經過剪裁的過程。一般我們都呼叫系統剪裁的方法。不過該方法在其它系統上都顯示正常,但是在miui系統上就出錯了。經測試發現其他系統cropBitmap = data.getParcelableE
Android呼叫系統, 任意比例裁剪圖片
廢話不多說,直接上程式碼 核心程式碼: /** * 跳轉到系統裁剪圖片頁面 * @param imagePath 需要裁剪的圖片路徑 */ private void cropPic(String imagePath) { File file =
(複習)android 呼叫系統相機 相簿 裁剪-圖片上傳-客服端-伺服器
效果: 客服端程式碼: package com.cn.lxz.zhaopian; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat;
解決華為手機呼叫系統相簿返回值是null的問題
在開發專案中需要呼叫系統相簿,在別的android 手機上能正常的獲取到返回值,但是在華為上卻是返回值為null,下面請看程式碼 Intent imgIntent = new Intent(Inte
解決Android7.0系統 呼叫系統相機、系統播放器播放視訊、切圖相容問題,報異常android.os.FileUriExposedException
Android7.0以前獲取本地檔案uri用的Uri.fromFile(new File(filePath)); 後會得到一個file://,這種方式呢7.0及以後的系統版本就用不了,且會報一個異常:
呼叫系統裁切 com.android.camera.action.CROP 如何才能橫屏裁切呢?
現在拍照後,進入了裁切功能,固定比例是:長寬(2:1) 考慮到拍照時,是橫屏拍照的,裁切的時候也能要是橫屏裁切,但是目前就是一直不能橫屏裁切,只能是豎屏裁切。 以下是程式碼: Intent intent = MiniPic.other_getCropImageIn
Android com.android.camera.action.CROP 裁剪圖片的問題
大部分如果遇到這個方法 設定引數 然後裁切都很正常 但是在單張圖片裁切小圖的時候 當裁切的圖片尺寸別預設的大小小的時候會有黑邊 怎麼解決呢? Intent intent = new Intent("com.android.camera.action.CROP"); int
小米華為某些機型存在, Home 鍵讓 APP 後臺執行, 重新開啟 APP 導致重啟的解決方案
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if ((getIntent().getFlags() &a
呼叫系統相機和相簿,並且裁剪成圓形圖片(解決6.0,7.0,8.0版本問題)
之前寫過一篇部落格,那篇部落格對7.0手機裁剪圖片的問題沒有進行解決,現在對之前的那篇部落格進行補充,解決了Android6.0,7.0,8.0版本問題,不僅可以呼叫相簿,相機,還可以將圖片儲存到本地,並且裁剪成圓形圖片 必要的許可權: <uses-permissi
ios ipad裡面呼叫系統相簿圖片不完整解決方法
專案裡面用到了系統相簿,在手機裡面取出來是完整的,但是在pad裡面取出來就是不完整,只是取到左上角的一部分,開始查資料,最後的解決辦法是,在調UIImagePickerController這個類時將這個控制器橫屏,就可以取到完整的圖片了; 我是在類別裡面做
Android拍照及圖片裁剪、呼叫系統相簿(相容6.0以上許可權處理及7.0以上檔案管理)
前言: 最近工作修改較舊的專案時,涉及到了圖片相關功能 ,在使用安卓6.0手機及7.1手機拍照時,遇到了因許可權及檔案管理導致程式崩潰等問題。 剛好把功能修改完,把程式碼簡單地貼一下,方便以後使用。 本文demo包含以下要點: Android6.0執
使用Android系統呼叫裁剪圖片並儲存
順序:開啟圖片--->獲取圖片Uri或者Bitmap--->開啟系統裁剪框--->獲得裁剪後的圖片的Uri或者Bitmap。1.單純開啟相簿選擇圖片Intent intent = ne
Android呼叫系統圖庫和相機獲取圖片並裁剪
最近用到從系統圖庫和相機獲取圖片並裁剪當頭像,根據郭霖大神的第一行程式碼呼叫相機和圖冊,來進行擴充套件和總結。 1、獲取許可權 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORA
小米MIUI Google Play “出現發生錯誤497 系統無法下載”的解決方案
Google ,baidu了一圈發現能解決此問題的答案几乎沒有,現解決如下: 1,時間時區:修改時區為 紐約,語言:修改為 英文(據說也可以修改為時區香港,語言繁體); 2,關鍵一步:關掉小米內建的迅
解決安卓7.0系統裁剪圖片出錯問題
Android7.0中為了提高私有檔案的安全性,對file:// Uri 型別的Uri做出了限制,導致一些APP的功能無法正常使用。前幾天的一個頭像裁剪問題被提上了日程,開始只是修改了拍照的Uri,忘記了還要裁剪,因為直接使用的系統裁剪導致裁剪出了問題。下面
android呼叫系統圖片剪裁,相容小米
public void cropPhoto(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*
安卓圖片操作(呼叫系統相機,預覽本地照片,呼叫系統裁剪圖片,壓縮圖片,中心裁剪方形圖片,bitmap轉byte[])
先建立照片儲存uri public static Uri createImagePathUri(Context context) { Uri imageFilePath = null; String status = Environment.g
Android MIUI系統呼叫拍照後不返回當前activity如何解決
在實際應用過程中,由於需要插入圖片,所以要支援利用攝像頭拍照和從相簿中的相簿選擇圖片的功能。從相簿選圖沒有任何問題,但是拍照的時候,在小米的miui系統下就出現了其他機型沒有出現的bug。我們先來看程式碼,先寫呼叫camera的程式碼: camera_picname=
android 7.0以上共享檔案(解決呼叫系統照相和圖片剪切出現的FileUriExposedException崩潰問題)
在android7.0開始試共享“file://”URI 將會導致引發 FileUriExposedException。 如果應用需要與其他應用共享私有檔案,則應該使用 FileProvider, FileProvider的 getUriForFile() 方法可以