2014年8月20日 星期三

[Android] Clean Master "遊戲"捷徑的圖標是怎做的?

著名的工具軟體Clean Master有一項遊戲加速的功能, 它會放一個捷徑在桌面上, 而它的長得就像是跟資料夾一樣:



之前沒仔細去看它, 一直以為它是個小工具(AppWidget), 但其實它只是個捷徑而已, 點選它會跳出一個透明背景的對話窗, 所以很容易誤以為是桌面上的資料夾(如圖右)


這用了個小技巧, 雖然有點唬人, 但其實不難, 以下就如法炮製一個類似的吧!



在這實驗, 就把Youtube, Google plus, Google map三個app的圖示放一起, 邊框, 麻煩就先省略



利用”com.android.launcher.action.INSTALL_SHORTCUT”這個Intent可以在桌面上創建捷徑, 應該幾乎所有的桌面軟體都有支援, 關鍵點在於這Intent裡會帶的Intent.EXTRA_SHORTCUT_ICON, 這可以帶一個Bitmap來當作這個捷徑的圖示, 沒意外的, 就是從這邊動手


因為我們需要把四個圖示畫到一個上面, 所以每個圖示變成原本的1/4, 因此, 在用BitmapFactory.decodeResource載入圖示時, 可以把sample size設成2(也就是1/4大小), 這樣可以減少一些記憶體的使用, 取得了圖示後就可以把它們畫到另一個新的Bitmap了


要注意的是, 要用INSTALL_SHORTCUT的話, 要在AndroidManifest.xml裡加上:



<uses-permission android:name=”com.android.launcher.permission.INSTALL_SHORTCUT” />



這方法的缺點是, 一旦捷徑被創建好後, 就沒機會改它的圖示了




from Tumblr http://ift.tt/1peFiu7

via IFTTT

2014年8月19日 星期二

[Android] 土製Play store API

認真說的話, 這也算不上啥非官方API, 算是一個為了抓取Play store上資訊的一個小小工具: PlaystoreUtil


現在很多網路的服務, 大多有提供開放的REST API來供人寫原生的程式使用, 當然也有非常多並沒有, 像是Play store, 目前就沒開放的API可供存取, 剛好想要有個東西可以查詢某個app在play store上是屬於啥分類的, 所以就乾脆自己自製一個囉…


現在的網頁, 大多結構性很好, 所以就算沒有REST API, 其實也不難處理, 搭配上 jsoup , 可以說輕而易舉


jsoup是一個可以用css selector來解析html的Java函式庫, 有了這個, 解析html可以不用辛苦的爬dom tree, 只要幾行簡單的程式即可:




Document doc = Jsoup.connect("http://example.com/").get;

Elements links = doc.select("a[href]"); // a with href
Elements pngs = doc.select("img[src$=.png]");

再來看看play store


先看看每個app的資訊畫面, 以Facebook為例, 它的url是 —



http://ift.tt/1vdf2kb



很明顯的, id後面是package name, 另外如果加上”&hl=”可以指定語言, 然後再看到頁面上:



在Facebook (公司名稱)下方有個分類, 可以使用Chrome的開發人員工具(我比較習慣這個), 找到這個連結的css class名稱是”document-subtitle category”,而名稱則在它底下的一個span, 這span有個屬性itemprop, 值是genre



因此, 透過以下這段code就可以取到類別名稱囉




Document doc = Jsoup.connect("http://ift.tt/OQdlpn" + packageName + "&hl=" + locale.getISO3Language()).get();
Elements elements = doc.select("span[itemprop=genre]");

當然, 這方法不只適用於play store, 其他網頁也可以嘗試用這個方法來取得資料


詳細的範例在: http://ift.tt/1oNXmMj




from Tumblr http://ift.tt/1oNXnQw

via IFTTT