Android重力感应

合集下载

Android开发学习之UnIty3D重力感应

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手机这样用

Android手机这样用
A nd i r o d手机这 样用 Andr i 形象 机 器人 d的 o
■ 文 /方 错 勇
是怎么来 的
如 果你 知 道 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用法

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 简介

Android之Sensor 简介
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(重力感应器)是一种能够测量物体受到的加速度的传
感器,它可用于智能手机、汽车、安全设备等领域。

其工作原理是基
于牛顿第二定律,即力等于质量乘以加速度,通过测量物体的加速度
来判断物体受到的力的大小。

G-sensor采用微机电系统(MEMS)技术,将一个微小的质量块放
置在一个感应薄膜上,当物体发生加速度时,质量块就会在薄膜上运动,并且由于惯性力的作用,薄膜受到的力也会随之发生变化。

这时,电容式传感器会检测感应薄膜的变化,根据变化的程度来计算出物体
受到的加速度。

G-sensor的灵敏度很高,能够感知非常微小的加速度变化。

当手
机进行晃动、旋转、倾斜等操作时,G-sensor就能够感知到加速度的
变化,进而控制手机屏幕的自动旋转、游戏的重力感应等功能。

在汽
车领域,G-sensor可以用于判断车辆是否发生了侧翻、碰撞等情况,
从而触发安全气囊的开启。

总之,G-sensor利用微机电系统技术实现了对物体加速度的测量,其应用领域非常广泛,让我们的生活更加方便、安全。

手机重力感应原理

手机重力感应原理

手机重力感应原理
手机重力感应原理是一种基于重力的传感技术,能够感知手机在空间中的方向和倾斜角度。

它使用了一种叫做加速度计的传感器,通过测量手机在三个轴向(X、Y和Z轴)上的加速度
来确定手机的方向和倾斜角度。

加速度计是一种微小的电子器件,通常使用微机械系统(MEMS)技术来制造。

它由微小的质量块组成,固定在一个弹簧上。

当手机发生加速度时,质量块会相对于弹簧发生位移,这个位移会被转换为电信号,并被手机的处理器解读。

手机的重力感应功能是通过不同轴向上的加速度来实现的。

当手机处于静止状态时,重力会使得质量块向下受力,这个加速度被称为重力加速度。

通过测量重力加速度,手机可以判断手机的竖直方向以及屏幕朝上还是朝下的方向。

当手机倾斜或者旋转时,加速度计会测量到与重力加速度不同的加速度值。

手机的处理器根据这些加速度值来计算手机的倾斜角度和方向。

通过这种方式,手机能够实现自动旋转屏幕的功能,以及一些依赖于重力感应的应用程序,例如游戏中的运动控制和日历中的横屏显示。

总的来说,手机重力感应原理是通过加速度计测量不同轴向上的加速度,从而确定手机的方向和倾斜角度。

这个技术广泛应用于手机中,为用户带来了更便捷和智能的交互体验。

android实现摇一摇功能

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就达到了摇晃⼿机的状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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度,那么就是水平了!。

相关文档
最新文档