Android—传感器-方向传感器

方向传感器

在安卓平台上,传感器通常使用三维坐标系来确定方向,这个坐标系是一个数值,通过获取该数值便可以确定所处的方向,,系统返回的值时长度为三的float数组,包含三个方向的值(X,Y,Z)

1.如何获取坐标系的值

在这里插入图片描述

通过onSensorChanged中的参数SensorEvent event,即可获取坐标系的值,event值是float[]类型,而且最多有三个参数,这三个对应关系如下
下面的操作都是手机朝上水平放在桌面上,values=0

  • values[0]:方位角,手机绕着Z轴旋转的角度,0-正北(North),90-正东(East),180-正南(South),270-正西(West)
  • values[1]:倾斜角,手机翘起来的程度,手机绕着X周旋转,取值[ -180 ~~ +180 ],手机顶部翻到桌面(0~ -180),底部翻到桌面(0~+180)
  • values[2]:滚动角,沿着Y轴的滚动角度,取值[ -90 ~~ +90 ],从左侧抬起到垂直桌面[0 ~~ -90 ],右侧抬起到垂直[ 0 ~~ +90 ],在垂直位置继续转动,值还在[ -90 ~~ +90 ]之间变化

2.实例,获取手机中坐标系的值

①在xml文件里设置TextView组件输出值
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}"
    android:orientation="vertical"
    android:gravity="center"
     >

    <TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#0000ff"
        android:textSize="40sp"
        />
    <TextView
        android:id="@+id/tv2"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#ff0000"
        android:textSize="40sp"
         />
    <TextView
        android:id="@+id/tv3"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#00ff00" 
        android:textSize="40sp"
        />
</LinearLayout>
②java文件
                                                 `接口SensorEventListener`
public class SensorTextActivity extends Activity implements SensorEventListener{
	
	`定义文本框`
	private TextView tv1;
	private TextView tv2;
	private TextView tv3;

	`定义传感器管理器`
	private SensorManager sManager;

	`定义方向传感器`
	private Sensor mSensorOrientation;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sensor_text);
		
		`绑定文本组件`
		tv1 = (TextView) findViewById(R.id.tv1);
		tv2 = (TextView) findViewById(R.id.tv2);
		tv3 = (TextView) findViewById(R.id.tv3);
		`获取传感器管理器`
		sManager = (SensorManager) getSystemService(SENSOR_SERVICE);
		
		`获取方向传感器`
		mSensorOrientation = sManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
		
		`注册传感器事件监听`
		sManager.registerListener(this, mSensorOrientation, SensorManager.SENSOR_DELAY_UI);
}
	@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		
		tv1.setText("方位角:"+(float) (Math.round(event.values[0] * 100))/100);
		tv2.setText("倾斜角:"+(float) (Math.round(event.values[1] * 100))/100);
		tv3.setText("滑动角:"+(float) (Math.round(event.values[2] * 100))/100);
		
	}
	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO Auto-generated method stub		
	}
}

效果:::
在这里插入图片描述

附加

设置一个角度:触发效果

	@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		
		tv1.setText("方位角:"+(float) (Math.round(event.values[0] * 100))/100);
		tv2.setText("倾斜角:"+(float) (Math.round(event.values[1] * 100))/100);
		tv3.setText("滑动角:"+(float) (Math.round(event.values[2] * 100))/100);
		`添加的代码`
		float aa=((float) (Math.round(event.values[0] * 100))/100);
		float bb=((float) (Math.round(event.values[1] * 100))/100);
		if((aa>=0&&aa<=360)&&(bb>=-110&&bb<=-60)){
			Toast.makeText(this, "偷拍心爱的人!!", Toast.LENGTH_SHORT).show();
		}
	}

效果:::
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页