注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

Android传感器使用实例1  

2011-05-31 13:35:16|  分类: Android基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
以下仅是传感器使用实例,关于传感器的详细简绍请参考《Android传感器的环境监控》。
文件1:Main.java
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Map.Entry;

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

public class Main extends Activity  implements SensorEventListener{
private TextView tvAccelerometer;
   private TextView tvMagentic;
   private TextView tvLight;
   private TextView tvOrientation;
   private TextView tvSensors;
   private TextView tvAccuracy;
   SensorManager sensorManager;
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       //  获得SensorManager对象
       sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
       tvAccelerometer = (TextView) findViewById(R.id.tvAccelerometer);
       tvMagentic = (TextView) findViewById(R.id.tvMagentic);
       tvLight = (TextView) findViewById(R.id.tvLight);
       tvOrientation = (TextView) findViewById(R.id.tvOrientation);
       tvSensors = (TextView)findViewById(R.id.tvSensors);
       tvAccuracy=(TextView)findViewById(R.id.tvAccuracy);
       //  获得当前手机支持的所有传感器
       tvSensors.setText("当前手机支持的所有传感器:\n");
       List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
       for(Sensor sensor:sensors)
       {
           //  输出当前传感器的名称
           tvSensors.append(sensor.getName() + "\n");
       }
   }
   public void onResume()
   {
    super.onResume();
    registerSensorListener();
   }
   public void onPause()
   {
    unRegisterSensorListener();
    super.onPause();
   }
   private void registerSensorListener()
   {
       //  注册加速度传感器
       sensorManager.registerListener(this,
               sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
               SensorManager.SENSOR_DELAY_FASTEST);

       //  注册磁场传感器
       sensorManager.registerListener(this,
               sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
               SensorManager.SENSOR_DELAY_FASTEST);

       //  注册光线传感器
       sensorManager.registerListener(this,
               sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
               SensorManager.SENSOR_DELAY_FASTEST);

       //  注册方向传感器
       sensorManager.registerListener(this,
               sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
               SensorManager.SENSOR_DELAY_FASTEST);

   }
   private void unRegisterSensorListener()
   {
    sensorManager.unregisterListener(this);
   }
   @Override
   public void onSensorChanged(SensorEvent event)
   {
       //  通过getType方法获得当前传回数据的传感器类型
       switch (event.sensor.getType())
       {
           case Sensor.TYPE_ACCELEROMETER:            //  处理加速度传感器传回的数据
               String accelerometer = "加速度\n" + "X:" + event.values[0] + " "
                       + "Y:" + event.values[1] + " " + "Z:" + event.values[2];
               tvAccelerometer.setText(accelerometer);
               break;
           case Sensor.TYPE_LIGHT:                    //  处理光线传感器传回的数据
               tvLight.setText("亮度:" + event.values[0]);
               break;
           case Sensor.TYPE_MAGNETIC_FIELD:            //  处理磁场传感器传回的数据
               String magentic = "磁场\n" + "X:" + event.values[0] + " " + "Y:"
                       + event.values[1] + " " + "Z:" + event.values[2];
               tvMagentic.setText(magentic);
               break;
           case Sensor.TYPE_ORIENTATION:                //  处理方向传感器传回的数据
               String orientation = "方向\n" + "X:" + event.values[0] + " "
                       + "Y:" + event.values[1] + " " + "Z:" + event.values[2];
               tvOrientation.setText(orientation);
               break;
       }
   }
   HashMap<String,Integer> hashMapAccuracy=new HashMap<String,Integer>();
   StringBuffer strBuffer=new StringBuffer(50);
   @Override
   public void onAccuracyChanged(Sensor sensor, int accuracy)
   {
    hashMapAccuracy.put(sensor.getName(), accuracy);
    Set<Entry<String,Integer>> set=hashMapAccuracy.entrySet();
    strBuffer.delete(0, strBuffer.length());
    for(Entry<String,Integer>entry:set)
    {
    strBuffer.append("传感器"+entry.getKey()+"的精度改变为:"+entry.getValue()+"\n");
    }
    tvAccuracy.setText(strBuffer.toString());
   }
}
文件2: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:id="@+id/tvAccelerometer" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView 
android:id="@+id/tvMagentic"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView  
android:id="@+id/tvLight" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView 
android:id="@+id/tvOrientation"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
   <TextView 
android:id="@+id/tvSensors"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
       <TextView 
android:id="@+id/tvAccuracy"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
</LinearLayout>
  评论这张
 
阅读(713)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017