三月 9, 2010
» 自動偵測螢幕大小和解析度

在 Android 機器上,螢幕的解析度可以用「螢幕大小」和「螢幕點距」兩個參數來表示。

一般的方法

在 Android 1.6 版以後,可以使用 config.screenLayout 語句來判斷螢幕大小

Configuration config = new Configuration();
if((config.screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL){
}
支援的參數與代碼如下
  • Configuration.SCREENLAYOUT_SIZE_UNDEFINED 0
  • Configuration.SCREENLAYOUT_SIZE_SMALL 1
  • Configuration.SCREENLAYOUT_SIZE_NORMAL 2
  • Configuration.SCREENLAYOUT_SIZE_LARGE 3

要檢查點距,可以使用 DisplayMetrics 語句來判斷螢幕點距

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm);
if((dm.densityDpi == dm.DENSITY_HIGH)){
}
支援的參數與代碼如下

  • DENSITY_HIGH 240 (dpi)
  • DENSITY_MEDIUM 160
  • DENSITY_LOW 120
  • DENSITY_DEFAULT 160

相容 1.5 以下機型

根據Android 版本使用圖表,2010年1月時 Android 1.5 市佔率還是接近 1/3,但是這1/3的機器上並無法使用上面的API。



在 1.5 版上,其實仍然可以用 density 語句來判斷螢幕點距比率

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm);
if((dm.density >= 1.5)){
}

density 的值 1 代表一般點距,1.5 代表高點距,0.75代表低點距。要偵測市面上所有的機器是否是高解析度機型,只要運用以上方法,就可以自動偵測出螢幕大小和點距囉。

三月 2, 2010
» Android 免費+廣告營利模式

一篇經驗分享文章,分享 Android 上使用 AdMob 廣告營利的經驗與注意事項
2010世界杯,我的Android之旅 蠻不錯的

另一篇移动应用排名与开发者的机会亦有可觀

二月 21, 2010
» TAT桌面

每天使用的桌面需不需要這麼絢麗哩?

一月 11, 2010
» 甜點師父


蛋糕賣完賣焦糖布丁,書一年改了三版,真是太瘋狂啦!

當初寫作這本書的目標,就是成為學習 Android 基礎的第一本入門書,我想我有做到最好。對我來說,每個讀者當下拿到書可能只會看一遍。如果看到的內容與新版 Android 有所差距,雖然可以很容易歸因於 Android 改版太快,但我覺得作者也應該負上責任。

Android 自 1.6 版後,引入了新的 SDK 工具架構,讓整個版本升級更容易。同時因為升級容易,Android 的改版也變得更快速(現在幾乎是一個月出一個新版本),這讓寫作入門書的挑戰變得更大。這次針對 Android 1.6、2.0 之後所引進開發工具新架構的大改版,讓新讀者入門時更順暢、也讓舊讀者能順利熟悉新版 Android 環境,並有足夠知識去使用各種 2.x 版的後續版本更新。

這個版本加入 SDK 開發工具介紹,說明 Android 各版本與開發工具之間的關係;解釋了多種解析度機種的區別與開發/測試方式。同時因為書籍範例的完成度很高了,也將各章的範例操作完全獨立開來,每章都附有可直接對照進度的程式碼,更易於新手入門時對照學習。

期望在新的一年裡,可以騰出手來,好好研究一些進階的技術,繼續與大家分享。

一月 6, 2010
» Nexus One 操作影片



看起來確實很順暢

還有支援 Flash 10 的影片


十一月 20, 2009
» Android 集市大亂鬥

是什麼 Market 並不太重要。使用者在哪裡,開發者就在哪裡。

談到 Android Market,非北美/西歐的開發者都有很多意見,主要焦點都集中在能不能放付費軟體上。這點對各 Android 集市皆然。前陣子開始整理了一個已公開的各家 Market 一覽表。開發者把應用軟體寫出來了,該選擇放在哪些 Market 上頭呢?

寫應用軟體的目的

開發者開發免費應用程式無非是為了以下幾種目的:

  1. 自己要使用
  2. 增加經驗值(練功)
  3. 提高名聲/打知名度
  4. 靠廣告賺錢
  5. 靠付費版賺錢

在此暫時不分析付費軟體的部份,因為目前還沒有任何一家提供。

這篇只就免費軟體來談。免費軟體該發佈到哪些 Market 上頭呢?


殘酷的答案

老實說寫了免費軟體,經過思考之後,我只會丟到 Android Market。

理由如下:

以前面寫應用軟體的目的來分析:

  • 自己要使用
目前手邊還沒有不預裝 Android Market 的機子。對其他 Market 的需求並不大。
  • 增加經驗值(練功)
放到哪個 Market 上一樣都是練功。Android Market 背後有 G 社備援,提供網頁管理介面、使用者評論等等,雖然不完美,但至少可以和使用者取得互動。目前大部分其他的 Market 並無提供同級的網頁管理介面。有的 Market 還得自己四處申請、填寫一堆文件、截圖,各 Market 審核後還有可能會退你件,弄得跟到奴隸銀行求職一樣。寫免費軟體的開發者難道是為了得到這樣的經驗值?
  • 提高名聲/打知名度

發佈到各家 Market 的下載量,可能還沒有 Android Market 上的 1/100(這是經過美化 n 倍後的數據,請原諒我就是這麼直)

  • 靠廣告賺錢
參考上一點,發到各論壇去,下載數可能也會比在一些 Market 上高。要勤勞到處貼我建議去貼論壇或 PTT。

以上四點都是 False Impact 的,各 Market 集市的擁有者們看了可能會很沮喪。但其實你們只剩下一個吸引開發者將程式放到自己 Market 的方式:
  • 靠付費版賺錢
各家集市算盤打的精,想拿免費軟體開路,吸引使用者造訪的司馬昭之心再明顯不過。除了電信商推的 Market 之外,其他的 Market 要取得開發者/開發商青睞,自動奉上免費軟體更難。開發者不可能永遠靠佛心來支撐,沒飯吃還是會餓死的。國內哪個 Market 先能收費,對是否能帶動免費軟體進來,衝高軟體數量還是很關鍵的。

至於國內最後哪些個 Market 會繼續存活,其實只要比較兩件事:

1. 人潮
2. 哪個 Market 能放付費軟體

我相信沒有回報,只有付出的關係是無法長久的。

只要誰先推出拆帳合理的付費機制,相信開發者還是會趨之若騖。

眾家 Market:加油,好嗎?

十一月 18, 2009
» AttachEmail: 從SD卡中加檔案到Email附件

(不知道為什麼系統沒直接提供這功能)

昨晚上花了幾個鐘頭做了一版出來。功能非常單一:主要就是從檔案列表裡選擇任一檔案,而所有檔案左側都會有一個迴紋針符號,
只要點選項目,就可以把檔案當做 Email 附件,這樣以後SD卡就不用拔來拔去了。

大家有需要可以到 Android Market 搜尋 AttachEmail 下載。

» 支援不同解析度的 Android Market

本來市面上 Android 相關機種一律都是 480*320 解析度,
Android 1.6 發佈後,也正式發售支援了其他使用不同解析度的機種,例如 QVGA(320*240) 或 WVGA(800*480)。

當然在不同的解析度下,畫面顯示上多少有些不同。
為了避免使用者裝到不適合解析度的程式而引發使用上的混亂,Android 1.6 在 AndroidManifest 清單中引入了「supports-screens」宣告。

一般來說要支援各種解析度,可以在編譯前先將編譯 Target 選為 1.6(專案名>右鍵>Properties>Android>Android 1.6),並在 AndroidManifest 清單中加入如下設定:


[supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="false"/]


「normalScreens」代表的是一般解析度(如 G1, Hero),「smallScreens」代表的是較低解析度(如 Tatoo)。

現在將程式發佈到 Android Market 時若沒做以上設定,你寫的程式將不會顯示在 QVGA/WVGA 機器的 Market 中。

那麼其他使用奇怪解析度的設備哩?(例如最近發表的某台 WQVGA 機器...)反正上面也沒有 Android Market, 就留給打算支援這些設備的開發者多傷一份腦筋啦.


PS: 將 Target 設為 1.6 跟在 AndroidManifest 清單中設定 minSdkVersion 最低相容版本並不衝突,只要 minSdkVersion 維持不變,低於 1.6 版的機器還是可以使用你的程式。


update: 事實上「smallScreens」代表的是小螢幕,「normalScreens」是一般螢幕,「largeScreens」當然是大螢幕。一般三者的分界點大概在3吋跟4吋。所以 Tattoo (2.8") 被歸在「smallScreens」範疇。

十一月 7, 2009
» 簡體版出版

More about Google Android开发入门指南

終於簡體版也出版了。

對應的是繁體的第二版(Android 1.5)。定價 45 RMB,換算回來還不到 200 NT,真是便宜呀。

希望大陸的朋友們也會喜歡囉 :)

十月 28, 2009
» Eclair (Android 2.0) 發佈



想不到才過了一個月,Android 2.0 這麼快就出來了。
對開發者來說,主要的變化是開放了原本的一些 internal API,包含 Bluetooth、多點(至多3點)觸控(MotionEvent)、AccountManager、Sync Adapter、Dock(底座)、並強化相機 API、瀏覽器支援 HTML5、支援更多種解析度機器...等。

除了大家期待已久的藍芽與多點觸控,開放 AccountManager、Sync Adapter、Dock這些 API 表示 Android 系統已經準備好讓開發者們能創造與 Google 以外的網路服務、與其他設備更加緊密結合的應用程式。真是很期待開發者們能怎麼運用這個強大的系統 :)

九月 22, 2009
» OCR 應用



WordSnap OCR



Mezzofanti

九月 16, 2009
» Donut (Android 1.6) 發佈

Donut (Android 1.6) 發佈了,補完了 Android 1.x 應該有的功能,支援更多的機器。



隨著 Eclipse 3.5、Android 1.6 跟 ADT 0.9.3 推出,到底值不值得再次改版我寫的入門書呢?

如我在第二版序中所言的,Android 改版相當快,所有進階的內容很有可能變動,唯有基本入門所需的知識並沒有改變太多
因此沒有意外的話,應該會等到 Android 2.0 之後才考慮再改版。

1.6 新版本相關的新內容將先加在電子書版中。

九月 6, 2009
» 樣板表示法

在做講解投影片時自然而然寫出

import package

public class ${Name} extends Activity{
...
public void onCreate(...){
...
setContentView(${layout})
}
}


這樣的 python Template 表示法, 抽象化有時確實有助於理解。

九月 4, 2009
» Market

新版的 Market 介面改了不少, 看起來是有往好的方向走

九月 3, 2009
» 麵包師父



看到第二版書的封面,就知這是筆者轉職成為麵包師父後的第一作(誤)

「Google!Android 手機應用程式設計入門 2ed」 這本書主要是為了因為想開發 Android 而學 Java 的人寫的。
最適合的讀者是有其他語言開發經驗,但對 Java 還不太熟悉的讀者。

本書第二版上市時間跟前一版只差了 5 個月,主要是因應 Android 1.5 版釋出,
加上 Android 開發工具 ADT 大改版到 0.9 而大量改寫,
修正許多前一版的 Bug 跟範例程式碼,把整個學習流程弄的更順暢,
並加入新章節、新圖例(超過 60 張)、實用小技巧。
(當然出版社肯讓我這麼短時間就改版,也是因為賣得還算不錯啦)

買過本書第一版的您不見得需要買第二版,但是本書第二版當然更適合拿來介紹給其他想入門 Android 的朋友。

用杯子蛋糕(CupCake)當封面是我的惡趣味,以配合 Android 目前版本的代號,希望能在賞玩本書時帶來樂趣。


博客來連結

八月 28, 2009
» NoCheatCalls(NCC)可疑電話通報


寫了篇文章介紹前段時間寫的防詐騙公益程式。



八月 20, 2009
» 擴增實境




Local Reality Browser 是一個擴增實境的應用。透過相機鏡頭,同時展示現實景色與相應的數位資訊。同時像瀏覽器一樣,讓開發者可以在 Android 手機上面自行加入自己的擴增實境網頁(這個軟體稱這些頁面為「圖層」Layer)。






微軟的擴增實境



SONY 的擴增實境

也可參考 操縱介面的改變

八月 16, 2009
» Introduction of Android Scripting Environment



On Coscup 2009

八月 13, 2009
» Compiling Python for Android Scripting Environment

Android Scripting Environment (ASE) is the scripting language (BeanShell, Python, Lua, Ruby) environment for Android Operating System.

This article is about how to compile python for ASE.

The following instructions are according to the discussion from ASE group.

Compile python for host
To compile python for ASE, you need a Linux machine, then here goes:

Download proper python source distribution (according to the python version in ase/python/src) from http://www.python.org/

Extract the source and run the following command:

$ cd Python-2.6.2
$ ./configure
$ make

Then you have a clean python compiled for your PC (called host system).

Compile python for target
Now we can go to compile python for your Android device (called target system).

Copy the python executable file and the pgen file into ase/python/src folder

$ cd ~
$ cp Python-2.6.2/python ase/python/src/hostpython
$ cp Python-2.6.2/Parser/pgen ase/python/src/Parser/hostpgen

Then we should prepare the compile tools.

First checkout the android source from http://source.android.com/ (name as mydroid), we'll use the cross compile gcc in it's "prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin" folder. Another tool is located in "ase/tools/agcc".

Edit .bashrc , add a line to include those compile tools:
export PATH=${PATH}:~/mydroid/prebuilt/linux
-x86/toolchain/arm-eabi-4.2.1/bin:~/ase/tools/agcc

Then start compile python for ASE.

$ cd ase/python
$ ./build.py

Done!

八月 6, 2009
» Compiling Android Scripting Environment

Android Scripting Environment (ASE) is the scripting language (BeanShell, Python, Lua, Ruby) environment for Android Operating System.

The following instructions are according to the discussion from ASE group.

Prerequisites

To compile ASE, you need a Linux machine, then here goes:

1. Get Android source (read http://source.android.com/download to fetch the source) and
name the folder as 'mydroid'(or else you prefer). In the following instructions I assume all the folders are in user's home folder(~) .

2. Get Android SDK (download from http://developer.android.com/) and
extract it as "android_sdk"(or else you prefer).

3. Get Android Scripting Environment source (hg clone from http://code.google.com/p/android-scripting/source/) as "ase"(or else you prefer).

4. Enter ase/tools folder and execute "fix_android_sdk.py"
to patch the "android_sdk".

$ cd ase/tools
$ python fix_android_sdk.py ~/mydroid ~/android_sdk
Copying source from .....mydroid to .....android_sdk/platforms/android-[verison]/sources
Adding android.os.Exec to android.jar
Compiling android.os.Exec to....
Done!

In addition to modifying the SDK by adding android.os.Exec, the script
will also copy the source files into the SDK so that they can be
browsed in Eclipse.

Import Project into Eclipse

After executing the script, follow the instructions for developing in
Eclipse in the Android developer guide to setup a workable Android
development environment.

Change the project build path and specify the BeanShell path to (project
path)/beanshell/bsh-[version].jar

Compile it, done!


PS: Python and Lua are precompiled and already put in res/raw folder. You
don't need to setup the cross compile environment unless you want to
also compile Lua and Python yourself.

A Feedjack powered Planet
A Django site.