- 浏览: 674454 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
传感器一般用于游戏中,在 Android 系统中为了用户开发方便,提供了大量的传感器支持,要想取得这些传感器的使用,则必须依靠 getSystemService() 方法完成,通过查找指定的服务名称 Context.SENSOR_SERVICE 取得传感器服务之后,实际上返回的只是一个 android.hardware.SensorManager 类的对象,该类的常量及常用方法如下:
No. |
常量与方法 |
描述 |
1 |
Public static final int SENSOR_DELAY_GAME |
适合游戏的传感器 |
2 |
Public Boolean registerListener(SensorEventListener listener,Sensor Sensor,int rate) |
注册传感器监听器 |
3 |
Public Sensor getDefaultSensor(int type) |
取得指定类型传感器对象 |
在上面中的 getDefaultSensor 方法需要一个传感器类型的数值,该数值是由 android.harware.Sensor 类中定义的常量来决定的,在 Android 中支持的传感器类型如下:
No. |
传感器类型 |
描述 |
1 |
android.hardware.Sensor.TYPE_ORIENTATION |
方位传感器 |
2 |
android.hardware.Sensor.TYPE_MAGNETIC_FIELD |
磁场传感器 |
3 |
android.hardware.Sensor.TYPE_ACCELEROMETER |
加速传感器 |
4 |
android.hardware.Sensor.TYPE_GRAVITY |
重力传感器 |
5 |
android.hardware.Sensor.TYPE_GYROSCOPE |
螺旋仪传感器 |
6 |
android.hardware.Sensor.TYPE_LIGHT |
亮度传感器 |
7 |
android.hardware.Sensor.TYPE_LINEAR_ACCELERATION |
直线加速传感器 |
8 |
android.hardware.Sensor.TYPE_PRESSURE |
压力感应传感器 |
9 |
android.hardware.Sensor.TYPE_PROXIMITY |
接近传感器 |
10 |
android.hardware.Sensor.TYPE_TEMPERATURE |
温度传感器 |
11 |
android.hardware.Sensor.TYPE_ROTATION_VECTOR |
矢量旋转传感器 |
12 |
android.hardware.Sensor.TYPE_ALL |
使用全功能传感器 |
实际上对于传感器的操作主要就在操作的监听上,而如果要监听,则必须依靠 android.hardware.SensorEventListener 接口完成,定义如下:
public interface SensorEventListener{ /** * @descrption 传感器精度改变时调用 * @param sensor 传感器对象 * @param accuracy 新的传感器精度 */ public abstract void onAccuracyChanged(Sensor sensor,int accuracy); /** * @descrption 传感器数值改变时调用 * @param event传感器操作事件 */ public abstract void onSensorChanged(SensorEvent event); }
一、 方位传感器—移动小球
BallView.java
package com.iflytek.demo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.AttributeSet; import android.view.View; public class BallView extends View implements SensorEventListener { private Bitmap ball = null; private float[] allValue; private Point point = new Point();// 保存点 private int xSpeed = 0;// x轴 private int ySpeed = 0;// y轴 public BallView(Context context, AttributeSet attrs) { super(context, attrs); super.setBackgroundColor(Color.WHITE); // 设置底色为白色 this.ball = BitmapFactory.decodeResource(super.getResources(), R.drawable.ball);// 取得图片 SensorManager manager = (SensorManager) context .getSystemService(Context.SENSOR_SERVICE); // 现在只是找到了一个传感器,但是没有定义类型 manager.registerListener(this, manager.getDefaultSensor(Sensor.TYPE_ORIENTATION),// 方位传感器 SensorManager.SENSOR_DELAY_GAME); // 创建了一个适合于游戏操作的方位传感器 } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { // 传感器方位改变 if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { // 判断传感器方式为方位传感器 float value[] = event.values; // 取得3个轴的值 BallView.this.allValue = value; // 保存值并重绘 // postInvalidate()方法主要用于非UI线程的刷新操作 // invalidate()主要用于UI线程的刷新 super.postInvalidate(); // 刷新界面调用onDraw() } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(); // 根据传感器的数值来改变球的速度 if (this.allValue != null) { // 已经取得了数据 this.xSpeed = (int) -this.allValue[2]; // 计算X轴速度 this.ySpeed = (int) -this.allValue[1];// 设置Y轴速度 } this.point.x += this.xSpeed;// X坐标点 this.point.y += this.ySpeed;// Y坐标点 if (this.point.x < 0) {// 设置X轴坐标 this.point.x = 0; } if (this.point.y < 0) { this.point.y = 0; } if (point.x > super.getWidth() - this.ball.getWidth()) { // X轴已经显示过了 this.point.x = super.getWidth() - this.ball.getWidth(); } if (point.y > super.getHeight() - this.ball.getHeight()) { this.point.y = super.getHeight() - this.ball.getWidth(); // 设置Y 轴的边界 } canvas.drawBitmap(this.ball, this.point.x, this.point.y, p);// 重新绘制图形 } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 自定义View组件 --> <com.iflytek.demo.BallView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
二、磁场传感器—指北针
ArrowView.java
package com.iflytek.demo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.AttributeSet; import android.view.View; public class ArrowView extends View implements SensorEventListener { private Bitmap comp = null; private float[] allValue; public ArrowView(Context context, AttributeSet attrs) { super(context, attrs); super.setBackgroundColor(Color.WHITE); // 底色为白色 this.comp = BitmapFactory.decodeResource(super.getResources(), R.drawable.arrow); SensorManager manager = (SensorManager) context .getSystemService(Context.SENSOR_SERVICE); // 现在只是找到了一个传感器,但是没有定义类型 manager.registerListener(this, manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_GAME); // 创建了一个适合于游戏操作的磁场传感器 } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { // 传感器方位改变 if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { // 现在是方位传感器 float value[] = event.values; // 取得所有的偏离数据 ArrowView.this.allValue = value; // 取得三个轴的值 super.postInvalidate(); // 主线程的现实需要重绘 } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(); // 根据传感器的数值来改变球的速度 if (this.allValue != null) { // 已经取得了数据 float x = this.allValue[0]; float y = this.allValue[1]; canvas.restore(); // 重置绘图对象 // 设置以屏幕中心点作为旋转中心 canvas.translate(super.getWidth() / 2, super.getHeight() / 2); // 判断y轴是否为0的旋转角度 if (y == 0 && x > 0) { canvas.rotate(90); // 旋转角度为90度 } else if (y == 0 && x < 0) { canvas.rotate(270); // 旋转角度为270度 } else { // 根据x和y的值计算旋转角度,而这个角度就是依靠tan()值来计算 if (y >= 0) { canvas.rotate((float) Math.tanh(x / y) * 90); } else { canvas.rotate(180 + (float) Math.tanh(x / y) * 90); } } } canvas.drawBitmap(this.comp, -this.comp.getWidth() / 2, -this.comp.getHeight() / 2, p); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 自定义View组件 --> <com.iflytek.demo.ArrowView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1594Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2514WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(3) 与Web Service进行通讯
2012-11-26 09:40 1895这里我们的WebService使用xFire开发。 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3309对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习13-----网络通信(1) 与WEB服务器交换数据
2012-11-22 09:11 2196与Web服务器交互: 如果手机要想与 web ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1895在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2887一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1415在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 1995一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1626一、绘制简单图 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3507一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (8) 桌面显示组件:AppWidget
2012-11-02 08:36 2038一、 AppWidget 在使用 Androi ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1518一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2261Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (5) Service
2012-10-30 08:25 1738Service 基本组成: ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1554在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (3) ActivityGroup
2012-10-26 08:23 2317导航栏在 Android 中的应用是很常见的,前面 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1287Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 2011在一个项目之中,会由多个 Activity ... -
Android判断是否有网络连接
2013-04-25 16:34 1441Android中判断有时候因为功能的需求,需要判断是否有网络 ...
相关推荐
在Android开发中,指南针应用是一种常见的功能,它利用设备内置的传感器来指示地球的磁场北。...开发者可以通过修改和学习这个项目,深入了解Android传感器的使用和数据处理技巧,提升自己的Android应用开发能力。
1. **硬件调试**:在开发智能硬件或嵌入式系统时,可以通过Android手机连接设备进行调试,查看硬件的运行状态和数据交换情况。 2. **物联网应用**:在物联网场景下,Android设备可以通过串口连接各种传感器或控制器...
在Android平台上实现SLAM,意味着我们可以将这项技术应用于智能手机和平板电脑等移动设备,使其具备导航和避障的能力。本项目提供的源代码利用了Android系统的开放性,集成多种传感器(如摄像头、陀螺仪、加速度计等...
《浅析Android手机传感器机制及应用设计举例》这篇文章主要探讨了Android智能手机中传感器的工作机制以及如何利用这些传感器进行应用设计。Android系统为开发者提供了丰富的传感器接口,使得开发者能够充分利用手机...
在Android系统中,加速度传感器是一种重要的硬件组件,它能够检测设备在三维空间中的线性加速度。...通过实践和研究提供的源码,可以深入学习Android传感器框架的使用,提升Android应用开发的专业技能。
首先,要获取手机传感器,你需要导入Android的SensorManager服务。在你的Activity或Service中,可以通过以下方式获取SensorManager实例: ```java SensorManager sensorManager = (SensorManager) getSystemService...
通过分析和学习这个源代码,开发者能够掌握如何在Android应用中有效使用姿态传感器,创建动态响应的用户界面,或者开发依赖于设备位置和运动的应用。同时,也能理解如何优化传感器数据处理,提高应用的性能和用户...
在Android平台上,传感器技术是移动应用开发中的一个重要组成部分,它为开发者提供了与设备硬件交互的能力,从而实现各种创新的功能。本示例源码主要涵盖了三种常见的传感器:加速度传感器、方位传感器和光线传感器...
Google Android 操作系统中内置了很多传感器,比如 G1 自带了一个非常实用的加速感应器 (微型陀螺仪),有了它,G1 手机就支持重力感应、方向判断等功能,在部分游戏或软件中可以自动识别屏幕的横屏、竖屏方向来改变...
在Android平台上,开发一款应用程序来获取手机陀螺仪传感器数据并计算手机相对于初始位置的旋转角度是一项技术性任务。陀螺仪传感器是移动设备中的一种关键硬件,它能够检测设备在三维空间中的角速度变化,这对于...
在现代科技领域,Android设备的广泛应用不仅局限于智能手机和平板电脑,它还被广泛用于与各种硬件设备的交互,例如通过USB接口与下位机进行通信。"Android-USB-Serial-Monitor-Lite"就是这样一个工具,它为开发者和...
4. **代码案例**:压缩包中的代码是实际可运行的示例,有助于开发者理解和学习如何在Android应用中集成物联网功能。 5. **开源**:意味着源代码可供任何人查看、使用、修改和分发,遵循特定的开源许可证。这种开放...
"Android传感器应用实例"是一个专为学习Android传感器开发而设计的项目,通过两个具体的Activity,深入浅出地展示了如何利用Android的传感器API。 第一个Activity的主要目标是展示手机中的传感器数量和类型。在...
本文将详细介绍一款名为“Android-Fall-Detection”的应用,它是一款专为老人设计的跌倒检测系统,利用Android智能手机的内置加速度传感器来实时监测并预防可能的跌倒事件。 首先,我们要理解跌倒检测系统的工作...
通过学习和分析源码,开发者不仅可以掌握Android传感器的使用,还能了解到如何将硬件数据转化为有意义的用户界面信息。这对于进行Android移动开发App的毕业设计或论文撰写具有很高的参考价值。在实践中,你可以...
### Android硬件传感器知识点详解 #### 一、引言 随着移动技术的发展,智能手机已经成为人们日常生活中不可或缺的一部分。而其中,Android系统因其开放性和灵活性而受到广泛欢迎。Android设备上配备的各种传感器更...
- 学习和理解Android的生命周期管理,确保在适当的时候启动和停止传感器服务。 - 掌握Android的权限管理,因为访问传感器可能需要特定的权限。 - 了解不同设备间传感器的差异,因为不同硬件供应商的传感器性能可能不...
总的来说,Android-nRF-Toolbox-master项目为我们提供了一个实用的平台,通过它可以学习和实践Android与蓝牙设备的通信,特别是在低功耗蓝牙领域。对于开发者而言,这不仅是一个工具,更是一个学习和创新的起点。...
Android 加速度和陀螺仪传感器 Android 加速度和陀螺仪传感器是 Android 设备中两种常用的传感器,...通过学习和掌握加速度和陀螺仪传感器的原理和应用,可以更好地开发 Android 应用程序,实现更加智能和高效的应用。