Android Scripting Environment (ASE)について、「Android上でPython、Lua、JavaScriptなどを実行するスクリプティング環境が凄い」で紹介した。今回はAndroid端末の機能を利用するためのPython APIの使い方をリファレンスとしてまとめてみた。Python 2.6の標準モジュールは最初から利用できる。また、twitterモジュールなど、いくつかの標準外のモジュールがデフォルトでインストールされている。詳細については利用する環境で確認して欲しい。
ASE上のPythonスクリプトの編集画面でメニューボタンを押し、そこから"API Browser"で簡単なリファレンスを読むことができる。また、ASEのWikiとしてWiki pages - android-scripting、サンプルプログラムとしてtest.pyが参考になる。
以下にASE Python APIの簡易リファレンスを示すが、APIのすべてを記しているわけではない。足りない部分については随時追加していく予定だ。
Androidモジュールを使用する
import android droid = android.Android()
現在のクリップボード取得と貼り付け
clip = droid.getClipboard()["result"] droid.setClipboard("Hello, world!")
GDataの使用
import gdata.docs.service client = gdata.docs.service.DocsService() # クライアント. client.ClientLogin(username, password) # 接続. feed = client.GetDocumentListFeed() # ドキュメントリストのAtomをフィード.
GPSで現在の位置情報を取得
droid.startLocating() # 開始. location = droid.readLocation()["result"] lat = location["network"]["latitude"] # 緯度. lng = location["network"]["longitude"] # 経度. droid.stopLocating() # 停止.
位置情報取得などのイベントを受け取るタイプのAPIでは、開始直後にイベントを取得できない場合がある。そこで以下のように数回リトライできるようにする。
for i in range(10): location = droid.readLocation()["result"] if location: break time.sleep(1)
Android端末のセンサー情報を取得
droid.startSensing() # 開始. sensors = droid.readSensors()["result"] droid.stopSensing() # 停止.
センサー情報はディクショナリとして保存されている。
sensors accuracy 精度. azimuth 方位(0-360) pitch 縦の傾き. roll 横の傾き. xforce X方向の加速度. yforce Y方向の加速度. zforce Z方向の加速度. xmag X方向の磁場. ymag Y方向の磁場. zmag Z方向の磁場.
Android端末で音声出力
droid.speak("Hello, world!")
Android端末で音声認識
result = droid.recognizeSpeech()["result"] droid.makeToast(result) # 認識した語句を表示.
指定したURLでウェブブラウザを開く
droid.view("http://www.google.com/")
指定した語句をネット検索
result = droid.recognizeSpeech()["result"] # 音声認識で語句を指定. droid.webSearch(result)
通話状況の取得
droid.startTrackingPhoneState() # 開始. result = droid.readPhoneState()["result"] droid.stopTrackingPhoneState() # 停止.
サイレントモードのトグル
droid.toggleRingerSilentMode()
電話呼び出し音の音量情の取得と変更
vol = droid.getRingerVolume() droid.setRingerVolume(0) # 音量を0にする. droid.setRingerVolume(vol["result"]) # 元に戻す.
最後に取得した位置情報の取得
result = droid.getLastKnownLocation()
ジオコード情報を取得
result = droid.geocode(35.698, 139.774) # 緯度, 経度.
Wi-Fiのトグル
droid.toggleWifiState()
Android端末に文字を表示
droid.makeToast("Hello, world!")
Android端末を振動させる
droid.vibrate()
Android端末にメッセージを送る
droid.notify("Hello, world!")
実行中のAndroidパッケージの取得(com.android.phoneなど)
result = droid.getRunningPackages()
テキスト入力ダイアログの表示
result = droid.getInput("title", "message")["result"]
ボタン付きダイアログの表示
droid.dialogCreateAlert("title", "message") droid.dialogSetPositiveButtonText("Yes") droid.dialogSetNegativeButtonText("No") droid.dialogSetNeutralButtonText("Cancel") droid.dialogShow() response = droid.dialogGetResponse()["result"]
response["which"]には以下の値が入る: Yesボタン: "positive" Noボタン: "negative" Cancelボタン: "neutral"
指定したボタンが1つ(例えばdroid.dialogSetPositiveButtonText("Yes"))なら1つのボタンのみを表示する。
スピナープログレス(回転型進捗アイコン)付きダイアログ
droid.dialogCreateSpinnerProgress("title", "message") droid.dialogShow() time.sleep(2) droid.dialogDismiss()
プログレスバー付きダイアログ
droid.dialogCreateHorizontalProgress("title", "message", 50) # 50分割. droid.dialogShow() for i in range(50): time.sleep(0.1) droid.dialogSetCurrentProgress(i) droid.dialogDismiss()
リスト付きダイアログの表示
droid.dialogCreateAlert("title") droid.dialogSetItems(["foo", "bar", "baz"]) droid.dialogShow() response = droid.dialogGetResponse()["result"]
response["item"]にはリストの順に0からの数値が入る。
追記(2010/6/27):
ASE r22からreadLocation()のデータ構造が変更されたようなので、それに合わせて上述のコードを修正した。
ASE上のPythonスクリプトの編集画面でメニューボタンを押し、そこから"API Browser"で簡単なリファレンスを読むことができる。また、ASEのWikiとしてWiki pages - android-scripting、サンプルプログラムとしてtest.pyが参考になる。
以下にASE Python APIの簡易リファレンスを示すが、APIのすべてを記しているわけではない。足りない部分については随時追加していく予定だ。
Androidモジュールを使用する
import android droid = android.Android()
現在のクリップボード取得と貼り付け
clip = droid.getClipboard()["result"] droid.setClipboard("Hello, world!")
GDataの使用
import gdata.docs.service client = gdata.docs.service.DocsService() # クライアント. client.ClientLogin(username, password) # 接続. feed = client.GetDocumentListFeed() # ドキュメントリストのAtomをフィード.
GPSで現在の位置情報を取得
droid.startLocating() # 開始. location = droid.readLocation()["result"] lat = location["network"]["latitude"] # 緯度. lng = location["network"]["longitude"] # 経度. droid.stopLocating() # 停止.
位置情報取得などのイベントを受け取るタイプのAPIでは、開始直後にイベントを取得できない場合がある。そこで以下のように数回リトライできるようにする。
for i in range(10): location = droid.readLocation()["result"] if location: break time.sleep(1)
Android端末のセンサー情報を取得
droid.startSensing() # 開始. sensors = droid.readSensors()["result"] droid.stopSensing() # 停止.
センサー情報はディクショナリとして保存されている。
sensors accuracy 精度. azimuth 方位(0-360) pitch 縦の傾き. roll 横の傾き. xforce X方向の加速度. yforce Y方向の加速度. zforce Z方向の加速度. xmag X方向の磁場. ymag Y方向の磁場. zmag Z方向の磁場.
Android端末で音声出力
droid.speak("Hello, world!")
Android端末で音声認識
result = droid.recognizeSpeech()["result"] droid.makeToast(result) # 認識した語句を表示.
指定したURLでウェブブラウザを開く
droid.view("http://www.google.com/")
指定した語句をネット検索
result = droid.recognizeSpeech()["result"] # 音声認識で語句を指定. droid.webSearch(result)
通話状況の取得
droid.startTrackingPhoneState() # 開始. result = droid.readPhoneState()["result"] droid.stopTrackingPhoneState() # 停止.
サイレントモードのトグル
droid.toggleRingerSilentMode()
電話呼び出し音の音量情の取得と変更
vol = droid.getRingerVolume() droid.setRingerVolume(0) # 音量を0にする. droid.setRingerVolume(vol["result"]) # 元に戻す.
最後に取得した位置情報の取得
result = droid.getLastKnownLocation()
ジオコード情報を取得
result = droid.geocode(35.698, 139.774) # 緯度, 経度.
Wi-Fiのトグル
droid.toggleWifiState()
Android端末に文字を表示
droid.makeToast("Hello, world!")
Android端末を振動させる
droid.vibrate()
Android端末にメッセージを送る
droid.notify("Hello, world!")
実行中のAndroidパッケージの取得(com.android.phoneなど)
result = droid.getRunningPackages()
テキスト入力ダイアログの表示
result = droid.getInput("title", "message")["result"]
ボタン付きダイアログの表示
droid.dialogCreateAlert("title", "message") droid.dialogSetPositiveButtonText("Yes") droid.dialogSetNegativeButtonText("No") droid.dialogSetNeutralButtonText("Cancel") droid.dialogShow() response = droid.dialogGetResponse()["result"]
response["which"]には以下の値が入る: Yesボタン: "positive" Noボタン: "negative" Cancelボタン: "neutral"
指定したボタンが1つ(例えばdroid.dialogSetPositiveButtonText("Yes"))なら1つのボタンのみを表示する。
スピナープログレス(回転型進捗アイコン)付きダイアログ
droid.dialogCreateSpinnerProgress("title", "message") droid.dialogShow() time.sleep(2) droid.dialogDismiss()
プログレスバー付きダイアログ
droid.dialogCreateHorizontalProgress("title", "message", 50) # 50分割. droid.dialogShow() for i in range(50): time.sleep(0.1) droid.dialogSetCurrentProgress(i) droid.dialogDismiss()
リスト付きダイアログの表示
droid.dialogCreateAlert("title") droid.dialogSetItems(["foo", "bar", "baz"]) droid.dialogShow() response = droid.dialogGetResponse()["result"]
response["item"]にはリストの順に0からの数値が入る。
追記(2010/6/27):
ASE r22からreadLocation()のデータ構造が変更されたようなので、それに合わせて上述のコードを修正した。
コメント