Android7.0及以上相機相簿呼叫閃退處理封裝,向下相容
上一篇博文其實解決過這個問題,但是,博主更希望能夠一行程式碼調起相機和相簿,並且回撥拿到相應的bitmap,於是,在上一篇博文的基礎上,博主又進行了相關優化,並且將相機相簿的呼叫封裝成了一個jar包,讓和博主一樣希望更簡單寫程式碼的諸位能夠更輕鬆的使用相機相簿。註明:該jar包處理了7.0的相機調起異常,向下相容。
在使用方面,只需要四步,就可以輕鬆調起相機相簿,並拿到對應圖片。同時提供方法,讓開發者自行設定是否在API>23以上的手機上,將拍照得到的圖片同步到相簿。(預設是不會同步到相簿的)。
使用場景:當前jar封裝針對的主要場景為:身份證拍攝上傳,退款照片取證等等。
缺點:如果選擇將照片同步到相簿,則第二張拍攝的照片會覆蓋第一張拍攝的照片,也就是在相簿裡你只能看到最後一張拍攝的照片。因為博主在同步的時候使用的是同一個路 徑,而且照片同步在博主的開發中並不常用,沒有找到需要將照片同步的使用場景,所以並沒有對照片同步到相簿做太多的處理,之所以會加入照片同步到相簿,是因為 有朋友提過為什麼拍照的照片在相簿中找不到,但目前博主開發場景中使用時,博主並不需要在相簿中去找剛剛拍攝的照片。
使用過程:
1.匯入jar包
在libs目錄下匯入兩個jar包,一個是support V4包,另一個是博主為大家提供的CGCamera.jar ,下載地址:http://download.csdn.net/download/xiangxiang_8_8/9950235
2.在res目錄下新建一個xml資料夾(如果沒有),在xml資料夾下新建一個filrpath1.xml檔案,該xml檔案的內容為
<resources>
<paths>
<external-path name="cg" path="" />
</paths>
</resources>
3.在manifest.xml檔案中加入以下程式碼:
3.1 許可權
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3.2 provider標籤 (與Activity標籤的注入並列)
<provider
android:name="cn.com.cg.core.camera.CGFileProvider"
android:authorities="cn.com.cg.core.camera.fileprovider"
android:exported="false"
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepath1" />
</provider>
3.3 Activity標籤
<activity android:name="cn.com.cg.core.camera.CameraBridgeActivity"></activity>
4. 在需要調起的相機頁面使用如下方法即刻呼叫其相機和相簿
調起相機:
//Cameralmpl.openCamera(this, this);//預設呼叫相機形式,不會將照片同步到相簿(手機相簿的根目錄)
Cameralmpl.openCamera(this, this,true);//會將照片同步到相簿(手機相簿的根目錄)
調起相簿:
Cameralmpl.openPhotos(this, this);
備註1:調起相機時,博主提供了兩個引數和三個引數的方法,當第三個引數為true時,在API>23的手機上會將拍照得到的照片同步到手機相簿的根目錄上。第三個引數為 false或者不傳時,則預設不將照片同步到相簿。
備註2:在調起相機的Activity頁面,需要實現一個介面TakePhotoSuccess,該介面有個方法,返回一個bitmap提供給當前頁面使用。
怎麼樣,是不是非常方便,記得當時博主相容7.0的相機相簿呼叫也是頭疼了一陣子,現在呼叫起來就非常方便了。
ja包下載地址:http://download.csdn.net/download/xiangxiang_8_8/9950235,裡面包含一個demo和一個jar包。