文档章节

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

樂天
 樂天
发布于 2014/05/11 19:32
字数 681
阅读 3204
收藏 22

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()方法。

© 著作权归作者所有

共有 人打赏支持
樂天
粉丝 137
博文 674
码字总数 147858
作品 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
0
OSChina 技术周刊第三期——最最常用的 100 个 Java 类

每周技术抢先看,总有你想要的! 移动开发 【博客】浅入浅出Android(014):HTTP GET获取文本内容 【博客】[Android][Android Studio] *.jar 与 *.aar 的生成 【资讯】移动 UI 模式 —— 用...

OSC编辑部
2014/10/05
4.7K
9
浅入浅出 Android 安全 翻译完成!

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

apachecn_飞龙
2016/12/05
0
0
迅为4412开发板平台-嵌入式开源平台

转载:http://www.topeetboard.com/ 4412核心板介绍 两种封装形式:Exynos4412有两种封装形式, 其中POP封装的芯片内含1GB内存, 所以不需要外扩DDR, 可大大节省 PCB 面积,功耗控制方面也更...

topeet
2015/12/15
273
0
浅入浅出 Android 安全:第一章 Android

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

apachecn_飞龙
2016/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day178-2018-12-15-英语流利阅读-待学习

“真蛛奶茶”了解一下?蜘蛛也会产奶了 Lala 2018-12-15 1.今日导读 “蛋白质含量是牛奶的 4 倍,并有着更低的脂肪和含糖量”,听起来诱人又美味的并不是羊奶或豆奶,而是你可能打死都想不到...

飞鱼说编程
17分钟前
3
0
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents

场景重现 npm install --verbose 安装依赖的时,出现如下警告 强迫症患者表示不能接受 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):npm WARN......

taadis
21分钟前
1
0
MySQL自增id超大问题查询

引言 小A正在balabala写代码呢,DBA小B突然发来了一条消息,“快看看你的用户特定信息表T,里面的主键,也就是自增id,都到16亿了,这才多久,在这样下去过不了多久主键就要超出范围了,插入...

dragon_tech
34分钟前
3
0
OSChina 周六乱弹 —— 你一口我一口多咬一口是小狗

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文 :分享Roy Orbison的单曲《She's a Mystery to Me》 《She's a Mystery to Me》- Roy Orbison 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
279
6
Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部