跳到主要內容

發表文章

目前顯示的是 2012的文章

Google Play 出現 [RPC:S-5:AEC-0] 錯誤

今天終於等到 Android 4.2 OTA 更新,不過升級完後開啟 Google Play 下載 App 時卻出現下面這個錯誤。 Update for "***" could not be downloaded due to an error. (Error retrieving information from server. [RPC:S-5:AEC-0]) 查了一下,解決步驟如下: 1.到"設定"(Settings) -> "帳戶"(ACCOUNTS) -> "Google" -> 選擇你的帳戶 -> 按右上角的 Menu 選擇"移除帳戶"(Remove account) 2.重開機 Reboot your device. 3.再回到"設定"(Settings) -> "帳戶"(ACCOUNTS) -> "+ 新增帳戶"(+ Add account) -> "Google",然後重新輸入你的帳戶資料即可。

解決 NetworkOnMainThreadException 的問題

好一陣子沒寫網路相關的程式了,最近有個專案剛好有連網的需求。好吧,把以前的程式拿出來用,但發現在 Android 2.3 的裝置運行正常,在 Android 4.0 的裝置就會出現 NetworkOnMainThreadException 這個錯誤。查了一下原來從 Android 3.0 開始,Thread Policy 加強了限制,只要嘗試在主執行緒中進行網路操作,就會產生這個錯誤。 解決方式有幾個: 1. 把網路操作從主執行緒中移走,你可以自己再開一個 Thread,或使用 AsyncTask 來執行。 2.在 onCreate() 中加入下列程式,透過 StrictMode 重新設定 ThreadPolicy。 if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); } 3.把 AndroidManifest 中的 android:targetSdkVersion 設定成 9,也可以暫時解決,但不建議。 最好的方式還是第一種,能避免耗時的網路操作阻礙主執行緒工作,或產生 ANR 錯誤,我想這也是設計此例外的原因。

《News》慶祝 App 下載達 250 億次,Google Play 限時特價再度展開!

還記得 2011 年底,Android Market 為慶祝 App 下載量突破 100 億次所舉辦的 $0.10 特賣會嗎? 不知道那時大家買了多少特價軟體? 而不到一年後的今天,Google 宣布 App 下載量已達到突破倍數成長的 250 億次。為了慶祝這個里程碑,在接下來的 5 天除了將提供 $0.25 的軟體特賣之外,電影、書籍、音樂等也有特價供應,你現在應該能在 Google Play 中看到相關活動。 當然,拜偉大的政府所賜,台灣的朋友們想買還是得動點手腳囉。 Day1特價軟體: http://www.androidpolice.com/2012/09/26/here-are-some-of-the-0-25-google-play-25-billion-promotion-apps-so-far-today-92612/ Day2特價軟體: http://www.androidpolice.com/2012/09/27/here-are-the-0-25-google-play-25-billion-promotions-for-day-2/ Day3特價軟體: http://www.androidpolice.com/2012/09/28/here-are-the-0-25-apps-and-games-for-day-3-of-the-play-stores-25-billion-downloads-promotion/ Day4特價軟體: http://www.androidpolice.com/2012/09/29/here-are-the-0-25-apps-and-games-for-day-4-of-the-play-stores-25-billion-downloads-promotion/ Day5特價軟體: http://www.androidpolice.com/2012/09/30/here-are-the-0-25-apps-and-games-for-the-final-day-of-the-play-stores-25-billion-downloads-promotion-horn-dark-knight-rises-nova-prime-and-more/...

在 Android 中使用 Jaudiotagger 的注意事項

在開發  AudioTagFixer  時,使用了  Jaudiotagger  這個第三方函式庫。它主要是用來做音樂檔標籤的存取與修改,並且支援多種音樂檔與標籤格式。使用上很簡單,只要把 Jaudiotagger 的 JAR 加進你的專案,再參考它的程式範例來操作即可。 不過測試時卻發現一個怪問題,在 Android 2.1 以下的裝置運作時,取得的標籤前面都會多出 ��,當然存檔也就有問題。而在 Android 2.2 以上就一切正常,一開始搞不清楚為什麼,只好暫時把 App 的 minSdkVersion 設成 8,以避免出錯。 直到最近才發現似乎是某些 Android 的 Bug 所導致,而 Jaudiotagger 則提供了一個設定: TagOptionSingleton.getInstance().setAndroid(true); 只要加上這行,就能正確的在 Android 2.1 以下存取音樂檔標籤了。 參考資料: http://stackoverflow.com/questions/5447145/jaudiotagger-and-android-change-a-value-in-an-mp3 http://www.jthink.com/jaudiotagger/maven/apidocs/org/jaudiotagger/tag/TagOptionSingleton.html#setAndroid(boolean)

LevelListDrawable 的使用

在開發  Battery Widget  時,需要在不同電量狀態下顯示對應的圖檔,比如電量 100% 時顯示電池全滿的圖,電量 50% 的時候則顯示半滿的圖。那時很單純的用一堆 if else 來判斷,然後在裡面分別 setImageResource()。當然這樣也不是不行,但看到程式碼裡一堆判斷式,就覺得有點討厭。最近發現原來 Android 早就有替類似的需求設計了 LevelListDrawable,而且是 Since: API Level 1。(我真是太不用功了@@) 用法很簡單,範例如下: 1.首先當然得先準備好不同 Level 的圖檔。 2.在 res/drawable 裡新增一個 battery_level.xml 內容如下: <level-list xmlns:android="http://schemas.android.com/apk/res/android">     <item android:maxLevel="20" android:drawable="@drawable/battery_20" />     <item android:maxLevel="40" android:drawable="@drawable/battery_40" />     <item android:maxLevel="60" android:drawable="@drawable/battery_60" />     <item android:maxLevel="80" android:drawable="@drawable/battery_80" />     <item android:maxLevel="100" android:drawable="@drawable/battery_100" /> </level-list> 可以看出是用 <level-list> 標籤來包 <item>,而每個 <...

《News》Android 4.1 (Jelly Bean) Announced!

Android 4.1 (Jelly Bean) announced at Google I/O 2012, SDK also available for download. For more detail please refer to: http://android-developers.blogspot.tw/2012/06/introducing-android-41-jelly-bean.html http://developer.android.com/about/versions/jelly-bean.html

Eclipse plugin - Sequoyah Android Localization Editor

在 Android 中要支援多國語系是很容易的,只要為不同語系準備好各自的 strings.xml 就可以了,App 執行時就會自動依裝置目前語系去套用對應的 strings.xml。 但如果支援的語系一多,要維護這麼多 xml 也常會手忙腳亂甚至出錯。因此在這邊推薦一個 Eclipse plugin 叫做 Sequoyah Android Localization Editor。( Sequoyah Android 本地化編輯器) 安裝方法如下:  首先在 Eclipse 中選擇 Help -> Install New Software。  Install 視窗中點選 Add。  於 Add Repository 對話框的 Location 輸入 http://download.eclipse.org/sequoyah/updates/2.0/。Name 則可自己取。接著按 OK。  此時應該會出現可安裝項目的列表。(如果沒有出現項目,請將下面的 Group items by category 取消勾選)  於列表中選擇 "Sequoyah Android 本地化編輯器" 然後按 Next。之後就依畫面指示一步一步安裝完畢。 安裝完後只要開啟任何 strings.xml,它就會用一個整合性的編輯表單來取代原本的 xml 文字編輯器(如下圖): 這樣您就可以快速編輯不同語系的文案了,也可以讓你知道哪些文案還沒被翻譯,或幫您新增/刪除項目。自己用了一陣子下來,真的是很方便,推薦給各位!

《App》AudioTagFixer

AudioTagFixer can help you: 1. Edit the tags of your audio files, include Title, Artist, Album, Genre and Track.(Modify Album Art is not yet supported.) 2. Fix the incorrect encoded tags in Traditional Chinese(Big5), Simplified Chinese(GBK), Japanese(Shift_JIS), Korean(EUC-KR) and Russian(CP1215) audio files quickly. 3. Support mp3, mp4, ogg, wma and flac formats.(Please note that although this app can modify tags in wma file, but in fact the Android system does not read them, so you may not be able to see the changes in your music player.) * This app can help you correct garbled, but NOT translate into different languages or conversion of Traditional Chinese and Simplified Chinese. * After you saved the audio file, the list will re-sort according to the new tags. Therefore, the order of the audio file in the list may be changed. * If you need more encoding support, please e-mail to me, thank you. AudioTagFixer 能幫助您: 1. 編輯音樂檔案中的標籤,包含標題、歌手、專輯、類型以及曲目。(修改專輯封面尚未支援。) 2. 快速修正在繁體...

利用 TouchDelegate 設定元件的觸控區域

開始前請先看看  這篇文章 ~ 您是否有同樣的經驗,想點擊 Listview item 中的 Checkbox 時,卻常常意外點到整個 item,而造成預期外的動作? 嚴格來說這好像也不能怪開發者,誰叫預設的 Checkbox 就是那麼小,更不可能怪使用者說你手指怎麼那麼肥...。 但若想保有優良的使用者體驗,這個小細節是可以被解決的。處理的方法有很多種,比如放大 Checkbox 本身的 Drawable 或從 Layout 下手...但由於這樣做可能擠壓到其他的元件,再加上 Checkbox 本身的缺限,讓過程也有些麻煩。 因此我們可以考慮另一個方法,使用 TouchDelegate 來增加元件的觸控響應區域。 程式範例: final View parent = (View) delegate.getParent(); //delegate是想擴大觸控範圍的元件 parent.post( new Runnable() { public void run() { final Rect r = new Rect(); delegate.getHitRect(r); r.top -= 10; //觸控範圍往上增加 r.bottom += 10; //觸控範圍往下增加 r.left -= 10; //觸控範圍往左增加 r.right += 10; //觸控範圍往右增加 parent.setTouchDelegate( new TouchDelegate( r , delegate)); } }); 簡單來說就是透過父容器 setTouchDelegate,以調整觸控響應區域。這樣就不必動到元件本身或 Layout,一來讓元件維持小巧精美,二來又有足夠的響應區域。 參考連結: http://developer.android.com/reference/android/view/TouchDelegate.html http://www.daggie.be/?p=1006 http://android.cyrilmottier.com/?p=574

如何檢測裝置是否有 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/

BlackBerry PlayBook 超冷門開箱

BlackBerry 黑莓手機據說在國外還滿受商務人士歡迎的,國內也有電信商引進,但好像就沒那麼風行。而這台 PlayBook 是 BlackBerry 跨足平板的第一號產品,台灣目前沒有正式上市(不過Y拍買得到)。生在這個平板戰國時代,面對其他陣營的夾擊,BlackBerry 似乎也沒能有好的表現。但相較於 HP 果斷放棄 TouchPad,BlackBerry 似乎還想再努力一下。 至於為何會入手這台呢? 雖然它也是一路降價,但還是引不起我的興趣,不過當 BlackBerry Tablet OS 2.0 宣布支援 Android App 後,事情就變得有趣了些。雖然說支援,API 卻也不是 100% 能用,另外開發者還是必須花點時間重新包裝、簽章並上架至 BlackBerry App World 才行。當 2.0 升級在即,卻僅有少量的開發者願意為其轉換 Android App,這可不是個好消息。因此在 2 月初,BlackBerry 宣布了 Free BlackBerry PlayBook Offer ,只要在限定期間內上架軟體並經審核通過,就能免費得到一台 PlayBook。反正原本就有在開發 Android App 了,就來轉轉看吧,不拿白不拿。 不過要拿這台 PlayBook 也不是一路順遂的,中間來來回回快兩個月,尤其 App 審核以及信件回覆真是有夠慢,APK 轉換工具與上架流程也不是挺好用,真是搞得我很煩ㄚ。以下是處理時間表: 2/6 申請開發者資格 2/8 開發者資格通過 並 提交 App 審核 2/21 App 審核失敗 並 發信給客服詢問 3/1 收到客服回覆 3/2 重新提交 App 審核 3/12 App 審核通過 3/14 填寫送貨地址 3/23 PlayBook 寄出 3/26 提交報關資料給 FedEx 3/27 收到 PlayBook 抱怨了一堆,不過看在免費的份上就算了,來開箱吧~ 廣達代工的 PlayBook,去了趟美國又飛回來 開箱 送的是 16GB Wi-Fi 版,同時附上一張給開發者的感謝函 開盒...

AIDE - 在 Android 裝置上寫 Android App

AIDE - Android Java IDE 你沒看錯! 在 Android 裝置上也能寫 Android App! 自從用了 6 年的筆電掛點之後,手邊一直缺少一個行動開發裝置,雖然目前大部分時間都還是使用桌機開發,但偶有外出需求時就很麻煩,也因此一直在猶豫要不要買台 MacBook。 但現在,AIDE 讓我也能在 Android 裝置上開發 Android App 了。不過可以想見,在純手機或純平板上寫程式應該是一個痛苦的體驗。還好手邊有台 Asus Transformer,只要接上鍵盤就能跟使用筆電開發的感覺接近了。 AIDE下載頁面 https://play.google.com/store/apps/details?id=com.aide.ui AIDE 檔案小、免費、安裝後立刻能使用。而且相容 Eclipse 的專案檔,只要把程式目錄整個搬到 Android 裝置上再用 AIDE 開啟就行了,只能說太神了! 使用畫面: 上半部為程式碼編輯區,下半部可切換為 Logcat 或檔案目錄結構等等。當然也可以把下半部隱藏,讓程式碼全畫面編輯 寫好程式可以直接編譯執行   問你是否要安裝剛寫好的 App 安裝完畢,成功執行 當然,若期望目前 AIDE 能完全取代 Eclipse 絕對還是有差距,不過其基本功能已經具備,可以作為一個輕量或臨時的開發環境。也非常期待其後續發展,讓 Android App 開發更為直覺、方便。 補充: AIDE Team 訪談  http://www.infoq.com/news/2012/03/AIDE

《App》EZ Folder Player

Prefer using folder to manage your music files? Always hard to find the song you want to play in stock music player? This app is for you! EZ Folder Player is an alternative music player based on folder structure. Features: * Simple and easy to use. * Supports Shuffle / Repeat one / Repeat All. * Provides 4x1 and 4x2 widgets. * Support sleep timer. * Color theme select option. * Support 3rd party Equalizer. * Support notification control. * Support lock screen control. (On android 5.0 and above, you need to change your "Sound & Notification" -> "When device is locked" setting to "Show all notification content" or "Hide sensitive notification content".) * Ad-supported, you can purchase an in-app feature to remove ads. How to use: * Browse to your music folder and choose which music file you want to start playing. * You can play all the music within a folder and it's subfolders by clicking the folder icon. * You...