AndroidFacadeAPI

センサー

このエントリーをはてなブックマークに追加
最終更新日 2016-12-31

次に示すのは、Android のセンサー情報をコンソールに表示する例です。

import android
import time
droid = android.Android()
droid.startSensingTimed(1, 500)
time.sleep(1)
print droid.readSensors().result
droid.stopSensing()

startSensingTimed() を呼び出すと、一定時間ごとにセンサー情報の取得を開始します。 startSensingTimed() の引数は順に、センサー番号(1 が全センサー、2 が加速度センサー、3 が磁界センサー、4 が輝度センサー)、 センサー情報を取得するまでの最少時間(ミリ秒)です。 今回の例では約 500 ミリ秒ごとに全センサー値を取得します。

次に、少なくとも 500 ミリ秒以上待機するために sleep() を呼び出した後、 readSensors() を呼び出して直近のセンサー情報を読み込みます。 readSensors() は以下の値を返します。(ただし、ハードウェアが対応していないセンサーの値は返しません。)

説明
accuracy 精度
time 時間
light 輝度
azimuth 方位
pitch 縦の傾き
roll 横の傾き
xforce X 方向の加速度
yforce Y 方向の加速度
zforce Z 方向の加速度
xMag X 方向の磁界
yMag Y 方向の磁界
zMag Z 方向の磁界

最後に stopSensing() を呼び出してセンサー情報の取得を停止します。

なお、SL4A はセンサーの種類ごとに以下のような API を用意しています。

sensorsGetAccuracy() を呼び出すと、直近のセンサー精度情報を取得することができます。

import android
import time
droid = android.Android()
droid.startSensingTimed(1, 500)
time.sleep(1)
print droid.sensorsGetAccuracy().result
droid.stopSensing()

sensorsGetLight() を呼び出すと、直近の輝度情報を取得することができます。

import android
import time
droid = android.Android()
droid.startSensingTimed(1, 500)
time.sleep(1)
print droid.sensorsGetLight().result
droid.stopSensing()

sensorsReadAccelerometer() を呼び出すと、直近の加速度情報を取得することができます。

import android
import time
droid = android.Android()
droid.startSensingTimed(1, 500)
time.sleep(1)
print droid.sensorsReadAccelerometer().result
droid.stopSensing()

sensorsReadOrientation() を呼び出すと、直近の方位情報を取得することができます。

import android
import time
droid = android.Android()
droid.startSensingTimed(1, 500)
time.sleep(1)
print droid.sensorsReadOrientation().result
droid.stopSensing()

sensorsReadMagnetometer() を呼び出すと、直近の磁界情報を取得することができます。

import android
import time
droid = android.Android()
droid.startSensingTimed(1, 500)
time.sleep(1)
print droid.sensorsReadMagnetometer().result
droid.stopSensing()

sensors イベント

startSensingTimed() を呼び出すと、センサー情報を取得した際に "sensors" イベントが発生します。 次に示すのは、約 500 ミリ秒ごとに 5 回センサー情報を表示する例です。

import android
droid = android.Android()
droid.startSensingTimed(1, 500)
for i in range(5):
    event = droid.eventWaitFor("sensors")
    print event.result["data"]
droid.stopSensing()