Android開発 - 加速度センサー
2011/07/10 23:52Update
Androidのセンサーの基本的な利用方法と加速度センサーの利用方法例です。
はじめに
Android開発入門 Hello world
Android開発 ドラッグ&ドロップでアプリにウィジェット追加
Android開発 - 副画面を作成センサーの利用方法(手順)について
■センサー関連のクラス
android.hardware.Sensor;
android.hardware.SensorEvent;
android.hardware.SensorEventListener;
android.hardware.SensorManager;
■センサー利用の手順として
1)SensorManagerインスタンスを取得
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
2)センサーを取得
例えば、加速度センサーの取得の場合
//加速度センサーリスト List<Sensor> accelerometerSensorList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
3)センサーのイベント・リスナー登録
Sensor accelerometerSensor = accelerometerSensorList.get(0); sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_FASTEST);
4)SensorEventListener.onSensorChanged(SensorEvent event)を実装
Androidが提供しているセンサーの種類について
Sensor.TYPE_ALL 全部のセンサー
Sensor.TYPE_ACCELEROMETER 加速度センサー
Sensor.TYPE_GYROSCOPE ジャイロスコープセンサー
Sensor.TYPE_LIGHT 照度(環境光)センサー
Sensor.TYPE_MAGNETIC_FIELD 地磁気センサー
Sensor.TYPE_ORIENTATION 方位(非推奨)センサー
Sensor.TYPE_PRESSURE 加圧センサー
Sensor.TYPE_PROXIMITY 接近センサー
Sensor.TYPE_TEMPERATURE 温度センサー
Sensor.TYPE_ACCELEROMETER 加速度センサー
Sensor.TYPE_GYROSCOPE ジャイロスコープセンサー
Sensor.TYPE_LIGHT 照度(環境光)センサー
Sensor.TYPE_MAGNETIC_FIELD 地磁気センサー
Sensor.TYPE_ORIENTATION 方位(非推奨)センサー
Sensor.TYPE_PRESSURE 加圧センサー
Sensor.TYPE_PROXIMITY 接近センサー
Sensor.TYPE_TEMPERATURE 温度センサー
以下は加速度センサーの利用方法例です。
レイアウト
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="センサー名:" android:id="@+id/textView1"></TextView> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:id="@+id/sensorName"></TextView> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="センサー値を取得:" android:id="@+id/textView3"></TextView> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:id="@+id/sensorValue"></TextView> </LinearLayout>
Activityクラス
AccelerometerSensorActivity.java
package com.syboos.android;
import java.util.List;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
//加速度センサーの利用方法
public class AccelerometerSensorActivity extends Activity implements
SensorEventListener {
//センサー・マネージャ
private SensorManager sensorManager;
//センサー表示関連のTextView
private TextView sensorName; //センサー名
private TextView sensorValue; //センサー値
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sensor);
//センサー表示
sensorName = (TextView)findViewById(R.id.sensorName);
sensorValue = (TextView)findViewById(R.id.sensorValue);
////////////////////////////////////////
//SensorManagerインスタンスを取得
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
//加速度センサー リストを取得
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
//sensorManager.getSensorList(Sensor.TYPE_ALL); すべてのセンサーを取得
if (sensorList != null && !sensorList.isEmpty()) {
//1個目のセンサーを取得
Sensor sensor = sensorList.get(0);
//取得したセンサーに リスナーを設定
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
sensorName.setText("加速度センサー:" + sensor.getName());
}
}
/*
* センサーの精度が変更された時に呼び出される
*/
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//今回は利用しない
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onStop() {
super.onStop();
sensorManager.unregisterListener(this);
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
//加速度センサーの場合
float x = event.values[SensorManager.DATA_X]; //X軸
float y = event.values[SensorManager.DATA_Y]; //Y軸
float z = event.values[SensorManager.DATA_Z]; //Z軸
this.sensorValue.setText(
"[X軸=" + x + "] " +
"[Y軸=" + y + "] " +
"[Z軸=" + z + "] ");
}
}
}
結果確認
こんな感じです。
Sponsored Link
Comments
- Relative Articles
- Android開発 - 位置情報取得のGPSセンサーの利用 - (2011/07/14 01:35)
- Android開発 - WIFIの使用方法概要 - (2011/07/13 00:39)
- Android開発 - 電話番号やネットワーク回線などの端末情報を取得 - (2011/07/12 23:11)
- Android開発 - TabActivityでタブ画面の作成 - (2011/07/12 00:31)
- Android開発 - 方位センサー - (2011/07/10 22:17)
- Android開発 - 画面間のデータ転送 - (2011/07/10 03:25)
- Android開発 - 画面間の遷移 - (2011/07/10 01:34)
- Android開発 - 副画面を作成 - (2011/07/09 20:02)
- Android開発 ドラッグ&ドロップでアプリにウィジェット追加 - (2011/07/09 00:45)
- Android開発入門 Hello world - (2011/07/08 23:41)