android传感器使用的demo,包括光线传感器,加速度传感器,距离传感器和方向传感器。

demo:下载地址

源码:

package com.bobo.study.study_5_1; import android.app.Activity;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast; import java.util.List;//1,获得SensorManager对象//2,获得想要的Sensor对象//3,绑定监听器public class MainActivity extends Activity implements View.OnClickListener{ Button findBut,accelerationBut,lightBut,orientationBut,proximityBut; SensorManager sensorManager; TextView text,accText,luxText; float gravity[]=new float[3]; float linear_acceleration[]=new float[3]; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);   findBut=(Button)findViewById(R.id.findBut);  findBut.setOnClickListener(this);  lightBut=(Button)findViewById(R.id.lightBut);  lightBut.setOnClickListener(this);  accelerationBut=(Button)findViewById(R.id.accelerationBut);  accelerationBut.setOnClickListener(this);  orientationBut=(Button)findViewById(R.id.orientationBut);  orientationBut.setOnClickListener(this);  proximityBut=(Button)findViewById(R.id.proximityBut);  proximityBut.setOnClickListener(this);   text=(TextView)findViewById(R.id.text);  accText=(TextView)findViewById(R.id.accText);  luxText=(TextView)findViewById(R.id.luxText);   //获得传感器管理器对象  sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE); }  @Override public void onClick(View v) {  if(v==findBut){   //获取手机上所有传感器的列表   List sensors=sensorManager.getSensorList(Sensor.TYPE_ALL);   for(Sensor sensor:sensors){    System.out.println(sensor.getName());   }  }else if(v==lightBut){   //得到默认的加速度传感器   Sensor lightSensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);   //绑定监听器(上下文接口,要监听的传感器,传感器采样率<时间间隔>),返回结果   Boolean res=sensorManager.registerListener(new LightSensorListener(),lightSensor,SensorManager.SENSOR_DELAY_NORMAL);   Toast.makeText(this,"绑定光线传感器:"+res,Toast.LENGTH_LONG).show();  }  else if(v==accelerationBut){   Sensor accelerometerSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);   Boolean res=sensorManager.registerListener(new AccerationSensorListener(),accelerometerSensor,SensorManager.SENSOR_DELAY_NORMAL);   Toast.makeText(this,"绑定加速度传感器:"+res,Toast.LENGTH_LONG).show();  }else if(v==orientationBut){   Sensor orientationSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);   Boolean res=sensorManager.registerListener(new OrientaationListener(),orientationSensor,SensorManager.SENSOR_DELAY_NORMAL);   Toast.makeText(this,"绑定方向传感器:"+res,Toast.LENGTH_LONG).show();  }  else if(v==proximityBut){   Sensor proximitySensor=sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);   Boolean res=sensorManager.registerListener(new ProximityListener(),proximitySensor,SensorManager.SENSOR_DELAY_NORMAL);   Toast.makeText(this,"绑定距离传感器:"+res,Toast.LENGTH_LONG).show();  } }  public class LightSensorListener implements SensorEventListener{  @Override  //传感器的数据被打包成event,主要的检测数据放在enent.values[]数组中  public void onSensorChanged(SensorEvent event) {   System.out.println(event.timestamp);//时间戳   System.out.println(event.sensor.getResolution());//分辨率(能识别出最小数值)   System.out.println(event.accuracy);//精度(等级)   System.out.println(event.values[0]);//光线强度  }  @Override  //传感器精度变化时调用这个函数  public void onAccuracyChanged(Sensor sensor, int accuracy) {} }  public class AccerationSensorListener implements SensorEventListener{  @Override  public void onSensorChanged(SensorEvent event) {   final float alpha=0.8f;    //event.values[0]X轴加速度,负方向为正   //event.values[1]Y轴加速度,负方向为正   //event.values[2]Z轴加速度,负方向为正   gravity[0]=alpha*gravity[0]+(1-alpha)*event.values[0];   gravity[1]=alpha*gravity[1]+(1-alpha)*event.values[1];   gravity[2]=alpha*gravity[2]+(1-alpha)*event.values[2];    linear_acceleration[0]=event.values[0]-gravity[0];   linear_acceleration[1]=event.values[1]-gravity[1];   linear_acceleration[2]=event.values[2]-gravity[2];    //通过以上公式可以抛去三个方向上的重力加速度,只剩下纯加速度   text.setText(linear_acceleration[0] + "");   accText.setText(linear_acceleration[1] + "");   luxText.setText(linear_acceleration[2] + "");  }  @Override  public void onAccuracyChanged(Sensor sensor, int accuracy) {} }  public class OrientaationListener implements SensorEventListener{  @Override  public void onSensorChanged(SensorEvent event) {   //(需要手机屏幕向上,向下的话南北会反掉)设备绕Z轴旋转,Y轴正方向与地磁北极方向的夹角,顺时针方向为正,范围【0,180】   float azimuth=event.values[0];   //设备绕X轴旋转的角度,当Z轴向Y轴正方向旋转时为正,反之为负,范围【-180,180】   float pitch=event.values[1];   //设备绕Y轴旋转的角度,当Z轴向X轴正方向旋转时为负,反之为正,范围【-90,90】   float roll=event.values[2];    text.setText(azimuth+"");   accText.setText(pitch +"");   luxText.setText(roll+"");  }  @Override  public void onAccuracyChanged(Sensor sensor, int accuracy) {} }  public class ProximityListener implements SensorEventListener{  @Override  public void onSensorChanged(SensorEvent event) {   //距离传感器测试手机屏幕距离别的物体的记录,只有两个值:0和5   //距离很近时为0,否则为5   System.out.println(event.values[0]+"");  }  @Override  public void onAccuracyChanged(Sensor sensor, int accuracy) {} }    @Override public boolean onCreateOptionsMenu(Menu menu) {  // Inflate the menu; this adds items to the action bar if it is present.  getMenuInflater().inflate(R.menu.menu_main, menu);  return true; } @Override public boolean onOptionsItemSelected(MenuItem item) {  // Handle action bar item clicks here. The action bar will  // automatically handle clicks on the Home/Up button, so long  // as you specify a parent activity in AndroidManifest.xml.  int id = item.getItemId();  //noinspection SimplifiableIfStatement  if (id == R.id.action_settings) {   return true;  }  return super.onOptionsItemSelected(item); }}

界面截图:

android实现手机传感器调用_第1张图片

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. android判断手势滑动方向
  2. Android 相机2之常用工具代码(预览方向、预览尺寸、全屏显示、分
  3. 获取Android设备的方向 ,使用加速度重力传感器
  4. Android 完美的水平方向滑动ListView
  5. Android: android自适应屏幕方向和大小
  6. Android屏幕方向的改变
  7. android方向键被锁定的问题
  8. Android 深入解析光传感器

随机推荐

  1. Android中使用Intent实现界面跳转
  2. 【移动开发】Android中各种xml汇总
  3. 关于android.R.id.text1
  4. android界面开发小结——android笔记---
  5. Android Studio解决plugin with id 'andr
  6. 动态绘制CheckedTextView
  7. Android UID 问题 uid 改变进行了覆盖安
  8. 介绍三个Android支持库控件:TabLayout+Vie
  9. Android百度地图开发(三)范围搜索
  10. Android横竖屏切换不重新调用onCreate()