Android重力感应
Android开发学习之UnIty3D重力感应
Android开发学习之Unit3D重力感应今天想和大家分享的是基于Unity3D的重力感应。
首先简单地说一下Unity3D,Unity3D是一个支持Windwos、Android、ios、Mac、WII等多平台类型游戏的开发环境,具备可视化的编辑窗口,可以快捷、方便地对游戏场景迚行编辑,对DirectX和OpenGL具有高度的渲染能力,支持资源导入,支持物理引擎、支持光影特效、支持粒子系统,是开发跨平台游戏的首选工具。
对于Unity3D,我接触地不算很多,今天算是第一篇文章吧,我们今天就以一个的重力感应实例来开始今天的学习吧!首先打开Unity3D创建一个新的项目,项目创建完后,我们在Assets文件夹下创建一个Resources的文件夹,这里必须是Resources,否则开发环境将无法识别其中的资源。
然后我们导入一个小球的图片,命名为Ball。
紧接着,我们创建一个Scripts的文件夹来存放脚本文件,此时项目结构应该是这样的。
下面,我们在Scripts文件夹下创建一个Controls.cs的C#脚本文件。
主要代码如下:using UnityEngine;using System.Collections;public class Controls : MonoBehaviour {private Texture2D ball;private float x=0.0F;private float y=0.0F;private float mX=0.0F;private float mY=0.0F;void Start (){mX=Screen.width-x;mY=Screen.height-y;ball=(Texture2D)Resources.Load("Ball");}void OnGUI(){GUI.DrawTexture(new Rect(x,y,256,256),ball);}void Update (){x += Input.acceleration.x * 30;y += -Input.acceleration.y * 30;if(x < 0){x = 0;}else if(x > mX){x = mX;}if(y < 0){y = 0;}else if(y > mY){y = mY;}}}然后我们将这个脚本拖放到Camera上,绑定脚本,然后编译并在手机上运行,最终效果是这样的:到目前为止,这个例子存在几个问题如下:1、虽然程序中对越界问题作了处理,但是在实际测试过程中,我们发现小球还是会向屏幕右侧和下侧移动甚至消失2、小球在手机屏幕上的坐标系统似乎和Unity3D是相反的3、由于采用2D贴图,因此小球一直处于静止状态,正常的情况下小球应该会滚动。
Android手机这样用
■ 文 /方 错 勇
是怎么来 的
如 果你 知 道 Andr d 词 本 义 指 oi一 的 就 是 “ 器 人 ” ,那 么 就 会 理 解 为 机
买来 An r d 统 的 手机 后 ,还 需选 好 软 件 ,才 能 发 挥手 机 硬 件最 大 的 威 力 。 d oi系 An r i系 统支 持多 点触控 ,支 持a d od GPS 卫星定 位 ,支持 GPR 移 动 互联 ,支持 S
成 为 困 扰 手机 玩 家 的 难 题 。 要想 增 强
An r d 机的 续航 能 力 ,可参 考 以下 d oi手
几招 。
表 爱情 的牛 郎星和 织 女 星 ,而 你并 变 化 ,并 显示 出 星星 的编 号和 星座
非 一个 天文 爱好者 ,对 星星知 之 甚 的虚拟 连线 形状 。
1 n ri 典手 机里程 碑为 例 ,讲 iA dod . dod  ̄ 经 # n ri 手机 有趣 的应 用 。
拥有了An d - dr - 机系统 的所有权 , oi T
而 An d d oi系统 正 式 发 布于 2 0 年 , r 0 7
制 造浪 漫 和女友一 起仰望星空 _
An r i dod手机节能那几招
如 何 让 手 机 有 更 长 的 待 机 时 间
星 空 ,满 天 繁 星 ,何 其 壮 观 !不 运 行 ,就 可 以看 到手机 朝 向的星 空
过 ,若 女友 指着 天空 的一 颗星 问你 图 了。手 机指 向天空 的 哪个地 方 ,
这 是什 么星 ,或者 希 望一 起找 到代 那 个地 方 星空 图就 会直 接 在屏 显 示
gsensor用法
gsensor用法
G-Sensor(重力感应器)是智能手机上最常见的传感器之一,用于检测设备的加速度和旋转,以及重力的方向。
它的使用方法非常广泛,基本上所有的智能手机和平板电脑都配有G-Sensor传感器。
G-Sensor的主要用途是用于检测设备的加速度,以便更好地调整屏幕的显示方向。
例如,当您拿起智能手机时,G-Sensor会检测设备的加速度,这样您可以更好地控制屏幕的显示方向。
此外,在游戏和应用程序中,G-Sensor可以用来检测手机的旋转,以便更好地控制角色的运动,例如横冲直撞或者跳跃等等。
G-Sensor的另一个重要用途是用于检测重力的方向。
例如,当您翻转手机时,G-Sensor会立即检测到手机的变化,并根据新的重力方向调整屏幕显示方向。
当您移动手机时,G-Sensor也会检测变化,以便调整屏幕显示,以获得更好的视觉效果。
此外,G-Sensor还可以应用于虚拟现实领域。
虚拟现实需要提供实时反馈,以便用户可以体验到真实的动态环境,而G-Sensor可以帮助用户更好地感受到虚拟现实的尖端体验。
G-Sensor的使用方法并不复杂,只要设备的加速度和重力的方向发生变化,G-Sensor就会检测出这些变化,从而调整屏幕显示方向。
此外,G-Sensor还可以供虚拟现实应用使用,帮助用户感受到更真实的虚拟现实体验。
G-Sensor用法虽然平常,但它却可以给智能手机和平板电脑带来很多便利,可以说是提高设备使用效率的重要因素。
重力感应技术在智能手机及平板电脑中的应用分析
间的关系 , 就可以将加速度 转化为电压输出。 在结 构上 , 力感应一般 是由利用表面微机 电技术所 制作 重
的传感 器单元、 讯号条 件 电路 ̄ A C 出组 成 。 HD输 在重 力传感 器 中, 传感器 单元为一 电感性 的感测 细胞 (— e 1 感 测细胞是 G c l ),
这种 坐标 朝 向永 远 是固定 的, 论将 手 机是横 拿 还是 竖 无 放。 如果手机 是静止不动 的, 速度传感 器 的矢 量方 向永 远是 加 指 向地 心的, 如果矢量 的长度 为1 的话, 称之 为1 。 G 当使用者正 拿着手机 时, 加速度传感器 的矢量为 (,1O , 向指向地心 。 0一,) 方
利用半导体材料 ( 晶硅 ) 多 和制 程 ( 光晕和蚀刻 ) 所制造 出来的
一
逆 时针旋转9 度 , 0 加速度传感 器矢量变 为 (100 再逆 时针 -,,)。
旋 转9 度 , 0 加速度传感器矢量 变又为 (,,)。 O10 如果是 以一定角 度 握持 手机 , 么这 1 的力会分布到不 同的轴上 , 取决于握 那 G 这 持手机 的方式 。 当一4 度握持 手机时, G 5 1 的力会 均匀分解 到两 个 轴上 。 正常使 用时, 加速 计在 任意轴 上都不会 检测到远 大于
力除了使 晶体发 生变形 以外 , 还将 改变 晶体的极化 状态 , 在晶 是一个我们实 际生活和数学中经常使用 的经典三 维坐标系统, 被称作 “ 笛卡尔右手 坐标系统 ” 可 以形象的理解为将右手背对 。 体内部建 立 电场, 这种 由于机 械力作用使介质极化的现象 称为 着屏幕 放置 , 指即指 向x 拇 轴的正方 向。 出食指 和中指 , 指 伸 食 压 电效 应”。 力感应 技术 就是利用 了其 内部加速度 造成 晶体 重 轴 中指所指示 的方 向即是z 的正方 向。 轴 变 形产生电压 这个 特征 , 计算 出产生电压和所施 加的加速度 之 指 向Y 的正方 向,
Android之Sensor 简介
1.Sensor Type 重力感应/加速度传感器 (G-Sensor) 光感应 (Light-Sensor) 温度感应 方向感应 磁场、 临近性
2.如何实现 Sensor 编程 a.获取系统服务(SENSOR_SERVICE)返回一个 SensorManager 对象 sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE); b.通过 SensorManager 对象获取相应的 Sensor 类型的对象 sensorObject = sensormanager.getDefaultSensor(sensor Type); c.声明一个 SensorEventListener 对象用于侦听 Sensor 事件,并重载
3.关于 G-Sensor Android 加速度传感器的类型是 Sensor.TYPE_ACCELEROMETER 通过 android.hardware.SensorEvent 返回加速度传感器值。 加速度传感器返回值的单位是加速度的单位 m/s^2(米每二次方秒),有三个方向的值分别
是 values[0]: x-axis 方向加速度 values[1]: y-axis 方向加速度 values[2]: z-axis 方向加速度
3.Window7 与 win xp 不同
Window7 下安装 SensorSimulator 的过程同上,但有点不同的地方时 adb 命令 不知道是 Android sdk 路径的问题还是其他的原因,在 Windows 7 下 CMD 命令下 无法执行 adb 命令, 需要找到 adb.exe 的文件路径下执行才可以.
该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包 括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只 提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。
g-sensor工作原理
g-sensor工作原理
G-sensor(重力感应器)是一种能够测量物体受到的加速度的传
感器,它可用于智能手机、汽车、安全设备等领域。
其工作原理是基
于牛顿第二定律,即力等于质量乘以加速度,通过测量物体的加速度
来判断物体受到的力的大小。
G-sensor采用微机电系统(MEMS)技术,将一个微小的质量块放
置在一个感应薄膜上,当物体发生加速度时,质量块就会在薄膜上运动,并且由于惯性力的作用,薄膜受到的力也会随之发生变化。
这时,电容式传感器会检测感应薄膜的变化,根据变化的程度来计算出物体
受到的加速度。
G-sensor的灵敏度很高,能够感知非常微小的加速度变化。
当手
机进行晃动、旋转、倾斜等操作时,G-sensor就能够感知到加速度的
变化,进而控制手机屏幕的自动旋转、游戏的重力感应等功能。
在汽
车领域,G-sensor可以用于判断车辆是否发生了侧翻、碰撞等情况,
从而触发安全气囊的开启。
总之,G-sensor利用微机电系统技术实现了对物体加速度的测量,其应用领域非常广泛,让我们的生活更加方便、安全。
手机重力感应原理
手机重力感应原理
手机重力感应原理是一种基于重力的传感技术,能够感知手机在空间中的方向和倾斜角度。
它使用了一种叫做加速度计的传感器,通过测量手机在三个轴向(X、Y和Z轴)上的加速度
来确定手机的方向和倾斜角度。
加速度计是一种微小的电子器件,通常使用微机械系统(MEMS)技术来制造。
它由微小的质量块组成,固定在一个弹簧上。
当手机发生加速度时,质量块会相对于弹簧发生位移,这个位移会被转换为电信号,并被手机的处理器解读。
手机的重力感应功能是通过不同轴向上的加速度来实现的。
当手机处于静止状态时,重力会使得质量块向下受力,这个加速度被称为重力加速度。
通过测量重力加速度,手机可以判断手机的竖直方向以及屏幕朝上还是朝下的方向。
当手机倾斜或者旋转时,加速度计会测量到与重力加速度不同的加速度值。
手机的处理器根据这些加速度值来计算手机的倾斜角度和方向。
通过这种方式,手机能够实现自动旋转屏幕的功能,以及一些依赖于重力感应的应用程序,例如游戏中的运动控制和日历中的横屏显示。
总的来说,手机重力感应原理是通过加速度计测量不同轴向上的加速度,从而确定手机的方向和倾斜角度。
这个技术广泛应用于手机中,为用户带来了更便捷和智能的交互体验。
android实现摇一摇功能
android实现摇⼀摇功能实现“摇⼀摇”功能,其实很简单,就是检测⼿机的重⼒感应,具体实现代码如下:⼀、在 AndroidManifest.xml 中添加操作权限⼆、实现代码1package com.xs.test;23import android.app.Activity;4import android.hardware.Sensor;5import android.hardware.SensorEvent;6import android.hardware.SensorEventListener;7import android.hardware.SensorManager;8import android.os.Bundle;9import android.os.Handler;10import android.os.Message;11import android.os.Vibrator;12import android.util.Log;13import android.widget.Toast;1415/**16 * 安卓晃动⼿机监听--“摇⼀摇”17 *18 * @author单红宇19 *20*/21public class TestSensorActivity extends Activity {2223private SensorManager sensorManager;24private Vibrator vibrator;2526private static final String TAG = "TestSensorActivity";27private static final int SENSOR_SHAKE = 10;2829/** Called when the activity is first created. */30 @Override31public void onCreate(Bundle savedInstanceState) {32super.onCreate(savedInstanceState);33 setContentView(yout.main);34 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);35 vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);36 }3738 @Override39protected void onResume() {40super.onResume();41if (sensorManager != null) {// 注册监听器42 sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 43// 第⼀个参数是Listener,第⼆个参数是所得传感器类型,第三个参数值获取传感器信息的频率44 }45 }4647 @Override48protected void onPause() {49super.onPause();50if (sensorManager != null) {// 取消监听器51 sensorManager.unregisterListener(sensorEventListener);52 }53 }5455/**56 * 重⼒感应监听57*/58private SensorEventListener sensorEventListener = new SensorEventListener() {5960 @Override61public void onSensorChanged(SensorEvent event) {62// 传感器信息改变时执⾏该⽅法63float[] values = event.values;64float x = values[0]; // x轴⽅向的重⼒加速度,向右为正65float y = values[1]; // y轴⽅向的重⼒加速度,向前为正66float z = values[2]; // z轴⽅向的重⼒加速度,向上为正67 Log.i(TAG, "x轴⽅向的重⼒加速度" + x + ";y轴⽅向的重⼒加速度" + y + ";z轴⽅向的重⼒加速度" + z);68// ⼀般在这三个⽅向的重⼒加速度达到40就达到了摇晃⼿机的状态。
android重力感应详解.
星期天在家没有事情,一边翻译sdk中onSensorChanged 的解释,一遍摸索G1下onSensorChanged 第二个参数values的含义:总结如下,发完赶紧吃饭!1 public abstract void onAccuracyChanged (int sensor, int accuracy复制代码Called when the accuracy of a sensor has changed. See SensorManager for details. Parameters:sensor The ID of the sensor being monitoredaccuracy The new accuracy of this sensor.当sensor的"精确度"发生改变的时候,该方法会被回调,详细信息请参看SensorManager 类参数:sensor 被监视的sensor的IDaccuracy 关于此sensor的新精确度描述2 public abstract void onSensorChanged (int sensor, float[] values复制代码Called when sensor values have changed. The length and contents of the values array vary depending onwhich sensor is being monitored. See SensorManager for details on possible sensor types.当sensor的值发生改变的时候被回调,values数组的元素个数和其中的内容取决于哪个sensor正在被监视,sensor的可用类型请参看SensorManager类Definition of the coordinate system used below.The X axis refers to the screen's horizontal axis (the small edge in portrait mode, the long edge inlandscape mode and points to the right.The Y axis refers to the screen's vertical axis and points towards the top of the screen (the origin isin the lower-left corner.The Z axis points toward the sky when the device is lying on its back on a table.X轴:和屏幕平行并且指向右边的轴(在portrait中使用"小边角",在landscape模式中使用"长边角")Y轴:和屏幕垂直并且指向屏幕上方的轴(坐标原点在左下角)Z轴:当设备(手机背面着地放在桌子上的时候,指向天空的方向就是Z轴IMPORTANT NOTE: The axis are swapped when the device's screen orientation changes. To access theunswapped values, use indices 3, 4 and 5 in values[].一定要大家注意的:坐标系是跟随手机屏幕的方向改变而改变的,values数组中下标为3、4、5的3个元素,使用的是恒定的坐标系,(和尚注:你可以通过这三个元素得到一个不变的坐标,游戏开发中可能会用到(和尚注:此方法的第一个参数sensor可能是SensorManager.SENSOR_ORIENTATIONSensorManager.SENSOR_ORIENTATION中的一个解释如下:SENSOR_ORIENTATION, SENSOR_ORIENTATION_RAW:All values are angles in degrees.values[0]: Azimuth, rotation around the Z axis (0<=azimuth<360. 0 = North, 90 = East, 180 = South, 270 =Westvalues[1]: Pitch, rotation around X axis (-180<=pitch<=180, with positive values when the z-axis movestoward the y-axis.values[2]: Roll, rotation around Y axis (-90<=roll<=90, with positive values when the z-axis movestoward the x-axis.所有的值都是以角度为单位的values[0]:经度,以Z轴为中心旋转(0-360之间,北方=0,东方=90,南方=180,西方=270(和尚注:这个方向指的是google标志所对的方向,为了测试这个值,手都酸了(*^__^*values[1]: 着地点(终于选了一个合适的词,以X为轴转动(-180到180,Z轴向Y 轴方向运动的相对偏移量(和尚注:当手机垂直放在面前的时候为-90,当你面对着手机屏幕看天花板的时候为180/-180,当手机屏幕朝上放在水平的桌子上的时候为0,当手机的USB口朝向天花板垂直放置的时候为90values[2]: 转动,以Y为中心转动(-90到90,Z轴向X轴方向运动的相对偏移量(和尚注:这个运动其实就是我们所说的"垂直屏幕和水平屏幕的切换"Note that this definition of yaw, pitch and roll is different from the traditional definition used inaviation where the X axis is along the long side of the plane (tail to nose.需要注意的是在传统意义上的航空定位中,X轴指的是飞机的机身,而这里的yaw、pitch、roll和它是不一样的,这里的X轴指的是飞机的水平翼(和尚注:SDK中的这个解释对于西方人可能有帮助,对于我们可能会更加迷茫,我相信我上边已经说的够清楚了。
Android手机重力感应实现简单介绍
Android 手机重力感应实现简单介绍现在有很多游戏是通过摇晃手机实现的,比如赛车游戏摇骰子游戏迷宫游戏等等。
今天我用简单的代码为大家介绍一下android 下重力感应的实现方式下面是一个模拟器的屏幕Y轴以屏幕的左下方为原点,向上为正向下为负数(刚好和编程时坐标是相反的向下为正向上为负数)。
从-10到10。
X轴以屏幕左下方为原点向左为正向右为负数取值范围从-10到10 。
Z轴朝天就是正数朝地就是负数数取值范围从-10到10 。
由此可见重力感应的取值范围都是在-10 到10之间的我们就可以根据这个数字算出速度加速度等等。
下面我介绍一下代码的实现方式[java]view plaincopy1.private SensorManager sensorMgr;2.Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);3.4.//保存上一次 x y z 的坐标5.float bx = 0;6.float by = 0;7.float bz = 0;8.long btime = 0;//这一次的时间9. sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);10. SensorEventListener lsn = new SensorEventListener() {11.public void onSensorChanged(SensorEvent e) {12.float x = e.values[SensorManager.DATA_X];13.float y = e.values[SensorManager.DATA_Y];14.float z = e.values[SensorManager.DATA_Z];15.//在这里我们可以计算出 X Y Z的数值下面我们就可以根据这个数值来计算摇晃的速度了16.//我想大家应该都知道计算速度的公事速度 = 路程/时间17.//X轴的速度18.float speadX = (x - bx) / (System.currentTimeMillis() - btime);19.//y轴的速度20.float speadY = (y - by) / (System.currentTimeMillis() - btime);21.//z轴的速度22.float speadZ = (z - bz) / (System.currentTimeMillis() - btime);23.//这样简单的速度就可以计算出来如果你想计算加速度也可以在运动学里,加速度a与速度,24.//位移都有关系:Vt=V0+at,S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a),根据这些信息也可以求解a。
智能手机上的常用传感器
Android操作系统11种传感器介绍在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用。
#define SENSOR_TYPE_ACCELEROMETER 1 //加速度#define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力#define SENSOR_TYPE_ORIENTATION 3 //方向#define SENSOR_TYPE_GYROSCOPE 4 //陀螺仪#define SENSOR_TYPE_LIGHT 5 //光线感应#define SENSOR_TYPE_PRESSURE 6 //压力#define SENSOR_TYPE_TEMPERATURE 7 //温度#define SENSOR_TYPE_PROXIMITY 8 //接近#define SENSOR_TYPE_GRAVITY 9 //重力#define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度#define SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量我们依次看看这十一种传感器1 加速度传感器加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。
该数值包含地心引力的影响,单位是m/s^2。
将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。
将手机朝下放在桌面上,z轴为-9.81。
将手机向左倾斜,x轴为正值。
将手机向右倾斜,x轴为负值。
将手机向上倾斜,y轴为负值。
将手机向下倾斜,y轴为正值。
加速度传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。
手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。
这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU 相连,数据精度小于16bit。
重力感应传感器原理
重力感应传感器原理重力感应传感器是一种可以通过感知重力加速度来测量设备方向或者倾斜角度的传感器。
它被广泛应用于手机、平板电脑、游戏机等设备中,是现代电子科技中不可或缺的一部分。
本文将介绍重力感应传感器的原理、工作方式及其应用。
一、重力感应传感器的原理重力感应传感器的原理基于牛顿第二定律,即物体的运动状态取决于施加在物体上的力。
根据万有引力定律,地球对物体产生的引力作用可以被视为施加在物体上的力,而由于万有引力论的存在,这个力始终指向地球的中心。
因此,当一个设备发生倾斜,设备中的质点重力加速度将会改变,导致在设备上出现了一个新的合成重力方向。
重力感应传感器就是利用这个原理来测量合成重力方向的大小和方向。
二、重力感应传感器的工作方式重力感应传感器通常由微机械系统(MEMS)制成。
它们由一个质量块和很多小的弹簧组成,这些弹簧允许质量块在一个封闭的空间中移动,而不会发生碰撞或接触。
重力传感器通常被放置在设备上,通过微机械系统来检测手持设备的方向和移动。
当一个设备发生倾斜,重力传感器中的弹簧被扭曲,这使得质量块的位置发生变化。
由于质量块的位置变化,其与设备之间的力关系也就发生了改变。
这个变化被转化为一个电信号,并被传输到设备的处理器中。
三、重力感应传感器的应用1.屏幕自动旋转:许多移动设备都支持屏幕旋转,以方便用户查看视频或者浏览网页。
通过重力感应传感器,设备可以自动检测设备的方向,并自动为用户旋转屏幕。
2.游戏控制:重力传感器在游戏中也被广泛应用,特别是在手机和平板电脑上。
通过倾斜或者转动设备,用户可以控制游戏人物的步伐或者方向转移。
3.振动反馈:重力传感器还可以用于实现设备的振动反馈。
当设备受到外部冲击或者振动时,设备可以通过重力传感器来感知并产生震动反馈。
4.智能健身应用:很多智能手环和智能手表中都使用了重力传感器。
通过采集用户的运动数据,设备可以监测运动员的动作变化,并根据运动工艺和动作技巧,提供详细的训练反馈和改进建议。
使用手机检测重力的方法
使用手机检测重力的方法手机检测重力是通过内置的加速度计或者陀螺仪来实现的。
这些传感器能够感知手机的加速度和角速度,从而帮助我们检测重力。
首先,我们来看一下加速度计的原理。
加速度计通过一个质量块和一条弹簧连接在一起。
当手机受到加速度时,质量块会相对于弹簧发生位移,这样就可以测量加速度。
手机中的加速度计通常是三轴的,即可以测量手机在X轴、Y轴和Z 轴方向上的加速度。
通过加速度计可以测量重力加速度的大小和方向。
在静止状态下,我们可以认为手机受到的加速度是重力加速度。
所以,如果我们将手机保持静止,并且将手机在一个平面上旋转,加速度计仍然会测量到重力加速度。
这是因为手机的旋转只会改变手机的方向,而不会改变手机受到的重力大小。
这就是为什么我们可以利用加速度计来检测重力。
通过测量手机在三个轴上的加速度,我们可以得到手机受到的重力大小和方向。
当手机保持水平时,X轴和Y 轴上的加速度将非常接近于0,而Z轴上的加速度将接近于9.8m/s²(按照地球上的重力加速度)。
如果手机被倾斜,X轴和Y轴上的加速度将不再为0,而是根据手机的倾斜角度发生变化。
除了加速度计,陀螺仪也可以被用来检测重力。
陀螺仪是一个用来测量角速度的传感器。
当手机旋转时,陀螺仪可以感知到手机的旋转速度和方向。
通过测量陀螺仪在三个轴上的角速度,我们可以得到手机的旋转状态。
当手机保持静止时,陀螺仪会测量到零角速度。
但是,当手机受到外力或者旋转时,陀螺仪将会测量到对应的角速度。
为了实现手机对重力的检测,我们可以使用手机的加速度计和陀螺仪。
一种常用的方法是结合两者的测量结果,使用计算公式进行推导和分析。
例如,可以通过加速度计和陀螺仪的数据来估计出手机的倾斜角度、旋转状态或者重力加速度的大小。
这样,我们就可以利用手机检测重力感应,实现一些重力相关的应用,比如游戏控制、屏幕自动旋转等。
需要注意的是,手机的加速度计和陀螺仪并不是完美的,会存在一些误差。
这些误差可能是由于传感器本身的精度问题,也可能是由于外界干扰引起的。
gsensor用法
gsensor用法GSensor,又称为重力感应器,是一种利用非接触式传感器来检测周围环境中的重力变化,从而控制设备行为的装置。
GSensor在智能移动设备中有着广泛的应用,例如智能手机、平板电脑等,都会在设备中安装这种重力感应器。
GSensor的使用方法主要是通过重力感应器的数据来控制设备的操作,它能够检测到环境中的重力变化,并对设备的行为产生影响。
例如,手机中的重力感应器可以通过检测重力的变化来控制屏幕方向,使设备保持始终可以正常操作。
此外,GSensor还可以用于玩游戏时的操纵,可以在智能手机上实现摇杆功能,用重力感应器代替摇杆,让玩家可以用手机左右横摇来控制角色行走方向,使玩家体验更加真实有趣。
GSensor在智能移动设备中还有其他用途。
例如,在智能手机中,重力感应器可以用来检测手机的振动,从而实现解锁功能,也可以通过重力感应器来实现智能立体音响,从而让设备的声音更加真实。
此外,重力感应器还可以被用来检测手机的位置,以便在确定位置或方向时引导用户,从而更好地提升使用体验。
因此,在智能移动设备中安装GSensor重力感应器,可以大大增强设备的功能。
然而,这种装置也存在一定的缺陷,特别是在强烈振动或磁场的影响下,它可能会出现误差,从而影响到设备的正常运行。
因此,在使用GSensor重力感应器时,需要根据设备的实际情况选择合适的传感器,以避免出现问题,同时也要根据设备的功能需求,选择合适的传感器,以便达到较高的性能。
最后,在挑选GSensor重力感应器时,还需要考虑到其价格等因素,以便让设备能够更好地满足用户的要求。
总之,GSensor重力感应器在智能移动设备中可以发挥重要作用,让设备的功能得以大大提升,但使用时也需要格外注意,以避免出现问题。
android重力感应模拟器
在模拟器上模拟重力感应众所周知,Android系统支持重力感应,通过这种技术,可以利用手机的移动、翻转来实现更为有趣的程序。
但遗憾的是,在Android模拟器上是无法进行重力感应测试的。
既然Android系统支持重力感应,但又在模拟器上无法测试,该怎么办呢?别着急,天无绝人之路,有一些第三方的工具可以帮助我们完成这个工作,本节将介绍一种在模拟器上模拟重力感应的工具(sensorsimulator)。
这个工具分为服务端和客户端两部分。
服务端是一个在PC上运行的Java Swing GUI程序,客户端是一个手机程序(apk文件),在运行时需要通过客户端程序连接到服务端程序上才可以在模拟器上模拟重力感应。
读者可以从下面的地址下载这个工具:1./p/openintents/downloads/list进入下载页面后,下载如图8.8所示的黑框中的zip文件。
将zip文件解压后,运行bin目录中的sensorsimulator.jar文件,会显示如图8.9所示的界面。
界面的左上角是一个模拟手机位置的三维图形,右上角可以通过滑杆来模拟手机的翻转、移动等操作。
下面来安装客户端程序,先启动Android模拟器,然后使用下面的命令安装bin目录中的SensorSimulatorSettings.apk文件。
1.adb install SensorSimulatorSettings.apk如果安装成功,会在模拟器中看到如图8.10所示黑框中的图标。
运行这个程序,会进入如图8.11所示的界面。
在IP地址中输入如图8.9所示黑框中的IP(注意,每次启动服务端程序时这个IP可能不一样,应以每次启动服务端程序时的IP为准)。
最后进入【Testing】页,单击【Connect】按钮,如果连接成功,会显示如图8.12所示的效果。
下面来测试一下SensorSimulator自带的一个demo,在这个demo中输出了通过模拟重力感应获得的数据。
解读:安卓手机上的三轴陀螺仪(陀螺仪测试APK)
解读:安卓⼿机上的三轴陀螺仪(陀螺仪测试APK)现在的⼿机市场上很多⼈都在关注硬件,各种参数满天飞,各种硬件都来过招,天天跑分,但是,好像很多⼈都忽视了⼀个东西,三轴陀螺仪。
三轴陀螺仪,是⼀个近两年才出现在我们视野⾥的⼀种新型的⼿机技术,它⾸次进⼊⼈们的视野是在2010年iPhone4发布的时候,作为⼀个硬件升级的重点登场。
三轴陀螺仪的原理是什么呢?陀螺仪有什么作⽤呢?你的⼿机配有陀螺仪吗?我们将在本⽂揭开各种谜底。
三轴陀螺仪⼤家已经了解了⼀些新型的⼿机功能,例如OTG、NFC,今天我们来介绍的则是三轴陀螺仪。
众所周知,iPhone4、iPhone4S、iPad2、the New iPad等明星产品都是带有陀螺仪的,⽽我们的Android阵营当然也不会⽰弱,各⼤⼚商推出的旗舰Android⼿机都是带有陀螺仪的,例如我们所熟悉的四核旗舰One X、Galaxy S3、Optimus 4X HD等都是带有陀螺仪功能的。
⽽配备陀螺仪也是将来⼿机的⼀个趋势,接下来⼀起来看看陀螺仪有什么特别之处吧。
陀螺仪英⽂名是Gyroscope,定义是⼀种⽤于测量⾓度以及维持⽅向的设备,原理是基于⾓动量守恒原理。
我们来看看陀螺仪的动态原理图,中间⾦⾊的那个转⼦则是我们的“陀螺”,它因为惯性作⽤是不会受到影响的,⽽周边三个“钢圈”则会因为设备改变姿态⽽跟着改变,通过这样来检测设备当前的状态。
⽽这三个“钢圈”所在的轴,也就是我们三轴陀螺仪⾥⾯的“三轴”即X轴、Y轴、Z轴。
三个轴围成的⽴体空间联合检测⼿机的各种动作,陀螺仪最主要的作⽤在于它可以测量⾓速度。
陀螺仪和我们最常见的重⼒感应有什么区别呢?重⼒感应是通过感应重⼒正交两个⽅向的分⼒⼤⼩,来判断⽔平⽅向,⽽陀螺仪则是⼀个⽴体的⽅向。
也因为特性上有所不同,陀螺仪的应⽤看起来会⽐重⼒感应的更炫,更拉风。
陀螺仪对⼀般⽤户来说最容易接触到的⽤途估计就是可以⽤在各种⼤型游戏上了,⽤陀螺仪操作起射击游戏来,可要⽐⽤触屏更加得⼼应⼿很多。
Android传感器的运用之ACCELEROMETER
Android传感器的运用之ACCELEROMETERAndroid中支持很多种传感器:比如加速度,重力的,光感,磁感等等。
在运用该API常用到的两个类和一个接口SensorManager:传感器管理类;Sensor:一个描述传感器的类;SensorEventListener:传感器事件监听类(SensorListener类已过期);一般运用步骤:1.通过上下文获取SensorManager的对象。
[java]view plaincopy1.Context.getSystemService(Context.Sensor_service);2.实例化一个你需要使用的sensor对象。
[java]view plaincopy1.Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);也可以通过getSensorList()来获取所有的传感器对象,返回一个list;3.实现传感器监听接口4.注册传感器5.反注册传感器代码例子都很简单简短。
以下附上我以前用到的一个关于加速度的传感器,我用来做摇晃事件监听;[java]view plaincopy1./**2. * 摇动检测器3. * @author Nono4. *5. */6.public class ShakeDetector implements SensorEventListener{7.private static final String TAG = ShakeDetector.class.getSimpleName();8.9.private static final double SHAKE_SHRESHOLD = 7000d;10.private Context mContext;11.private long lastTime ;12.private float last_x;13.private float last_y;14.private float last_z;15.16.private SensorManager sensorManager;17.private onShakeListener shakeListener;18./**19. * 构造20. * @param context21. */22.public ShakeDetector(Context context){23. mContext = context;24. sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);25. }26.27./**28. * 注册传感器29. */30.public boolean registerListener() {31.32.if (sensorManager != null) {33. Sensor sensor = sensorManager34. .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);35.if (sensor != null) {36.this.sensorManager.registerListener(this, sensor,37. SensorManager.SENSOR_DELAY_GAME);38. LogUtil.log(TAG, "registerListener: succeed!!");39.return true;40. }41. }42.return false;43. }44.45./**46. * 反注册传感器47. */48.public void unRegisterListener() {49.if (sensorManager != null)50. sensorManager.unregisterListener(this);51. }52.53.public void setOnShakeListener(onShakeListener listener){54. shakeListener = listener;55. }56.57.public void onSensorChanged(SensorEvent event) {58.//if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER){59.long curTime = ng.System.currentTimeMillis();60.if ((curTime - lastTime) > 10) {61.long diffTime = (curTime - lastTime);62. lastTime = curTime;63.float x = event.values[0];64.float y = event.values[1];65.float z = event.values[2];66.float speed = Math.abs(x + y + z - last_x - last_y - last_z)67. / diffTime * 10000;68.if (speed > SHAKE_SHRESHOLD) {69.// 检测到摇晃后执行的代码70. shakeListener.onShake();71. }72. last_x = x;73. last_y = y;74. last_z = z;75. }76.//}77. }78.79.public void onAccuracyChanged(Sensor sensor, int accuracy) {80.// TODO Auto-generated method stub81.82. }83.84./**85. *86. * @author Nono87. *88. */89.public interface onShakeListener{90.public void onShake();91. }92.93.}上面是自己实现的一个关于加速度的传感器类在Activity中实例化该类,并实现onShakeListener接口[java]view plaincopy1.@Override2.protected void onCreate(Bundle savedInstanceState) {3. requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);4.super.onCreate(savedInstanceState);5. mContext = this;6. mShakeDetector = new ShakeDetector(mContext);7. mShakeDetector.setOnShakeListener(this);然后你可以在Activity的几个生命周期中实现它的注册和反注册。
gsensor用法
gsensor用法gsensor,又称重力感应器,是一种用于测量重力加速度的现代传感器,是一种非常先进的传感器,它可以检测物体在某个方向上运动的加速度,以及物体位置的变化。
gsensor在现代电子设备中广泛应用,它可以实时检测重力加速度,而且具有较高的精度。
它可以用于对电子设备的振动、震动、位置的实时检测,并可以在重力变化的环境下提供准确的检测数据。
gsensor于设备的自动屏幕旋转功能,即手机的横竖屏切换。
通过 gsensor,设备可以自动感知用户当前的状态,并做出相应的调整,可以根据用户不同手持方式(竖屏/横屏)调整手机屏幕显示方向,进而非常方便的实现横竖屏切换,不需要用户手动调节。
另外,gsensor还可以用于玩家在游戏中的操作,它可以感知到玩家手机处于什么样的状态,并根据用户输入操作,实时响应游戏角色的移动和动作。
此外,gsensor还可以用于改变铃声的音量大小,目前许多手机中都是通过gsensor来控制铃声的音量大小。
设备内置的gsensor可以实时感知外界的环境,根据环境的振动大小,自动调节铃声的音量,以达到抑制噪音的目的。
gsensor还可以用于家居或汽车中,通过gsensor,可以实时记录车辆的旋转次数、行进距离、速度等参数,从而有效的把握当前车辆的制动或驱动状态,其参数信息可以作为精确的交通管理数据,供路况分析、交通安全性把控、车辆调试以及数据统计等方面的应用。
通过以上介绍,我们可以看出,gsensor非常实用,广泛应用于电子设备中,它在手机设备自动横竖屏切换、游戏操作、调节铃声音量大小、汽车调试和交通管理等方面均有着重要作用。
尽管 gsensor着多种应用方式,但在使用 gsensor,仍有一些注意事项需要注意。
首先,用户在长期使用 gsensor,应该注意不要对传感器施加过大的震动。
其次,在安装 gsensor,应避免受磁场影响,确保正常工作。
此外,用户在使用 gsensor,还应确保温度在正常范围内,避免温度变化对 gsensor影响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
手机的感应器在Android里边所代表的类是Sensor,你只要看到在android.hardware这个包下边的都是封装的关于一些特殊的硬件方面的类,比如说Camera、Sensor之类的。
一直都很怀疑为什么HTC的Google手机没有前置摄像头。
怨念啊。
PS:虽然是2.1的机子,但是我用的是1.5的SDK。
代码很简单:我们首先要得到一个手机上的传感器。
Java代码
1.SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
这行代码只要用过类似开发的都应该知道是什么。
getSystemService(String name)可以用来返回一个硬件设备的控制器。
比如说LocationManage(和GPS相关用来确定位置的)、TelephonyManage(查询电话相关内容,比如说IMEI码)、AudioManager(顾名思义,是视频播放用的)等等。
具体可以观看SDK文档里边Activity的讲解。
/int ... d/app/Activity.html
得到重力感应的硬件控制了,然后我们就应该得到一个Sensor了。
Java代码
1.Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ALL);
关于这个参数。
其实挺复杂的。
我开始用的是TYPE_ALL,出的是XYZ三条轴线的偏移量,至于其他的大家可以看下边:
下边是官方SDK中对于各种类型的解析(粗体红字是我加上去的)
<!-- =========== ENUM CONSTANT SUMMARY =========== -->
Constants
int TYPE_ACCELEROMETER
A constant describing an accelerometer sensor
type.加速度
int TYPE_ALL A constant describing all sensor types.所有类型,NexusOne 默认为 加速度
int TYPE_GYROSCOPE A constant describing a gyroscope sensor type 回转仪(这个不太懂)
int TYPE_LIGHT A constant describing an light sensor type.光线感应吗
int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type.磁场
int TYPE_ORIENTATION A constant describing an orientation sensor type.定向(指北针)和角度
int TYPE_PRESSURE A constant describing a pressure sensor type 压力计
int TYPE_PROXIMITY A constant describing an proximity sensor type.距离?不太懂
int TYPE_TEMPERATURE A constant describing a temperature sensor type 温度啦
然后就是我们需要即时了解手机的偏转度。
以TYPE_ALL 为例子。
(其实就是TYPE_ACCELEROMETER )
PS :有时候你的机子并不会拥有这么全的感应装置,这个时候你应该再进行以下判断。
比如说: Java 代码
1. Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_TEMPERATURE);
2.
3. if (sensor == null ){
4. log.w("NO_SERVICE","没有感应温度的感应装置。
")
5. ... ...
6. }else {
7. ... ...
8. }
所有最基本的三维坐标系有三个轴:X、Y和Z,这个学过矩阵或者线性代数的都应该知道吧
(~~~~(>_<)~~~~ 我当年线性代数挂了。
惨不忍睹啊。
后来自学DirectX的时候才觉得原来矩阵变换是这么的重要。
而且更重要的是这个一点也不难吗。
)
关于手机的XYZ坐标,把你的手机平放到桌子上,横x,纵y,然后z就是屏幕法线。
官方的例子:(直接粘贴的话空格会变小,所以就截图了)
然后我们注册一个Listener,用来监听我们所得到的值的改变。
Java代码
1.SensorEventListener lsn = new SensorEventListener() {
2.public
void onSensorChanged(SensorEvent e) {
3.x = e.values[SensorManager.DATA_X];
4.y = e.values[SensorManager.DATA_Y];
5.z = e.values[SensorManager.DATA_Z];
6.t.setText("x=" + Math.round(x * ROUND_NUMBER) + "," + "y="
7. + Math.round(y * ROUND_NUMBER) + "," + "z="
8. + Math.round(z * ROUND_NUMBER));
9. }
10.
11.public
void onAccuracyChanged(Sensor s, int accuracy) {
12. }
13. };
在这里我把数字放大了,我预先定义了一个变量ROUND_NUMBER,是为了以后用来更改灵敏度的。
我取的值是100。
这个就简单了,我们首先声明一个SensorEvent的监听,每当它得到的值改变的时候,我就在一个TextView t上边输出改变了的值。
在这里使用TYPE_ALL返回的值SensorEvent里边的values就是得到的数字。
得到的values默认是一个float[]。
也就是说是一个float类型的数组。
他在TYPE_ALL的声明下一共返回三个值,分别就是x、y、z轴的值,假如你将手机平放在水平面上,默认分别是0,0,10。
(我在网上查到有的人和我得到的数字不一样,有人说是0,0,-10,关于这个我不知道是为什么,如果有人的Gphone 比较多的话可以看看是怎么一回事),而当你将手机垂直立起,显示的应当是0,10,0。
PS:SensorManager里边有很多的有意思的常量,比如说SensorManager.GRAVITY_EARTH是地球的重力加速度,当然也有GRAVITY_MARS火星的,GRAVITY_MOON月球的,最恶搞的还有GRAVITY_DEATH_STAR_I(星球大战里的卫星武器死星I号)。
还有一个
GRAVITY_THE_ISLAND,这个不知道是哪里。
汗。
难道是《岛》这本书里的世界?还是Neverland?
然后我们可以给Manager注册一个监听。
Java代码
1.sensorMgr.registerListener(lsn, sensor,
2.SensorManager.SENSOR_DELAY_GAME);
三个参数分别是监听,感应装置,和灵敏度。
灵敏度分为:
SENSOR_DELAY_FASTEST最灵敏,快的然你无语
SENSOR_DELAY_GAME游戏的时候用这个,不过一般用这个就够了,和上一个很难看出区别(也许是我的手机CPU高?1GHz的。
)
SENSOR_DELAY_NORMAL比较慢。
SENSOR_DELAY_UI 最慢的,几乎就是横和纵的区别
也许有些人想要拿这个来练练手了。
比如说是现在每天播放的联通iPhone广告里有一个“可以用来测量相框水平”这个广告词。
但是,但是。
恩恩。
输出的最好还是角度比较好吧?
所以我们改一改,做一个基本的LevelBar。
没有什么图形界面,只是用来输出。
我们首先注册的Sensor应该改了。
不是TYPE_ALL,而是TYPE_ORIENTATION !
然后剩下的基本上都一样。
SensorEvent返回的values也是三个值的数组。
但是,这三个值还是稍微有些不同的,如果你看了输出的值,那么就可能会明白了。
首先是第一个,有些人发现就算是平放在桌面上第一个值也会变,那么,第一个值其实不是轴角度,而是方向。
对了,这就是我在随上边写的指北针!当数字是0的时候,你的手机指向的是正北方向,90的话是东,180是南,270是西。
这下子,再加上一个漂亮的图形界面,一个指南针软件就可以出来了吧。
然后是第二个和第三个,就是x,y轴的角度值!对,是角度值而且不用换算。
这样子,你可以把屏幕横过来,然后直接输出y轴的角度值了,什么时候他是90度,那么就是水平了!。