Sensorを利用してandroid携帯電話を実現するのは微信の揺れに似ている.
センサにはいくつかのタイプがある:方向センサ:Sensor.TYPE_ORIENTATION加速度(重力)センサー:センサー.TYPE_ACCELEROMETER光線センサー:センサー.TYPE_LIGHT磁界センサー:Sensor.TYPE_MAGNETIC_FIELD距離(近接性)センサ:Sensor.TYPE_PROXIMITY温度センサー:Sensor.TYPE_TEMPERATURE
ここでは加速度センサを利用しています
onresumeとonpauseでsensorのリスニングイベントをスイッチしたのを覚えています.
sensorの感度を調整したい場合は、value[0,1,2]が上限より大きい値を変更します.
ここでは加速度センサを利用しています
package com.jamin.sensor;
import android.app.Activity;
import android.app.Service;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class SensorTestActivity extends Activity implements SensorEventListener{
/** Called when the activity is first created. */
TextView tv = null;
Button button = null;
SensorManager sensorManager = null;
Vibrator vibrator = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.button1);
tv = (TextView) findViewById(R.id.textview1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText(" ");
}
});
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
sensorManager.unregisterListener(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// ,Do nothing.
}
@Override
public void onSensorChanged(SensorEvent event) {
int sensorType = event.sensor.getType();
//values[0]:X ,values[1]:Y ,values[2]:Z
float[] values = event.values;
if(sensorType == Sensor.TYPE_ACCELEROMETER){
if((Math.abs(values[0])>17||Math.abs(values[1])>17||Math.abs(values[2])>17)){
Log.d("sensor ", "============ values[0] = " + values[0]);
Log.d("sensor ", "============ values[1] = " + values[1]);
Log.d("sensor ", "============ values[2] = " + values[2]);
tv.setText(" ");
// , ~~
vibrator.vibrate(500);
}
}
}
}
onresumeとonpauseでsensorのリスニングイベントをスイッチしたのを覚えています.
sensorの感度を調整したい場合は、value[0,1,2]が上限より大きい値を変更します.