android Sensor一些手机感应效果
来源:互联网 发布:淘宝客如何设置优惠券 编辑:程序博客网 时间:2024/04/30 12:36
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 事件,并重载onSensorChanged方法
SensorEventListener sensorListener = new SensorEventListener(){
};
d.注册相应的SensorService
sensormanager.registerListener(sensorListener, sensorObject, Sensor TYPE);
e.销毁相应的SensorService
sensormanager.unregisterListener(sensorListener, sensorObject);
f: SensorListener 接口是传感器应用程序的中心。它包括两个必需方法:
onSensorChanged(int sensor,float values[]) 方法在传感器值更改时调用。
该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。
当传感器的准确性更改时,将调用 onAccuracyChanged(int sensor,int accuracy) 方法。参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。
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 方向加速度
其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系坐标原点
x 方向就是手机的水平方向,右为正
y 方向就是手机的水平垂直方向,前为正
y 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负
需要注意的是,由于地球固有的重力加速度g (值为9.8 m/s^2),
因此现实中实际加速度值应该是 z方向返回值 - 9.8 m/s^2.
比如你以 2 m/s^2 的加速度将手机抛起,这时z方向的返回值应该是 11.8 m/s^2.
反之若以手机以2 m/s^2 的加速度坠落,则z方向的返回值应该是 7.8 m/s^2.
x,y方向则没有上述限制。
我自己写了一个类似于微信的摇一摇的效果,代码如下,
import android.app.Activity;import android.app.Service;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.os.Vibrator;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView; public class Sensor extends Activity implements SensorEventListener{ private TextView tv =null; private Button button = null; private SensorManager sensorManager =null; private Vibrator vibrator = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sensor); tv = (TextView) findViewById(R.id.textview1); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub tv.setText("文本复原"); } }); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); } @Override protected void onResume() { super.onResume(); sensorManager.registerListener(this, sensorManager.getDefaultSensor(android.hardware.Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this); } @Override public void onSensorChanged(SensorEvent event) { int sensorType = event.sensor.getType(); //values[0]:X轴,values[1]:Y轴,values[2]:Z轴 float[] values = event.values; if(sensorType == android.hardware.Sensor.TYPE_ACCELEROMETER){ if((Math.abs(values[0])>17||Math.abs(values[1])>17||Math.abs(values[2])>17)){ Log.d("sensor ", "============ values[0] = " + values[0]); Log.d("sensor ", "============ values[1] = " + values[1]); Log.d("sensor ", "============ values[2] = " + values[2]); tv.setText("摇一摇"+"\n"+values[0]+"\n"+values[1]+"\n"+values[2]); //摇动手机后,再伴随震动提示~~ vibrator.vibrate(500); } } } @Override public void onAccuracyChanged(android.hardware.Sensor sensor, int accuracy) { // TODO Auto-generated method stub } }
- android Sensor一些手机感应效果
- Android感应检测Sensor
- Android感应检测Sensor
- Android感应检测Sensor
- Android重力感应G-sensor
- Android感应检测Sensor(简单介绍)
- Android开发教程之感应检测Sensor
- Android感应检测Sensor(简单介绍)
- Android感应检测Sensor(简单介绍)
- Android感应检测Sensor(简单介绍)
- Android感应检测Sensor(简单介绍)
- Android感应检测Sensor(简单介绍)
- Android感应检测Sensor(简单介绍)
- android 重力感应手机方向
- Android中如何检测重力感应变化:Sensor和SensorManager
- Android Sensor感应器介绍(一)重力感应加速度获取
- Android中如何检测重力感应变化:Sensor和SensorManager
- Android 手机重力感应实现简单介绍
- else语句
- android 4.4的耳机插入检测流程
- 设计模式六大原则(1):单一职责原则
- 【UGUI】Interaction Components
- mac下sips的用法
- android Sensor一些手机感应效果
- Win7 Jekyll安装(使用64位)
- ubuntu 安装svn及svn使用指南
- Java监视系统剪贴板
- 思科CCNA第二学期第三章答案
- android sdk manager 代理设置
- sys/queue.h分析
- linux线程编程
- android EditText文本框错误提示语句