Androidアプリでセンサー使用

センサーを使うには
getSystemService()で
SensorManagerを取得
SensorManagerの
getSensorList()に
TYPE_ACCELEROMETER
加速度センサーを指定し、リストを得る
このリストの中から
list.get(0)
で加速度センサーを取得
あえて、指定しているのは
機種により複数のセンサー搭載もあるから
onResume()

SensorEventListenerを登録
登録は
mSensorManager.registerListener()
onStop()
でイベントリスナーの登録解除
解除は
mSensorManager.uNregisterListener()
ちなみに、
SensorEventListenerを
implicationしたら
以下のメソッドも実装すること
public void onAccuracyChanged(Sensor sensor,int accuracy)
public void onSensorChanged(SensorEvent event)
onAccuracyChanged()

センサー搭載の精度が変化した時に、呼び出される
onSensorChanged()は
センサーの値が変化したら呼び出される
onSensorChanged()
の引数 event のvalues配列には各軸の値があり
values[0] がX軸
values[1] がY軸
values[3] がZ軸
になります
ちなみに、定数も定義されているので
X軸なら
SensorManager.DATA_X
Y軸なら
SensorManager.DATA_Y
Z軸なら
SensorManager.DATA_Z

加速度について

加速度についてのメモ
加速度は
一定時間ごとに速度がどれだけ増加するか
を表す割合のこと
単位時間あたりの速度の変化率のこと
一般的にはm/s
meter per second per second
という単位で表現されるけど
加速度は重力の影響を受ける
重力と加速度による慣性力を区別することはできない
一般的だと
バスや電車で
発車や停車のとき、加速度による慣性力を体験してます
ちなみに、地球の重力により
物体が上から下へ落ちるときの加速度は
重力加速度といって
Gで表されます
よく、ラノベとかで何Gとかでたりします
重力加速度は
一般では 9.8m/s
だけと
厳密には緯度により変わるため
日本の場合、北海道と沖縄では
微妙に異なります
北海道のほうが大きく
沖縄の方が小さくなります
重力加速度は
物体を静止状態から自然落下させたときに
1秒後の落下速度が9.8m/sになること
加速度はX Y Zの3軸のベクトルで取得可能
ちなみに、加速度はAndroidアプリ作成に使います

HTC Jのサンプリングレート

Androidで音感知のアプリ作成で
サンプリングレートの設定を間違えたらエラーになりました
最初に設定したのは500にしてしまったのが原因でした
今回、HTC Jでは
サンプリングレートは
Xperia acroと同じく
44100Hzでした
数値が小さいと
アプリ起動しても予期せぬエラーがでましたとなり強制終了してしまいます

Androidで音の感知

Androidで音の感知
MediaRecorderクラスを使えば
音の録音ができる
しかし、MediaRecorderクラスでは
録音はできるけど
音量の取得はできない
これに対して
AudioRecordクラスなら
マイクからの入力を波形データとして扱えるので
マイクからの音量を取得できる
Androidで音の感知
MediaRecorderクラスを使えば
音の録音ができる
しかし、MediaRecorderクラスでは
録音はできるけど
音量の取得はできない
これに対して
AudioRecordクラスなら
マイクからの入力を波形データとして扱えるので
マイクからの音量を取得できる
ちなみに、
音量の感知には
パーミッションで
RECORD_AUDIOが必要

notification.flagsのフラグ

notification.flagsに設定できるフラグ
Flag_AUTO_CANCEL
通知がクリックされると通知を消去
FLAG_INSISTENT
拡張部分が開かれるまで音を鳴らし続ける
FLAG_ONGOING_EVENT
実行中の下について通知が追加される
FLAG_NO_CLEAR
通知を消去するボタンでも消去されなくなる
FLAG_SHOW_LIGHT
LED点灯

ノーティフィケーション

ノーティフィケーション
これは
バックグラウンドで動作しているアプリから
ユーザに状態を通知したいときや
通知により、なんらかのアクションを求めるときに利用する
例えば
サービス起動を通知
その通知をクリックしたら
サービス開始や
サービス終了のアクティビティを表示できるようにするなど
一番使うのは
メールの受信を
ノーティフィケーションで表示し
これをクリックしたら
メールアプリが起動するという仕組み

オーバーライドとオーバーロード

オーバーロードとオーバーライド
にてるけど違うもの
オーバーライドは
スーパークラスで定義されている
インスタンスメソッドを
サブクラス内で再定義すること
これなら
元のクラスを変更せずに
独自機能の追加ができる
オーバーロードは
同一クラス内で
メソッド名が同じで
引数の型、数、並び方が異なるメソッドを
複数定義すること
これだと
メソッド名は同じだけど
引数の型や数で
異なる振る舞いができるのがメリット
つまり、オーバーライドは
機能追加
オーバーロードは
同じメソッド名だけど動きが違うものをつくるようなかんじ

Androidとバイブレータ

vibrate()は
バイブレータ(vibrator)
を振動させる
Vibrator()インスタンスを取得するには
getSystemService(VIBRATOR_SERVICE)
を呼び出す
そして
vibrator.vibrate()
で振動する
第一引数には
振動パターン
パターンはミリ秒単位で
OFF/ONの順で設定
第2引数には
repeat、つまり繰り返しを指定
-1を設定すると繰り返しはしなくなる
第2引数を0以上にすると
パターンを繰り返す
ただし
1や2を指定すると
繰り返しを開始する位置が変わる