發表文章

目前顯示的是 四月, 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 功能,注意PackageManager.FEATURE_…

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

圖片
這幾天在為之前開發的 App 改版,修改完後在裝置上測試時,咦? 怎麼一啟動就出現錯誤? 看了一下 Log 是 AdMob 函式庫裡的 AdView 出現 NoClassDefFoundError 錯誤...怪了,我根本沒動到 AdMob 相關的程式碼啊?

查了一下發現原來是 ADT 17 有修改函式庫引用方式,解法有以下兩種:
方法1: 在專案目錄下建一個 libs 資料夾,然後將你用到的第三方函式庫 (.jar) 放在裡面
方法2: 在專案 Properties -> Java Build Path -> Order and Export 裡勾選你用到的第三方函式庫


重新編譯、執行,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/