1. 程式人生 > >解決小米miui系統呼叫系統裁剪圖片功能camera.action.CROP後崩潰或重新開啟app的問題

解決小米miui系統呼叫系統裁剪圖片功能camera.action.CROP後崩潰或重新開啟app的問題

選擇相簿圖片(或呼叫MediaStore.ACTION_IMAGE_CAPTURE拍照),然後裁剪。在其他系統上都測試正常,但是在小米上出現了問題。小米2s上,裁剪後點擊確定直接卡死系統;小米3上,裁剪後點擊確定直接回到主介面,相當於重新開啟app。就是說,裁剪後,無法響應onActivityResult(),裁剪方法如下:

  1. /** 
  2.  * 裁剪圖片 
  3.  */
  4. privatevoid startPhotoZoom(Uri uri, int size) {  
  5.     Intent intent = new Intent("com.android.camera.action.CROP");  
  6.     intent.setDataAndType(uri, "image/*");  
  7.     // crop為true是設定在開啟的intent中設定顯示的view可以剪裁
  8.     intent.putExtra("crop""true");  
  9.     // aspectX aspectY 是寬高的比例
  10.     intent.putExtra("aspectX"1);  
  11.     intent.putExtra("aspectY"1);  
  12.     // outputX,outputY 是剪裁圖片的寬高
  13.     intent.putExtra("outputX", size);  
  14.     intent.putExtra("outputY"
    , size);  
  15.     intent.putExtra("return-data"true);          
  16.     startActivityForResult(intent, PHOTO_REQUEST_CUT);  
  17. }  

上述方法中,裁剪後的圖片通過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相當於一個轉換的中介軟體。

  1. /** 
  2.  * 裁剪圖片 
  3.  */
  4. privatevoid startPhotoZoom(Uri uri, int size) {  
  5.     Intent intent = new Intent("com.android.camera.action.CROP");  
  6.     intent.setDataAndType(uri, "image/*");  
  7.     // crop為true是設定在開啟的intent中設定顯示的view可以剪裁
  8.     intent.putExtra("crop""true");  
  9.     // aspectX aspectY 是寬高的比例
  10.     intent.putExtra("aspectX"1);  
  11.     intent.putExtra("aspectY"1);  
  12.     // outputX,outputY 是剪裁圖片的寬高
  13.     intent.putExtra("outputX", size);  
  14.     intent.putExtra("outputY", size);  
  15.     /**  
  16.      * 此方法返回的圖片只能是小圖片(sumsang測試為高寬160px的圖片)  
  17.      * 故將圖片儲存在Uri中,呼叫時將Uri轉換為Bitmap,此方法還可解決miui系統不能return data的問題  
  18.      */  
  19.     //intent.putExtra("return-data", true);      
  20.     //uritempFile為Uri類變數,例項化uritempFile
  21.     uritempFile = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg");  
  22.     intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);  
  23.     intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());  
  24.     startActivityForResult(intent, PHOTO_REQUEST_CUT);  
  25. }  

然後在onActivityResult()中處理:
  1. /** 
  2.  * 處理返回結果 
  3.  */
  4. @Override
  5. protectedvoid onActivityResult(int requestCode, int resultCode, Intent data) {  
  6.     // TODO Auto-generated method stub
  7.     case PHOTO_REQUEST_CUT:   
  8.         //將Uri圖片轉換為Bitmap
  9.         Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));  
  10.  //TODO,將裁剪的bitmap顯示在imageview控制元件上
  11.         break;  
  12.     }  
  13.     super.onActivityResult(requestCode, resultCode, data);  
  14. }  

相關推薦

解決小米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() 方法可以