安卓權威指南第三版第16章拍照閃退問題

吳宇發表於2018-10-11

安卓權威指南第三版第16章拍照閃退問題

作為安卓小白,對著工具書去敲程式碼是件痛苦並快樂的事。痛苦,出了問題都得用自己空白的大腦去找bug,啥原理不知道,看著大神們在部落格裡面寫的天書找關鍵找能懂的部分去理解,花的時間和精力很讓我痛苦;快樂,在找出原因並解決的時候是最快樂的。
在這次16章隱式intent的時候出現了拍照閃退的這個問題。找了兩天才找出原因,下面是我的痛苦史:
一開始我以為是我的建立資料夾失敗,於是把程式碼拆開寫以便於除錯。
public File getPhotoFile(Crime crime) {
File filesDir = mContext.getFilesDir();
File files = new File(filesDir, crime.getPhotoFilename());
//files.getParentFile().mkdir();
return files;
}

除錯了半天,不對應該是瞎搞了半天,發現自己的手機沒root,或者是因為其他原因,這個資料夾在手機中是找不到的。(請教大神怎麼才可以找到)
於是繼續百度,關鍵詞:為啥拍照返回時會閃退;結果:有的手機廠家設定了,在呼叫其它activity時,會將上一個關閉,想解決就需要將資料儲存在Bundle中。按照上面的做法還是不行。這個時候我已經很煩了,因為知道用隱式intent開啟相機並儲存圖片本地不是一件複雜的事,而我在這裡浪費了很長時間。
檢查完寫入和讀取沒問題後,想到了書中寫到關閉相機許可權的問題(書還是很嚴謹的= =),**是不是在拍照完成點選確認返回了activity,在onActivityResult()關閉了相機許可權導致應用在還沒讀取到相片就沒有許可權了?**於是
else if (requestCode == REQUEST_PHOTO) {
Uri uri = FileProvider.getUriForFile(getActivity(),
“com.bignerdranch.android.criminalintent.fileprovider”,
mPhotoFile);
//更新試圖
updatePhotoView();
//關閉許可權
getActivity().revokeUriPermission(uri,
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
我將更新試圖和關閉許可權調換了一下執行順序,神奇的是,沒有閃退了,成功了!
但是想了一下,這個地方是關閉寫入的許可權,應該不會有影響的呀,沒想通。
今天之所以會寫這篇文件,想要提醒一下和我一樣剛開始學習的小白,書上的內容不一定是全對的,當出現錯誤的時候,要有去質疑的勇氣,雖然我現在也不知調換這兩個方法位置就成功的原因,但是我想到了這一塊可能有問題,沒有去死板的學習就聽好了。當然無傷大雅,學習之路還得繼續。

安卓權威指南第三版原文

希望各位大神看到這篇文章可以指導一下。新人上路,滴滴。

相關文章