文档章节

浅入浅出Android(006):实时获取加速计Accelerometer的信息

樂天
 樂天
发布于 2014/05/11 19:32
字数 681
阅读 2962
收藏 22
点赞 0
评论 1

1、关于加速计Accelerometer

这篇文章对传感器做了些讲解。

Android手机一般会自带几个传感器,加速计Accelerometer是常见的一种,一些游戏APP就用到了加速计。加速计计算的是三个方向上加速度,单位是加速度基本单位m/s 2。这三个方向分别是水平的两个互相垂直的方向,一个与重力相同的方向。所以我们通过加速计获取的数据就是三个加速度。

水平的两个方向,一般是这样的:把手机放平,其中一个加速度方向是与手机的短边平行的,另一个方向是与手机的长边平行。

在android系统中传感器的运行状态是通过系统服务SensorManager提供的。

笔者的虚拟机中Android系统版本为4.4。

2、如何获取加速计信息


以下代码参考自 http://webtutsdepot.com/2011/08/20/android-sdk-accelerometer-example-tutorial/

2.1、新建Android项目

2.2、修改布局文件layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="加速计实时数据"
            />
    <TextView
            android:id="@+id/xcoor"
            android:text="X Coordinate: "
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    <TextView
            android:id="@+id/ycoor"
            android:text="Y Coordinate: "
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    <TextView
            android:id="@+id/zcoor"
            android:text="Z Coordinate: "
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
</LinearLayout>

2.3、修改java代码

package com.example.HelloWorld;

import android.app.Activity;
import android.os.Bundle;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.TextView;


public class MyActivity extends Activity implements SensorEventListener{

    private SensorManager sensorManager;

    TextView xCoor; // declare X axis object
    TextView yCoor; // declare Y axis object
    TextView zCoor; // declare Z axis object

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        xCoor=(TextView)findViewById(R.id.xcoor); // create X axis object
        yCoor=(TextView)findViewById(R.id.ycoor); // create Y axis object
        zCoor=(TextView)findViewById(R.id.zcoor); // create Z axis object

        sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
        // add listener. The listener will be MyActivity (this) class
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);

    }

    // 当精度发生变化时调用
    public void onAccuracyChanged(Sensor sensor,int accuracy){

    }

    // 当sensor事件发生时候调用
    public void onSensorChanged(SensorEvent event){

        // check sensor type
        if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){

            // assign directions
            float x=event.values[0];
            float y=event.values[1];
            float z=event.values[2];

            xCoor.setText("X: "+x);
            yCoor.setText("Y: "+y);
            zCoor.setText("Z: "+z);
        }
    }

    @Override
    protected void onDestroy() {
        sensorManager.unregisterListener(this);
        super.onDestroy();
    }
}

运行效果如下:



下面对代码略作分析:
sensorManager.registerListener(this,               
             sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
             SensorManager.SENSOR_DELAY_NORMAL);


registerListener()第一个参数指定监听器,第二个参数指定传感器,第三个参数指定监听器更新的频率。第一个参数之所以使用this,是因为 MyActivity继承了SensorEventListener接口。该接口中只有两个方法:
//传感器精度改变时调用
public abstract void onAccuracyChanged (Sensor sensor, int accuracy) 

//传感器获取的数值改变时调用
public abstract void onSensorChanged (SensorEvent event)


上面的示例中并没有去具体化onAccuracyChanged()方法,而具体化了onSensorChanged()方法。

© 著作权归作者所有

共有 人打赏支持
樂天
粉丝 133
博文 669
码字总数 147271
作品 3
深圳
程序员
加载中

评论(1)

hongyh
hongyh
不错,写一个微信摇一摇
浅入浅出Android(007):看看你的手机上有哪些传感器

请先参考浅入浅出Android(006):实时获取加速计Accelerometer的信息。 不多说,先上代码再配图。 1、建立android项目 2、修改布局layout/main.xml <?xml version="1.0" encoding="utf-8"?...

樂天 ⋅ 2014/05/11 ⋅ 0

浅入浅出 Android 安全 翻译完成!

浅入浅出 Android 安全 翻译完成! 作者:Yury Zhauniarovich 译者:飞龙 来源:Yury Zhauniarovich | Publications 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓库 赞助我 协议 CC BY-NC-SA ...

apachecn_飞龙 ⋅ 2016/12/05 ⋅ 0

浅入浅出 Android 安全:第一章 Android

第一章 Android 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 Android 安全架构的理解不仅帮助我了解 Android 的工作原理,而且为我开启了如何构建移动操作系...

apachecn_飞龙 ⋅ 2016/11/27 ⋅ 0

浅入浅出 Android 安全:第三章 Android 本地用户空间层安全

第三章 Android 本地用户空间层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 本地用户空间层在 Android 操作系统的安全配置中起到重要作用。 不理解在该...

apachecn_飞龙 ⋅ 2016/12/02 ⋅ 0

Android学习之教你五步搞定Sensor,让程序更酷

首先介绍下,啥叫传感器。 Sensor(传感器): 维基百科告诉我:传感器是接收信号或刺激并反应的器件,能将待测物理量或化学量转换成另一对应输出的装置。 比如:重力传感器,方向传感器 An...

qq_41405257 ⋅ 05/29 ⋅ 0

浅入浅出 Android 安全:第五章 Android 应用层安全

第五章 Android 应用层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 虽然在这一节中我们描述了应用层的安全性,但是实际的安全实施通常出现在到目前为止...

apachecn_飞龙 ⋅ 2016/12/02 ⋅ 0

浅入浅出 Android 安全:第六章 Android 安全的其它话题

第六章 Android 安全的其它话题 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 在本章中,我们会涉及到与 Android 安全相关的其他主题,这些主题不直接属于已经...

apachecn_飞龙 ⋅ 2016/12/02 ⋅ 0

浅入浅出 Android 安全:第四章 Android 框架层安全

第四章 Android 框架层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 如我们在第1.2节中所描述的那样,应用程序框架级别上的安全性由 IPC 引用监视器实现...

apachecn_飞龙 ⋅ 2016/12/05 ⋅ 0

浅入浅出 Android 安全:第二章 Android Linux 内核层安全

第二章 Android Linux 内核层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 作为最广为人知的开源项目之一,Linux 已经被证明是一个安全,可信和稳定的软...

apachecn_飞龙 ⋅ 2016/11/30 ⋅ 0

AndroidThings之基础一 基本概念

转载自:https://blog.csdn.net/weixin41636248/article/details/79069994 Android Things是什么 一句话说,AndroidThings就是让开发者可以使用Android开发工具开发嵌入式设备。 If you can...

qq_28831197 ⋅ 05/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 16分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 35分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 59分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 今天 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 今天 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 今天 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 今天 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部