1. 程式人生 > >Cordova PluginPicture關於紅米及三星Note3拍照問題...

Cordova PluginPicture關於紅米及三星Note3拍照問題...

是時候開始寫第一篇微博了...

近期在開發hybrid app發現在紅米和三星Note3上面,呼叫拍照外掛,拍完照會系統崩潰..

debug發現,拍完照以後takePicture()方法對於系統拍照後返回結果的處理processResultFromCamera()方法內imageUri變成了Null...

之前有對紅米拍照會崩潰的bug進行猜測...

下面引用一下飄易的BOLG ==> http://www.piaoyi.org/mobile-app/Android-MIUI-BUG-photo-activity.html

  飄易的猜測是:由於紅米miui深度定製了android系統,並且紅米是整個小米系裡最低端的入門機,在硬體效能上縮減嚴重。大白話就是修改了過多的模組而又沒有考慮周全產生的bug。當系統呼叫拍照程式時,系統認為當前的記憶體還夠用,activity不會被銷燬,所以沒有執行 onSaveInstanceState方法。但是拍照程式真正啟用後,系統發現記憶體不夠用了,即將OOM,就銷燬了處於onPause或onStop的activity。這個銷燬系統不會通知你,系統偷偷地幹了這件事。

     

因為Picture類繼承了CordovaPlugin.在CordovaPlugin裡面找到了onSaveInstanceState()和onRestoreStateForActivityResult().重寫方法,使用bundle.putParcelable對imageUri進行儲存...在onRestoreStateForActivityResult拿取,.把結果設定為 全域性變數....

<span style="white-space:pre">	</span>
        @Override
	public Bundle onSaveInstanceState() {
		Bundle savedInstanceState = new Bundle();
		savedInstanceState.putParcelable("imageUri", imageUri);
		return savedInstanceState;

	}
	
	@Override
	public void onRestoreStateForActivityResult(Bundle state, CallbackContext callbackContext) {
		super.onRestoreStateForActivityResult(state, callbackContext);
		imageUri = (Uri) state.getParcelable("imageUri");
	}


最後,解決了紅米,三星Note3拍照會崩的問題...

但是,三星Note3拍照為什麼還會轉屏啊...明明我都已經設定了android:screenOrientation="portrait"和android:configChanges="orientation|keyboardHidden|screenSize".........