跳到主要內容

發表文章

目前顯示的是 4月, 2012的文章

如何檢測裝置是否有 Camera?

在做影像處理的應用時,可能會需要用到裝置內的 Camera 來截取影像。而 Android 裝置百百種,不一定每台都有相機,因此如何在沒有相機的裝置上避免程式發生錯誤就是必須考量的。 第一種狀況是當你的應用會上架至 Google Play 商店時,請用 AndroidManifest.xml 中的 <uses-feature> 與 <uses-permission> 標籤宣告會使用 Camera 功能及相關權限: 例如: <uses-feature android:name="android.hardware.camera" /> <uses-permission android:name="android.permission.CAMERA"/> 這樣你的應用程式就不會出現在無 Camera 裝置的 Google Play 商店中,使用者無法下載,自然也就避免了發生錯誤的可能。 第二種狀況是使用者可能從第三方市集或透過其他途徑取得軟體,那就不一定都有完善的篩選機制了,因此你可能必須在程式內部做判斷處理,以避免 Crash。 第三種狀況是 Camera 並非你應用中的主要功能,即使裝置沒有 Camera,還是可以使用其他功能,但使用者介面可能必需做一些調整,比如隱藏呼叫 Camera 的按鍵或是在使用者試圖使用 Camera 相關功能時跳出提示訊息。 而針對狀況二與狀況三,可用的判斷方法如下: PackageManager packageManager = context.getPackageManager(); if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Log.i("camera", "This device has camera!"); } else { Log.i("camera", "This device has no camera!"); } 簡單說就是利用 PackageManager 檢查裝置是否有 Camera 功能,注意...

ADT 17 之後使用第三方函式庫會產生 NoClassDefFoundError 的解法

這幾天在為之前開發的 App 改版,修改完後在裝置上測試時,咦? 怎麼一啟動就出現錯誤? 看了一下 Log 是 AdMob 函式庫裡的 AdView 出現 NoClassDefFoundError 錯誤...怪了,我根本沒動到 AdMob 相關的程式碼啊? 查了一下發現原來是 ADT 17 有修改函式庫引用方式,解法有以下兩種: 方法1: 在專案目錄下建一個 libs 資料夾,然後將你用到的第三方函式庫 (.jar) 放在裡面 方法2: 在專案 Properties -> Java Build Path -> Order and Export 裡勾選你用到的第三方函式庫 方法2示意圖 重新編譯、執行,OK了~ 這個錯誤比較機車的是在編譯時期不會出錯,到執行時才死給你看。只能說 ADT 你好樣的! 參考連結: http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17 http://tools.android.com/recent/dealingwithdependenciesinandroidprojects

LiquidNext 無法於 DDMS 中檢視 File Explorer 的解法

今天終於把手上的 Acer Liquid E 刷成 LiquidNext 1.9.2 (Android 2.3) 了,話說 Liquid 能一路從 1.6 升到 2.3 也真算是物盡其用。刷完整體感覺還不錯,沒啥大問題,不過當打開 Eclipse 的 DDMS 時就發現 File Explorer 空空如也,這在開發 App 時多少會造成點困擾。由於 LiquidNext 是基於 CM7 的 rom,就查查 CM 的 Forum 看有沒有相關的解法。 順利找到辦法並記錄如下: 1. 先開個模擬器,然後將 /system/bin 中的 toolbox 抽出來 2. 將 Liquid 接上電腦,執行 adb remount 3. adb push c:\toolbox /system/bin (c:\ 是你剛抽出來的 toolbox 所放置的路徑 ,請自行修改) 4. adb shell 5. cd /system/bin 6. chmod +x toolbox 7. ln -s toolbox ls 8. exit 9. 重新啟動裝置 再看看 DDMS,目錄結構出現了。打完收工~ 參考連結: http://forum.cyanogenmod.com/topic/30765-solved-ls-command-for-eclipse-file-explorer/