手机上的光照传感器会周围光的强度改变而产生不同的数据,SensorManager用来管理手机上的各种传感器,首先得获得一个传感器管理,然后告诉管理自己想要使用的传感器,为传感器添加监听事件,来获取传感器的数据,通过管理自己想要使用的传感器注册,使用完后要注销。其他传感器方式类同。
加速度传感器,手机在立体世界中,有一个x轴,y轴,z轴,面向地下的那个轴的加速度会接近重力加速度9.8m/s2,如果摇一摇手机,手机的加速度就会大于9.8,假设一个参考加速度为15,如果大于这个值就默认手机在摇动。
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private SensorManager sensorManager;
TextView textView;
TextView textTwo;
Button lightbtn;
Button accularbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textview);
textTwo = findViewById(R.id.textTwo);
lightbtn = findViewById(R.id.lightbtn);
accularbtn = findViewById(R.id.accularbtn);
LightSensor();
accelerSensor();
accularbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onDestroy();//注销法一
}
});
lightbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sensorManager.unregisterListener(listeners);//注销法二
}
});
}
void LightSensor()
{
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);//获得一个传感器管理
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);//获得所需传感器
sensorManager.registerListener(listeners,sensor,SensorManager.SENSOR_DELAY_NORMAL);//注册传感器
}
private SensorEventListener listeners = new SensorEventListener() {//光照传感器监听事件
@Override
public void onSensorChanged(SensorEvent event) {
float value = event.values[0];
textView.setText("Current light level is " + value + "lx");
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
void accelerSensor()//加速度传感器监听事件
{
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onDestroy()//重写onDestroy方法
{
super.onDestroy();
if(sensorManager!=null)
{
sensorManager.unregisterListener(listener);//注销
}
}
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float x = Math.abs(event.values[0]);
float y = Math.abs(event.values[1]);
float z = Math.abs(event.values[2]);
if(x>=15 || y>=15 || z>=15) {
Toast.makeText(MainActivity.this, "摇一摇", Toast.LENGTH_SHORT).show();
textTwo.setText("摇一摇");
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
}