Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 675|回复: 0

[实例教程][Android实例] Sensor传感器源码的阅读与应用开发简

[复制链接]

该用户从未签到

发表于 2011-10-22 12:46:33 | 显示全部楼层 |阅读模式
Android系统支持多种传感器。应用到各个层次,有的传感器已经在Android的框架中使用,大多数传感器由应用程序中来使用。
一.Android中支持的传感器类型:
  
  







二.Android 系统的代码分布情况:

1)传感器系统的java代码


代码路径:framework/base/core/java/android/hardware中
    目录中包含了Camera 和Sensor两部分,Sensor部分的内容为Sensor*.java 文件。

2)传感器系统的JNI部分


代码路径: framework/base/core/jni/android_hardware_SensorManager.cpp
   本部分提供了android.hardware.Sensor.Manager 类的本质支持。

3)传感器系统硬件层实现的接口


头文件路径:hardware/libhardware/include/hardware/sensors.h


传感器系统的硬件抽象层需要各个系统根据sensors.h中定义的接口去实现
Sensor部分的内容还包含了底层部分的驱动和硬件抽象层,以及上层对Sensor的调用部



三.Android的Sensor源码解析
  Android中的Sensor的主要文件为:
    Sensor.java              单一传感器描述文件
    SensorEvent.java         传感器系统的时间类
    SensorEventListener.java  传感器监听事件(是一个接口)
    SensorListener.java       传感器监听(接口)
    SensorManager.java        传感器的核心管理类


  Sensor.java中定义的是传感器常量的一些类型,如public static final TYPE_MAGNETIC_FIELD=2;
            等,具体参数参照传感器类型(图一)
    SensorManager.java   
          public Sensor getDefaultSensor(int type){获得默认的传感器}
          public List<Sensor> getSensorList(int type) {获得传感器列表}
          public boolean registerListener(SensorListener listener, int sensors) {
        return registerListener(listener, sensors, SENSOR_DELAY_NORMAL);
    }             注册监听事件
          public void unregisterListener(SensorListener listener, int sensors) {注销监听事件}


   时间关系,源码不逐一说了,大家自己有下个源码看下,如果没有源码的,给我个邮箱我给大家发这部分代码,直接上个简单的DEMO供大家认识下,好像这块的代码,在IBM的一个网站上也能找到!
四。程序代码
1)SensorActivity.java代码

package com.sensor;

import android.app.Activity;

import android.hardware.SensorEventListener;

import android.hardware.SensorListener;

import android.hardware.SensorManager;

import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;

public class SensorActivity extends Activity implements SensorListener{



final String tag = "SensorActivity";

    SensorManager sm = null;

TextView xViewA = null;

TextView yViewA = null;

TextView zViewA = null;

TextView xViewO = null;

TextView yViewO = null;

TextView zViewO = null;







    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        sm=(SensorManager)getSystemService(SENSOR_SERVICE);

        xViewA = (TextView) findViewById(R.id.xbox);

        yViewA = (TextView) findViewById(R.id.ybox);

        zViewA = (TextView) findViewById(R.id.zbox);

        xViewO = (TextView) findViewById(R.id.xboxo);

        yViewO = (TextView) findViewById(R.id.yboxo);

        zViewO = (TextView) findViewById(R.id.zboxo);

        

        

        

        

    }

@Override

public void onAccuracyChanged(int sensor, int accuracy) {

  // TODO Auto-generated method stub

  Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);

}

@Override

public void onSensorChanged(int sensor, float[] values) {

  // TODO Auto-generated method stub

    synchronized (this) {

             Log.d(tag, "onSensorChanged: " + sensor + ", x: " + values[0] + ", y: " + values[1] + ", z: " + values[2]);

             if (sensor == SensorManager.SENSOR_ORIENTATION) {

              xViewO.setText("Orientation X: " + values[0]);

              yViewO.setText("Orientation Y: " + values[1]);

              zViewO.setText("Orientation Z: " + values[2]);

             }

             if (sensor == SensorManager.SENSOR_ACCELEROMETER) {

              xViewA.setText("Accel X: " + values[0]);

              yViewA.setText("Accel Y: " + values[1]);

              zViewA.setText("Accel Z: " + values[2]);

             }            

         }

  

}





  @Override

     protected void onResume() {

         super.onResume();

         sm.registerListener(this,

                 SensorManager.SENSOR_ORIENTATION |

           SensorManager.SENSOR_ACCELEROMETER,

                 SensorManager.SENSOR_DELAY_NORMAL);

     }

     

     @Override

     protected void onStop() {

         sm.unregisterListener(this);

         super.onStop();

     }   

     

}
2)main.xml  布局文件(简单的放些TextView)
  <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    androidrientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/hello"

    />

<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Accelerometer"

    />

<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="X Value"

    android:id="@+id/xbox"

    />

<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Y Value"

    android:id="@+id/ybox"

    />

<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Z Value"

    android:id="@+id/zbox"

    />   



<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Orientation"

    />

<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="X Value"

    android:id="@+id/xboxo"

    />

<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Y Value"

    android:id="@+id/yboxo"

    />

<TextView  

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Z Value"

    android:id="@+id/zboxo"

    />   

</LinearLayout>
五:在模拟器开发测试Sensor要注意,必须要装个传感器插件,才能看到效果,可能有部分手机硬件驱动是不支持Sensor的,不过市面上流行的品牌手机一般都支持!
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 12:46:38 | 显示全部楼层

Re:[实例教程][Android实例]

研究研究
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-9 07:41 , Processed in 0.417978 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表