Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 856|回复: 0

[实例教程]Android 姿态传感器

[复制链接]

该用户从未签到

发表于 2011-10-22 12:17:44 | 显示全部楼层 |阅读模式
我们介绍了加速度传感器的相关知识及如何在模拟器中调试传感器的应用,本节将对传感器的另一种--姿态传感器进行介绍。姿态传感器是使用最多的传感器之一,该传感器主要感应手机方位的变化,捕获的同样是三个数,分别代表手机沿Yaw轴、Pitch轴和Roll轴转过的角度。

       Yaw轴、Pitch轴和Roll轴与平时我们理解的空间坐标系有所不同,下面分别对这三个轴所表示的含义进行详细介绍。
       Yaw轴,该轴是三个轴中最简单的一个,其表示的方向是不变的,一直是重力加速度g的反方向,即一直是竖直向上的,与手机的姿态无关。

       Pitch轴,该轴的方向并不是固定不变的,而是会随着手机沿Yaw轴旋转而改变,唯一不变的关系是该轴永远与Yaw轴成90度角,图表示了该轴的方向。实际上Yaw轴与Pitch轴相当于焊到一起的一个90度支架,无论手机怎么旋转,其与Yaw轴的角度都为90度。

效果图:




       Roll轴,该轴是沿着手机屏幕向上的轴,在图14-10中可以看到,无论手机是何种姿态,Roll轴都是沿着手机的屏幕向上的,其方向是与手机绑定的。

       介绍完姿态传感器的原理后,便通过一个简单的案例介绍如何在Android中应用姿态传感器,开发步骤如下。

       新建一个名为Sample的Android项目。

       准备字符串资源,用下列代码替换strings.xml文件内的代码。

java代码: <?xml version="1.0" encoding="utf-8"?>

<!-- 声明xml的版本及编码格式 -->

<resources>

<string name="hello">Hello World, Sample</string>

<!-- 定义字符串hello -->

<string name="app_name">Sample</string>

<!-- 定义字符串app_name -->

<string name="title">姿态传感器案例</string>

<!-- 定义字符串title -->

<string name="myTextView1">Yaw为:</string>

<!-- 定义字符串myTextView1-->

<string name="myTextView2"&gtitch为:</string>

<!-- 定义字符串myTextView2-->

<string name="myTextView3">Roll为:</string>

<!-- 定义字符串myTextView3-->

</resources>

  说明:定义程序中所需要的字符串资源,统一管理的好处是方便程序的调试与维护。
       搭建界面,编写main.xml文件,其代码与加速度传感器案例中的main.xml文件完全相同。
       编写逻辑代码,用下列代码替换Sample.java中原有的代码。

Java代码:
package eoe.demo;

//声明所在包

import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

//引入相关类

import android.app.Activity;

//引入相关类

import android.hardware.SensorListener;

//引入相关类

import android.hardware.SensorManager;

//引入相关类

import android.os.Bundle;

//引入相关类

import android.widget.TextView;

//引入相关类

public class Sample extends Activity {

TextView myTextView1;

//Yaw 10

TextView myTextView2;

//Pitch 11

TextView myTextView3;

//Roll 12

//SensorManager mySensorManager;

//SensorManager对象引用

SensorManagerSimulator mySensorManager;

//声明SensorManagerSimulator对象,调试时用



@Override

public void onCreate(Bundle savedInstanceState) {

//重写onCreate方法

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//设置当前的用户界面

myTextView1 = (TextView) findViewById(R.id.myTextView1);

//得到myTextView1的引用

myTextView2 = (TextView) findViewById(R.id.myTextView2);

//得到myTextView2的引用

myTextView3 = (TextView) findViewById(R.id.myTextView3);

//得到myTextView3的引用

//mySensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

//获得SensorManager  

//调试时用

mySensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE); mySensorManager.connectSimulator();

//与Simulator连接

}

private SensorListener mySensorListener = new SensorListener(){

@Override

public void onAccuracyChanged(int sensor, int accuracy) {}

//重写onAccuracyChanged方法

@Override

public void onSensorChanged(int sensor, float[] values) {

//重写onSensorChanged方法

if(sensor == SensorManager.SENSOR_ORIENTATION){

//只检查姿态的变化

myTextView1.setText("Yaw为:"+values[0]);

//将数据显示到TextView

myTextView2.setText("Pitch为:"+values[1]);

//将数据显示到TextView

myTextView3.setText("Roll为:"+values[2]);

//将数据显示到TextView

}

}

};

@Override

protected void onResume() {

//重写的onResume方法

mySensorManager.registerListener(

//注册监听

mySensorListener,

//监听器SensorListener对象

SensorManager.SENSOR_ORIENTATION,

//传感器的类型为姿态

SensorManager.SENSOR_DELAY_UI

//频度

);

super.onResume();

}

@Override

protected void onPause() {

//重写onPause方法

mySensorManager.unregisterListener(mySensorListener);

//取消注册监听器

super.onPause();

}

}
回复

使用道具 举报

头像被屏蔽

该用户从未签到

发表于 2012-4-25 19:40:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-12 00:47 , Processed in 0.382178 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表