發表文章

目前顯示的是有「android」標籤的文章

adb not responding/unable to detect adb version Syntax error - Android Studio on ubuntu

圖片
 當你運行 Android studio debug app 出現下面的錯誤 當你在啟動  Android Device Monitor 出現下面的錯誤 請下載使用舊版本的 platform-tools 就好了........ (無言) 參考: stackoverflow: android studio adb Syntax error: “)” unexpected

Fragment 迷航記

最近為了 "吹哨找手機" 的其中一個 bug issue,好幾天睡眠不足,每天挑燈夜戰,查遍各大論壇,雖然釐清了不少觀念,但是還是解不出來。 問題是這樣,當這 app 被 android 回收後,再重新執行會出現 ANR crash,檢查 log 會發現 No view found for id (:packageName) 之類的錯誤,雖然在上架前我用其它方法躲過 ANR,可是顯示上還是有異常。 整個佈局是 PreferenceActivity 鑲嵌 PreferenceFragment,就在剛才翻了翻 google api,才驚覺原來 Fragment 在鑲嵌進 Activity 時,有兩種方式,其一是以前用過的 getFragmentManager().beginTransaction().replace(R.id.query_container,new PrefsFragment()).commit(),另一種是用 xml 方式套入 fragment。 在 AS 開新專案時使用的是 SettingActivity 範本,預設是用 xml 嵌套的,但是原始範例是兩層的設定頁面,看不是很懂,所以改成以往的 getFragmentManager().beginTransaction().replace(R.id.query_container,new PrefsFragment()).commit() 方式在套入,但是原本範例內的 xml 嵌套仍然保留,所以才會在 android 回收 Activity 後,出現 ANR 錯誤。 解決方法就是把自作聰明的 getFragmentManager().beginTransaction().replace(R.id.query_container,new PrefsFragment()).commit() 拿掉就好了。 為了這一行失去了好幾個晚上的睡眠,天呀。 話說我還是比較喜歡從實作中學習整個概念或使用方法,要我去翻 api 再逐一驗證,要嘛是睡著,整個學習沒有衝勁看不到成果,要嘛就是放棄的早。 雖然這樣的學習方式跌跌撞撞,但也會慢慢建立起自己對這 api 的世界觀,我果然是實作派的。 ---------------------------------------...

吹哨找手機

圖片
吹哨找手機 (WhistleWakeUp) 是不是跟我一樣,手機隨手亂放,櫃子裡、枕頭下、棉被裡、包包裡,翻遍了可能出現的地方就是找不到! 老婆、小孩不給你玩手機,把手機藏起來! 不喜歡手機鈴聲響起吵到人,常常設定靜音。 沒有開啟網路、沒有啟動 Google android 裝置管理員功能。 這時候多希望呼喊手機,讓手機自己跳出來說 "我在這裡! 我在這裡!" [特色]  1. 定時重置哨音計數,避免在不適當場合喚醒手機  2. 設定哨音長短目標值,掌控喚醒手機難易程度  3. 調整喚醒音量,建議同預設最大音量,以利找尋手機  4. 喚醒音效重複撥放設定,若關閉循環撥放,在播放完畢時會重啟哨音偵測服務  5. 選取提醒音效  6. 開啟服務, 離開設定頁面即開啟  7. 開機自動開啟服務 (參考 Q&A: Q6)  8. 通話時服務自動停止  9. 螢幕開啟自動停止提醒音樂 *10. 哨音偵測敏感度設定 *11. 螢幕關閉啟動哨音偵測服務 *12. 手機靜置3~6分鐘後觸發哨音偵測服務,手機翻轉移動則終止哨音偵測 註: "*" 表示吹哨找手機 Pro 版本獨有 請先下載免費版評估使用,體驗功能後確定合用再購買 Pro [如何使用] 下載後開啟 app 設定、選取音樂,系統裡授權吹哨找手機自啟動服務,把手機藏起來 (option),吹吹口哨即可 [如何停止喚醒後的音樂] 全版本均可透過點選系統提醒訊息,或是開啟設定頁面或是螢幕開啟即自動停止提醒音樂 [問與答] Q1: 不會吹口哨怎麼辦? 任何高頻聲音均可以取代口哨,例如小孩的哭鬧聲、笛音壺煮開的聲音、哨子聲、垃圾車音樂...etc Q2: 口哨聲太小,手機聽不到? 請用替代音源或是麥克風擴大效果 XD Q3: 過度吵雜的環境,手機偵測哨音能力? 安靜的使用環境有助於手機的尋獲 Q4: 手機經常誤判亂響怎麼辦? 1. 重置哨音計數設定重置秒數縮短 2. 哨音長短設定提高 Q5: 會不會很耗電? 手機隨時要注意聽哨音,是需要點精力的,或是購買 "吹哨找手機 Pro" 作節電設定的調整 不過維持良好的充電習慣是必要的. Q6: 重...

陽光空氣水

圖片
陽光‧空氣‧水 有鑑於現代人關心週遭環境議題,加上 PM 2.5 議題發酵,當時遂此空氣污染指數為目標進行開發。開發途中思考如何豐富 app 內容,市面上相似的產品,都是整合 gps 或是使用者自行設定、查詢特定地點再顯示單一數據,更進一步設計主動通知,甚至是 widget,但是不想要過於複雜的操作、設定,兼且此種環境因素絕對不是只有單一觀測站才有數據,環境因子一定是範圍性的擴散、影響著使用者當下的感受,所以搭配 google map,圖形顯示全島各項指標,相信人類大腦的綜合判斷能力,必能從簡單圖形顯示得到使用者所需資訊。 賞圖吧! ---------------- App 商品說明 陽光、空氣、水,生命的三大要素。 提供台灣紫外線指數、空氣品質、累積雨量等環境監測數據。 陽光: 紫外線即時監測 空氣; 空氣品質監測,PSI、PM2.5、PM10、SO2、CO、NO2、O3等監測指標 水: 累積雨量監測 市面上常見的 app,經常以資料查詢的方式,提供矩陣式的資料呈現, 輔以手機主動式提醒等功能。 此 app 簡化操作步驟,隱藏不必要資訊,一眼望盡台灣各項監測數據。 秀才不出門,能知天下事。 點開 app,哪裡下雨、空氣品質不佳、大太陽一目瞭然。 再套句柴静《穹顶之下》的話:我不是多怕死,我是不想這麼活。 住在台灣的您,可以不下載這個 app,可是您一定要看看台灣這寶島怎麼了。 我們一起來關心台灣吧! ---------------- 改版記錄 1.0 初版 1.1 修正 JSON 格式改變造成紫外線指數讀取異常 2015/12/2 1.2 因應行政院環保署全部阻擋 android 平台存取的相應措施 2015/12/3 1.3 因應行政院環保署開放平台修改服務網址 2016/9/7 1.4 配合行政院環保署開放平台政策,開放資料的取得改為登記制 bug fixed

windows 瀏覽特定網頁正常顯示,手機瀏覽卻出 404 Error Page

遇到大麻煩,有誰可以給點想法的。 問題敘述: 是關於抓取行政院環保署開放資料的異常,先前寫的一個 app 陽光空氣水 ,想藉由 app 呈現在台灣的一些環境指標,自從前幾個禮拜環保署的資料出現負載過高的問題後,經過環保署的努力,據說服務已恢復,但是從此之後 app 就抓不到資料了,出現 404: Not found 的錯誤。 詭異的是在電腦的瀏覽器確實可以正常顯示,可是一換到手機,不過是手機瀏覽網頁或是 app 透過 HttpUrlConnection、Volley 都是 404。 網路上這討論很少,高度相關的就以下這兩個 下载图片404,但是浏览器可以正常打开显示 404 when accessing Tomcat with HttpUrlConnection, 200 from browser 但是都無解,試過多款手機仍是一樣的問題,目前暫定問題是在 Server side,也許行政院環保署開放資料平台真的是 Tomcat,也許真的是 Tomcat 的問題,很多的也許,但仍無法解決我的問題。 --------------------------------------------------------- 2015/12/01 回覆 看來需要好好了解網頁開發怎麼玩了;經過多日的追查及驗證後,確認問題是開放資料庫的網頁問題,但是我非常不開心,因為開放資料庫將 android 的網頁存取權限封鎖了,意思是只要透過 android 到行政院環保署的網頁及子網頁,都會得到 404:Not found 的錯誤網頁。 有興趣的可以試試看,在手機上用 Chrome 瀏覽 紫外線即時監測資料 會出現 404 - 找不到檔案或目錄。 只要切換到電腦版網站就可以正常瀏覽。 這是透過 html request header User-Agent string,得知 request device 是什麼設備,藉此讓網頁做出客製化的對應。而行政院環保署開放平台將所有 android device 全部封鎖。 這樣的差別待遇讓我很不開心,站在行政院環保署的立場,我找不到理由說服自己,開放資料庫的立意不就是"開放",如今封鎖特定裝置是什麼意思? 所以接下來就是保存證據,問問行政院環保署理由是什麼,再來跟大家報告。 ...

RxJava 顛覆傳統

11/11 看完  给 Android 开发者的 RxJava 详解 ,我想是沒辦法寫的比這篇好的。直接看吧! 11/12 看到一篇手把手教的 slide 推薦大家看, Reactive X 响应式编程 。 這篇最後以瑪莉兄弟的遊戲製作來教學,真是太有感了。 11/13 那些年我们错过的响应式编程  這篇還不錯,可是最後幾段沒有很了解,有時間在反覆咀嚼。 RxJava 原始碼解析系列文章 谜之RxJava (一) —— 最基本的观察者模式 谜之RxJava (二) —— Magic Lift 迷之RxJava (三)—— 线程切换 迷之RxJava(四)—— Retrofit和RxJava的基情 我都是看這邊介紹的文章逐篇看,慢慢體會 RxJava 的強大,相信自己一定會學會,就看吧! Awesome-RxJava

Proguard 程式碼混淆

踏入 Android 開發,雖然早已注意到 proguard 這阻止反編譯的混淆程式碼的作法,可是一點也不擔心有人將自己的 apk 反編譯,因為真的沒什麼好看的,看了還浪費時間。 XD 不過倒是擔心被看到寫那麼爛的 Code,所以還是稍作些了解 proguard 的用法。 Step 1: 打開 app.gradle  (專案目錄下 app 裡的 build.gradle) 預設 buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile ( 'proguard-android.txt' ), 'proguard-rules.pro' } } 將 minifyEnabled false 改成 true,表示啟用 proguard proguard-android.txt 是預設的混淆文件,路徑在 ${sdk.dir}/tools/proguard/proguard-android.txt proguard-rules.pro 是在專案目錄下 app 裡,用來設定那些檔案不要混淆的一些設定。 詳細語法可以參考下方連結或是問問 google 大神,這邊就不占版面了。 proguard-rules.pro 裡面常用的 class 就不要混淆了,以免因混淆後找不到相應的 class,造成編譯異常。 以下是常用的 -keep public class * extends Android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.Back...

Android M run-time permissions request

圖片
首次在 Google Play Developer Console 看到 "當機與ANR" 有一筆 Exception 出現 訊息如下 java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity clip={text/uri-list U:file:///storage/emulated/0/Pictures/Temp/temp.png} (has extras) } from ProcessRecord{82c52a4 13909:tools.sporting.com.pictranslate/u0a36} (pid=13909, uid=10036) with revoked permission android.permission.CAMERA Google 大神說從 Android M 以上版本的權限取得有改變。 除了以往 mainifests 要求的權限外,在執行時期還要確認使用者是否允許權限使用, 使用者不允許的話還要說明權限需求的原因。 那些權限須要特別注意呢?   Android 6.0 新增的權限模式 - 執行時要求權限 (Runtime Permissions) ----------------- 後記 手邊沒有Android M的手機可以測試,昨天改的版本是否可正常運作在 Android M以上版本有待確認。 看完 Issue 188073 的討論後,我的理解是以往透過 intent 去使用系統的 MediaStore.ACTION_IMAGE_CAPTURE、MediaStore.ACTION_VIDEO_CAPTURE、Intent.ACTION_CALL 是不須要在 mainifests 宣告權限,可是在這 Android M 以上版本的政策實施後,除了原始 app 須要宣告權限,還要在呼叫 intent 時確認權限的取得,到下一個 camera app 後,會...

譯圖文

圖片
譯圖文 還記得沒多久前,前一篇 OCR and translate online (trial)  寫到要精緻化後上架, 提供給大家使用。雖然在 Google translate 打擊之下,一度想放棄上架, 不過既然都寫完了,就花點時間重新打包,視使用狀況看是要繼續擴充下去, 或是就到此為止吧。 既然是 app 網誌,總不能請大家連到前一個網頁看介紹,所以還是重新打一下介紹。 -------------------------------------- 使用情境: 手機瀏覽網頁,想查英文單字或是走在路上看到想查的英文單字。 懶得背起單字、輸入到手機查詢時,可藉由手機相機拍照或是手機螢幕截圖, 透過該 app 進行文字識別後即時翻譯。 重新發佈 app 截圖: 手機正在瀏覽 BBC ,想整段翻譯 直接截取螢幕畫面 app 主畫面,用大圖示及引導方式一步步完成使用 應該很顯而易見吧! 拍照載入或是讀取檔案載入 載入圖片 選擇左下角的截圖按鈕,用拖拉方式進行截圖 截圖結果 點選右下角Next進行文字辨識及翻譯,注意須連網才有翻譯功能,否則只能進行文字辨識 -------------------------------------- v3.0 擴充畫面 後續擴充說明: 目前僅支前圖檔中英文文字辨識,即時翻譯繁體中文。 將來視 app 使用狀況擴充文字辨識的語言及翻譯的目標語言 2015/11/09 v2.0 增加 Android M 以上版本執行期間 Camera 權限請求 2015/11/26 v3.0 增加多國語言翻譯功能  2017/05/26 v4.0 update Translation API -------------------------------------- 載點: 譯圖文

OCR and translate online (trial)

圖片
OCR and translate online (trial)  各位看官有沒有這種經驗, 用手機看些網頁. 看到一些不懂的英文字, 想要查看看是什麼意思, 偏偏該死的網頁又將複製功能鎖起來, 只能用那小小的腦袋將單字背起來,再跳到其它的 app 或網頁查單字,  可是哥的腦袋不好使呀,常背了前面忘了後面,總是在兩個不同 app 切來切去。 不要叫哥先寫下來再查或是拿字典書來查,哥就想把手指頭黏在螢幕上呀。 寫了下面這支 app,也解決了哥的問題。 用上了 OCR 文字辨識及線上即時翻譯功能。 不多說,看說明 這是哥平常在看的網頁 (其實是為了 Demo) OCRTest 名字取得這麼不專業,就知道 UI 慘不忍睹 Camera : 拍照功能,生活中看到招牌或 DM 上艱澀的英文單字,就把它拍下來 Picture :  載入手機圖片 Crop : 將載入的圖片截圖,去除不必要的圖案或字樣,以免文字辨識沒有用的怪字 OCR : 文字辨識 Translate : 線上即時翻譯 (這邊用上 Microsoft Marketplace Azure :  Microsoft Translator  2,000,000 bytes/month is free) 預覽畫面 Crop 截圖 截圖預覽 OCR 文字辨識 Translate 線上即時翻譯 就是懶惰 ~ ~ ~ ---------------------------------------------------- 2015-10-13 update So sad... 發現 google translate 也有作這功能,當然是更好。 還有 Word Lens 即時翻譯、離線翻譯各國語言。 本想更精緻化這 app 後上架的念頭,一下就消滅了。 那來檢討一下這 app 開發過程得到什麼好了。 1. 如何載入其他人開發的 lib 2. 文字辨識的可能性 3. 加深對 intent 理解 4. Microsoft cloud platform 的使用

協尋毛小孩

圖片
協尋毛小孩 焦急的失主,無助的毛小孩 需要各位的協助,找到回家的路。 遺失的毛小孩,也許就在你我身邊。 使用行政院農委會提供的開放資料平台, 建置人性化查詢介面,期許更多的開放資料,創造友善社會。 -------------------------------------- PS. 可惜行政院農委會並未提供毛小孩圖片,單靠文字還是很難去協助找尋。 後記: Version 1.4.0.3 毛小孩圖片轉至寵物管理資訊平台動態載入 (應該更早想到這方法的... 慚愧) 2015/4/28 1.4.0.2 修復 bug 2015/11/4 1.4.0.3 1. 加強使用者體驗,移除插頁廣告 2. 參考寵物登記管理資訊網資料載入遺失寵物圖片 3. 聯絡失主電話、email 快速撥號及發信 -------------------------------------- 載點: 協尋毛小孩

三維測量儀

圖片
三維測量儀 (3D Measure) 這不是第一支開發的 app,但是是第一支打算加入google 開發商收費機制的 app。 下面就簡略說明一下 app 的來歷。 構想來自日常生活所需工具,透過現代人手機不離身的特性,發展 app,方便自己方便別人。 出門在外,怎麼可以不帶尺。 過紅綠燈時想量一下這段馬路有多長,用百米速度來不來的及? 走到戶外,看到新光三越想量一下到底有多高,google、wiki 一下都不如自己實際測量的爽度夠。 既然都能量測距離、高度,那為何不能測量寬度。 就是不想要拿個尺跑過去量,就是東西遠遠的只看的到摸不到,就是東西大到沒辦法量,就是不需要很準,想偷偷量一下對面美眉有多高,但是靠直覺也太不科學,太不帥氣了。 來來來,這款 app 就是你要的。 All is free,除了廣告之外,目前還沒有看到能免費量測"寬度"的手機 app,下載就賺到啦。 話不多說,先上圖。 下圖為操作介面說明 量測距離最簡單,設定好高度,點一下快門即可 量測高度,先對準目標物底部,按下快門,慢慢將手機移至目標物高點,鬆開快門即可。 量測高度,先對準目標物最左邊底部,按下快門,慢慢將手機移至目標物最右側底部,鬆開快門。 PS. 量測準確度依據手機持有高度設定、手持的穩定度、感測器的準確性而有所不同,建議多練習幾次,掌握手勢、姿勢及手持的高度為佳。 ---------------------------------- App 商品說明 【三維測量儀】一款遠距離量測工具。 可用來估算與被測物間的距離及被測物的高度、寬度。 量測前準備: 1. 設定手持裝置與被測物水平面的高度,若是測量人員與被測物在同一水平面,可用身高減15公分 (手持裝置頂點約略在鼻頭前方) 作為估算。 2. 設定欲量測的模式,高度或是寬度。 3. 將準星對準被測物與水平面接點,例如欲測量美女的高度,請將準星對準鞋底。 量測方式: 1. 距離,對準被測物水平面接點後,點擊一下圓鈕即可 2. 高度,對準被測物水平面接點後,按住圓鈕不放,緩慢上下旋轉手持裝置,將準星對準被測物頂點後放開圓鈕即可。 3. 寬度,對準被測物水平面最左方接點後,按住圓鈕不放,緩慢轉動腰身,將準星對準...