星期一, 11月 18, 2013

[Android]用 am 輸入 MMI code

在 Android 裡,用 am 撥號,可以這樣用:am start -a android.intent.action.CALL -d tel:09xxxxxxxx

撥號畫面裡,使用 MMI code 可以帶出一些特殊的畫面,每隻手機都不太一樣,但一般來說都會有 # 這些特殊字元,因此 -d tel:*#38# 這樣的參數就會失效。am 的原始碼在 frameworks/base/cmds/am 下,這邊可以看到 am 會用 Uri.parse 去解析 -d 後的參數,問題就出在這裡。因為是以 Uri 處理,因此也需要遵循 Uri 的規則,# 應該要使用 %23 才行。

所以使用 am start -a android.intent.action.CALL -d tel:*%2338%23 就可以成功。

小技巧是,你可以在編譯後,執行 out/host/linux-x86/bin/monkeyrunner ,在裡面依序輸入,就可以取得編碼後的 Uri 字串:

from android.net import Uri
print Uri.encode('your_string')

沒有留言: