顯示具有 android 標籤的文章。 顯示所有文章
顯示具有 android 標籤的文章。 顯示所有文章

2011年1月5日 星期三

RFID 產業與 Google Android 2.3 NFC 關係

Barcode 條碼、RFID(電子標籤)的技術組成分為

1. RF tag(標籤)

源由:Barcode 條碼,發展以地域分類:
  1. 美系:統一商品條碼"(Universal Product Code簡稱UPC)
  2. 歐系:歐洲商品條碼"(European Article Number簡稱EAN)
RFID 高頻標籤頻段:800MHz, 900MHz
UHF (超高頻) Class1 RFID
安全加密驗證:TI 與 Certicom 的研究
EPC(Electronic Product Code) code, next generation barcode(EGC Gen 2)
條碼標準概觀: http://www.gs1tw.org/twct/web/EPC/epc01.html
使用廠商:沃爾瑪、美國國防部、麥德龍、思科
tag 與 code的關係:RFID tag 這種封裝技術,載有 EPC code

2. RFID 專利持有公司
表一 RFID專利許可證合夥機構與RFID智慧產財權授權計畫之比較

RFID智慧產財權授權計畫 (Rapid Start RFID Licensing Program)
參與廠商: SAMSys, Zebra科技, 飛利浦半導體、夏普、Sensormatic以及TransCore公司
目的: 能夠更為明確那些廠商具有合法使用Intermec公司145項專利RFID技術的權利

RFID專利許可合夥機構 (RFID Patent Licensing Consortium)
參與廠商: Alien科技公司, Applied 無線辨識組織, Avery Dennison, Moore Wallace,
Symbol科技, ThingMagic, Tyco Fire & Security, Zebra科技
目的: 讓廠商簡化使用全部廠商之RFID專利,一共3,000多項專利.

Source : 財團法人國家實驗研究院科技政策研究與資訊中心 整理,2005年8月

3. 條碼與讀取器間問題:
  1. 多標籤碰撞解法與讀取速度的取捨
  2. tag 受應用材料影響頻率訊號
  3. 天線方向影響讀取率,假如 tag 與 reader 兩天線正交則無訊號

4. RFID 相對於傳統條碼的優點
  1. 可長距離(超過 7 公尺), 在 0.2秒(200milli seconds)有 95% 讀取率
  2. 可多標籤讀取

5. RF Reader(讀取器),
  1. Data logger, 以 cloud computing 術語來看是 (embedded) thin client

6. Middleware(中介系統軟層),
  1. 分為 Server 端與 Client 端兩大類

7. Application(終端應用程式與使用者介面)
  1. 系統廠或承包服務廠商撰寫

8. Network, Cloud computing, 物聯網
  1. 應用:物聯網(網路伺服器),
  2. 飲料應用條碼, 追溯條碼,
  3. 物流應用:大賣場(Wall-Mart)、貨運公司(DHL)
  4. 國際標準:EPCglobal Network Framework, 組織(GS1)
傳統的手機加 Camera 再下載條碼掃瞄軟體,就視為 reader 端。
最近 Google 在 Android 2.3 力推 NFC:
  1. 用在取代信用卡、現金的電子錢包上就偏 tag 端,而店家、廠商就需要使用 NFC reader 端機器來讀取手機上的 NFC tag。
  2.  用在廣告客製化上 Android 2.3 + NFC 也是 tag 端,廣告播放機則需要有 NFC reader.
2011/05/14 update

Google I/O 2011: How to NFC 的一小時現場 demo,可以看到目前 Google 是把 Android 的 NFC 功能當作複製 Android 使用者環境與行
為的工具,比如複製看到的文字、圖型檔案,應用程式,在對戰遊戲中
甚至可以直接 NFC 連線對戰,如果對方還沒安裝 NFC 也會自動導向該
遊戲的 Android Market(Google Play) 網頁,讓你直接下載新遊戲。

Google 的 NFC demo 除了前述功能外,還強調了克隆、複製 Android 使用情境。

Google I/O 2011: How to NFC
http://www.youtube.com/watch?v=49L7z3rxz4Q

2011/06/06 update:
Google 為了推廣 NFC 的電子錢包應用,五月推出了 Google Wallet 
應用推廣專頁,Google 錢包一推出就被 Paypal 告侵權,但 Google 目
前否認有竊取 Paypal 的商業機密。

2011/06/13 update:
Why is NFC so important? 一文中提出了 NFC 與 RFID 等相近協定的
差異之處,讓我們瞭解為何 NFC 的推出值得我們注意。
  1. NFC 在一個 reader 前可以當作被動的裝置,可以提供簡易的條碼序號,也可能當作一個無線信用卡,因此我們可以將 NFC 裝置當作電子錢包使用。有 NFC 被動裝置就可以在任何可以讀取 NFC 的機器購買東西。
  2. NFC 可以讀取被動裝置,因此 NFC 也可以讀取別人的信用卡資訊,也可以讀取折購優惠資訊,因此你的手機也可以讓你賣東西給任何擁有類似 Visa Wave 無線感應卡片的買家。
  3. NFC 支援 Reader 之間的溝通,因此任兩支手機可以透過 NFC 進行溝通,如果手機中儲存了電子金錢的資訊,就可以達到個人對個人的金流交易。
看完以上三點,很明顯的讓我們知道 NFC 的使用將有極大潛力改變未
來的金流方式。

參考:
  1. 中研院-RFID產業標準-EPCglobal Network介紹
  2. RFID產業組織提議成立專利權許可合夥機構
  3. 傳技資訊 RFID 產業發展現況與挑戰
  4. Google Wallet

2010年9月14日 星期二

Android 在高解析度畫面的處理方式

Samsung Galaxy Tab 採用 Android 作業系統後引起鄉民的廣大迴響,也值得 Android 開發者好好警惕,主要原因是 Android 原本就不是設計給平板電腦這類裝置使用,令人安心的大多數的應用程式仍然可以直接套用,潛在的問題也很容易解決。以下我們提出一個不只適用於平板電腦,也可以應用在各式各樣產品的解決方案:

這個平板電腦規格如下:
畫面解析度 1024x600,第一個有超過上千畫素的解析度大多數人都會抓住他的兩旁,橫著使用。

我們建議開發者花時間仔細研讀 supporting multiple screens 一文,我們也將會在持續改善該文章內容。Dan Morrill 的One Screen Turn Deserves Another 博客文章,也可以適用於直立式使用的情況。

像素密度的意義

當要開發應用程式的外觀時,主要是設計版面跟使用的圖資,而這兩項外觀重要原素就牽扯到螢幕的像素密度、尺吋大小、橫放或直立使用三因素。如果想要設及時髦又漂亮的外觀設計,則必須要完全理解這三個元素。

在三星的這個例子中有另一個意外的地方是他採用遠超過 Android 設定的 170 DPI,當然這是為了在該平板電腦上有更好畫面的設定。在大螢幕上如果設計不良很容易讓螢幕空曠區太大,中等解析度時按鍵與圖標之間距離太遠,但在高解析度時 Android 框架的擴展方式讓該產品畫面更漂亮。

身為業餘攝影師我想到拍照時的光圈、ISO、快門設定問題。當你想拍攝一位舞者,就必須加大光圈、ISO 調得更敏銳、快門加速等技巧。同樣的三星的 Galaxy Tab 使用較大螢幕就必須用更高解析度。

好消息是 Android 框架的程式碼判斷足夠判斷出該產品的最佳畫面,LifeSaver2 的應用程式畫面表現很棒,上面是在 Nexus One 下圖則是Galaxy Tab:




只要你確保提供三種不同解析度圖資,Android 框架就可以找到適合的擴展方式。
可能出錯的地方(你無法預期應用程式跑在哪一種螢幕上)

採用絕對值的 layout
採用絕對值畫素而非無關像素密度的設定
自行計算螢幕大小、自行載入圖資、而非經由框架載入

參考 supports-screens 我們建議你採用以下設定:

<supports-screens android:largeScreens="true" android:anyDensity="true" />

在 API 版本 4 以前的預設值都是 false,如此設定後在大多情況下都可以得到理想的畫面輸出。

測試

如果要確保畫面輸出,最好還是用模擬器輸出測試過,三星也有提供相關的外掛(add-on)讓你更容易測試。

幹嘛管這麼多?

主要是因為 Android 本來就只是設計給手機用的平台,為了因應現在的應用變化,才加入後續的調整與應用。但也拓展了你的應用程式可以應用在各種產品上的可能性。

原文網址:

Screen Geometry Fun

2010年5月8日 星期六

cross compile Android native C code

當需要建立一些指令列工具,需要自行 build code 在 Android
command line 上執行,或供應用程式透過 JNI 呼叫的函式庫時,
需要 cross compile android native C program

1. agcc, 一個幫你搞定 cross compile 所需複雜參數的 perl script,依照
Compiling for Android wiki 上的步驟,應該就可以成功

2. 如果幸運的話,你可以不用往下看,不然就繼續吧,假如 agcc
不能達要你的需求,網路上也有神人已經寫了 Makefile 再加上 1. 裡
面的其他設定設好,以及你所使用平台的 C runtime library,在
~android/bionic/libc/arch-arm/bionic 底下 copy crtbegin_dynamic.S,
crtend.S 到你的 utility source 目錄,一起 link 就可以從正確的 entry symbol
__start 執行。否則直接拿 x86 cross compile 給 arm 平台的程式時
會有類似以下的警告訊息:

warning: cannot find entry symbol _start; defaulting to 000082c8

3. add scripts to ease rebuild native C code and installation,要將 utility
包 到 system.img 時需要先移除 ~android/out/target/product/arm/system.img
再將新加的 utility 放到 ~android/out/target/product/arm/system/bin
重新 build android,因為前面已經將其他 object files build 完,所以只剩下
archive system.img 的工作。

因此再借用神人的 my_command_line utility Makefile 改成如下:


# ripped from http://forum.xda-developers.com/archive/index.php/t-623976.html
AR = arm-eabi-ar
AS = arm-eabi-as
CC = arm-eabi-gcc
CXX = arm-eabi-c++
LD = arm-eabi-ld

ANDROID_SOURCE_ROOT = /path/to/your/androidsource
NDK_KIT = $(ANDROID_SOURCE_ROOT)/ndk/
PLATF_KIT = build/platforms/android-4

ARM_INC = $(NDK_KIT)/$(PLATF_KIT)/arch-arm/usr/include
ARM_LIB = $(NDK_KIT)/$(PLATF_KIT)/arch-arm/usr/lib

PLATF_INC = $(NDK_KIT)/$(PLATF_KIT)/common/include

OUT_DIR = $(ANDROID_SOURCE_ROOT)/out/target/product/arm
OUT_SYSTEM_BIN = $(OUT_DIR)/system/bin/
ALL_SYSTEM_IMG = $(OUT_DIR)/system.img $(OUT_DIR)/obj/PACKAGING/systemimage_unopt_intermediates/system.img

PROJECT = my_command_line
SRCS = $(PROJECT).c util.c
OBJS = $(PROJECT).o util.o crtbegin_dynamic.o crtend.o
EXES = $(PROJECT)

all: $(EXES)
file $(EXES)

install: $(EXES)
cp -afv my_command_line $(OUT_SYSTEM_BIN)
cd ../; rm -fv $(ALL_SYSTEM_IMG)
@echo "Please re-run build_android.sh to rebuild system.img"

$(EXES): $(OBJS)
$(LD) \
--entry=_start \
--dynamic-linker /system/bin/linker -nostdlib \
-rpath /system/lib -rpath $(ARM_LIB) \
-L $(ARM_LIB) -lc $(OBJS) -o $(EXES)

$(OBJS): $(SRCS)
$(CC) -I $(ARM_INC) -I $(PLATF_INC) -c $(SRCS)
$(CC) -mthumb-interwork -o crtbegin_dynamic.o -c crtbegin_dynamic.S
$(CC) -mthumb-interwork -o crtend.o -c crtend.S
#crtbegin_dynamic.S and crtend.S copy from bionic/libc/arch-arm/bionic

clean:
rm -f $(OBJS) $(EXES)


另外寫程式要注意的是 ~android/bionic/libc/README 提到跟 standard C
library 差異處與特性:
- no support for locales
- no support for wide chars (i.e. multi-byte characters)
- its own smallish implementation of pthreads based on Linux futexes
- support for x86, ARM and ARM thumb CPU instruction sets and kernel interfaces

4. Thinker 發表的 Android Build System 分析一文相當值得細讀,善用
Android makefile 的 build system 可以省掉去瞭解這些編譯的細節。

5. Android Source Code 中的 NDK 也詳細介紹了使用 Android Java VM
的 JNI 介面與實作 shared library 的建議,在
~android/ndk/docs/OVERVIEW.TXT 中有說明,Google 一下也可以找到
中文翻譯資料,我就不翻了。 :P

結論是網路上神人很多,Google 搜尋跟這些神人也很熟。:P

相關連結:

Android 原生(Native) C 開發之八: Toolchain 環境搭建篇