之前在開發「照照明星臉」的時候,遇到最多問題的部分就在呼叫內部相機來讓使用者拍照,並在拍照後取得照片來做後續處理。小蛙在[Android] 照照明星臉 – 開發心得 @ 過去蛙齋也有提到在處理相機時由於行為模式不同而有所差異,但找了很久卻仍舊找不到問題所在,就在這幾天盛哥開發UShare for Android的時候也恰巧遇到這個問題,於是跟盛哥一起研究這個問題。

小蛙先把事情發生的經過說明清楚,照照明星臉中需要使用到「相機」功能,而最快又方便的方法就是透過MediaStore.ACTION_IMAGE_CAPTURE這種Intent的方式呼叫Android內部相機提供拍照功能(可以不用大費周章自己寫一個相機功能出來),而運作的方式是由主程式以startActivityForResult啟動一個相機Intent,接著在照完相之後在onActivityResult把照片的位置以及一些資訊接收回來做後續處理。(使用的方法小蛙這邊不贅述了,以「MediaStore.ACTION_IMAGE_CAPTURE」當關鍵字就可以google出一堆教學)。

詭異的地方在於startActivityForResult啟動相機到拍完照片都正常,等回到主程式onActivityResult要處理相片時卻發生之前設定的Uri、tmpFile … 等等資料全部都變成null,到相簿中查看相片明明就在,可是卻沒辦法從主程式中得到設定好的相片位置(是null)。上網查了一些資料,使用的方式明明就沒錯,不知道為什麼回來後的資料通通消失。

盛哥跑來找小蛙討論,但盛哥竟然忘了之前小蛙開發明星臉的時候,也問過他一個一模一樣的問題,盛哥才猛然想起並問小蛙最後是怎麼解決的,其實小蛙也不知道是怎麼解決的,也許根本就還沒有解決 … = = … 小蛙跟盛哥把生命周期都印出來,看看運行的狀況,發現在小蛙的Desire下,運作一切正常;但在盛哥的Galaxy I9000上卻會發生主程式運行了onDestory(),也因為這樣才造成所有的資料通通被清空,但兩個人想了很久還是沒有任何結論,只知道I9000做了這件事,卻對於為什麼I9000會做這件事沒有頭緒。

Activity會莫名其妙被摧毀的原因,小蛙的笨腦袋想的到的就是記憶體不足,導致系統砍程式,但盛哥說根本沒裝軟體(開發機),從應用程式頁面進去看到記憶體也還有127MB,顯然問題不在這。

想了很久,小蛙突然想到一個Activity被destory的情況,就是之前在測試以下這幾篇文章的時候:
Android TabHost Without TabActivity
Android TabHost中切換Activity
Android Tabhost with FragmentActivity

雖然很早之前就知道Android在螢幕轉向的時候Activity會歷經一次生死,系統會先將原本的Activity刪除,再新增一個轉換過方向的Activity出來,但是在測試這三篇的時候才知道(遲鈍阿…),原來可以直接透過設定android:configChanges來讓Activity躲過一次生死輪迴(可參考Android Screen Orientation Event螢幕方向處理+Acitivity Liftcycle)。

經過一番測試之後,盛哥已經抱著砍掉重練的想法了,小蛙也想死馬當活馬醫,試試看會不會是因為螢幕轉向的問題造成的,於是拿了I9000仔細查看每個步驟,I9000的相機畫面是「橫的」,包括按鍵及設定介面都是「橫的」,而主程式設定是「直的」,心想會不會是因為這樣子造成的。記得開發明星臉的時候,有「某些」機型無法使用(雖然不完全正常,但相對來說正常些),以及「同機型的某些手機」可以使用,但「同機型的某些手機」卻不能使用(這個極度不正常,可能的原因太多了,包括刷機以及版本)。

跟盛哥說了這個想法之後,反正也沒有什麼其他辦法了,就試試這個方法看看,結果 … 會寫這篇文章,當然就是有結果囉!果然跟小蛙想的一樣,是因為「螢幕轉向」造成這個問題,小蛙找了好久都沒有找到類似的相關文章,希望這篇文章可以幫到一些跟小蛙有著相同問題的開發者!Android碰到的問題常常不只一種原因,但在無計可施的情況下,這方法可以試試看喔!

相關文章

SSL For Free – 免費又有綠色鎖頭的 SSL Certificates

之前聽說 Google 會優先搜尋有 https 的網頁 (參考:
2016-07-07 23:00:54
hans

8

Android Vuforia with jPCT-AE (5) – 多重模型載入,以 obj 為例

要進到這系列最後一篇文章了,這篇文章拖了很久,一直沒有時間整理,結果到最後 ... 程式碼留下來了,記憶卻有些模糊了,這邊小蛙配著程式碼盡可能的把還記得的東西寫下來。
2016-07-06 11:24:19
hans

8

Android Vuforia with jPCT-AE (4) – 載入 3DS 測試

延續 jPCT-AE Loader 載入模型的部份,這篇要記錄載入 3ds 檔案格式的方法,基本上跟前面幾個 obj, md2 的方法差不多,只有一些小小的變化而已。
2016-07-06 10:24:33
hans

8

Android Vuforia with jPCT-AE (3) – 載入 md2 測試

前兩篇介紹如何直接透過 jPCT-AE 直接繪圖以及載入 .obj 檔案,這邊繼續介紹 jPCT-AE 載入 md2 的方法,載入動作大致上類似,唯一不同的只有 texture 設定部份。
2016-07-06 09:24:43
hans

8

Android Vuforia with jPCT-AE (2) – 載入 obj 測試

上一篇 Android Vuforia with jPCT-AE (1) –
2016-07-06 08:24:55
hans

8

Android Vuforia with jPCT-AE (1) – 基本範例

說來慚愧,從 Google Adsense 被 ban 之後,就好久沒有發文了,站上 Vuforia 的文章也已經是好久以前的事情了 (遠目),最近有專案要用到 Vuforia,爬以前的文回來看,蛙哩咧 ... 現在已經更新到 Vu
2016-07-06 07:57:58
hans

8

ClickForce (MobiForce) 當機問題

這真是個浪費時間又漫長的過程,CF 推出新版後台以及新版 SDK 的時候,小蛙就下載來測試,一開始小蛙直接套在「我的股票精算師」上,但只要一套上去就當機 ...
2015-09-02 10:32:51
hans

8

我的股票精算師備份功能

常遇到使用者詢問「我的股票精算師」要怎麼備份,這篇記錄一下,需要寫怎麼備份表示軟體設計上有很大的問題,造成使用者使用上的困難,但小蛙最近沒有時間去做修改 ... 只好委屈精算師的使用者了 ><
2015-02-06 18:32:07
hans

8

第一次從淘寶買小米盒子3

最近阿咕有在大螢幕上看韓劇的需求,剛好搭上 Chromecast 的上市,survey 了一些 Android 電視棒。這篇記錄這幾天的經過。

2015-01-04 23:36:33
hans

8




 回覆

你可以使用以下語法 HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

(required)

(required)

   
© 2012 蛙齋 Suffusion theme by Sayontan Sinha