2010年4月6日火曜日

Android Scripting Environment (ASE) Python API簡易リファレンス

このブログ記事をはてなブックマークに追加

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()のデータ構造が変更されたようなので、それに合わせて上述のコードを修正した。

3 コメント:

オフィス さんのコメント...
このコメントは投稿者によって削除されました。
鷹之丞 さんのコメント...

出かける前なので、しっかり読んでませんが、おもしろい!ちょっとした定期チェック用のスクリプトとか作ってみたくなってきました。

nox さんのコメント...

一行のコードで音声をテキストに変換できたりするのが楽しいですね。