Android利用Senser实现不同的传感器

所属分类: 软件编程 / Android 阅读数: 43
收藏 0 赞 0 分享

传感器有不同的类型,以下是我列出的光线,加速度,风向传感器,在测试不同传感器的时候都需将传感器管理的onResume中sensorManager.registerListener(myListner,sensorOri,sensorManager.SENSOR_DELAY_UI);

第二个参数改为相应的传感器,此dem中我加入了一张指南针图片作为示例:

activity_main.xml

 <Button
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="查看所有支持的传感类型"
 android:onClick="getAllSensors"
 />
 <TextView
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:textSize="30sp"
 android:id="@+id/tv_main_result"

 />

 <ImageView
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:src="@drawable/sounth"
 android:id="@+id/iv_main_images"

 />

java代码中注释掉的部分都是一种传感器的测试。

MainActivity.java

package com.example.cindy_sounth;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {

 private SensorManager sensorManager;
 private Sensor sensorLight;
 private Sensor sensorAcc;
 private Sensor sensorOri;
 private TextView tv_main_result;
 private MyListner myListner;
 private ImageView iv_main_images;
 private float current;


 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 //得到图片
 iv_main_images = (ImageView) findViewById(R.id.iv_main_images);

 tv_main_result = (TextView) findViewById(R.id.tv_main_result);

 //得到传感器的管理者
 sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
 //得到光线传感器
// sensorLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

 //获得加速度传感器
// sensorAcc = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  //获取风向传感器
 sensorOri = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);



 myListner = new MyListner();



 }
 //注册一个监听(监听某一个传感器的值)
 @Override
 protected void onResume() {
 super.onResume();

 sensorManager.registerListener(myListner,sensorOri,sensorManager.SENSOR_DELAY_UI);
 }
 class MyListner implements SensorEventListener{

  private WindowManager.LayoutParams layoutParams;

  //当你的值发生改变
  @Override
  public void onSensorChanged(SensorEvent event) {
  float[] f=event.values;
  //测试获取光线传感器的值(光线值)
//  float light= f[0];
//  tv_main_result.setText(light+"");

  //测试获得加速度传感器
//  float x= f[0];
//  float y= f[1];
//  float z= f[2];
//  tv_main_result.setText("x="+x+"\ny="+y+"\nz="+z);

  //测试获取风向传感器
//  float x= f[0];
//  float y= f[1];
//  float z= f[2];
//  tv_main_result.setText("x="+x+"\ny="+y+"\nz="+z);

  //加图片测试指南针
  float x= f[0];
  float y= f[1];
  float z= f[2];
  tv_main_result.setText("x="+x+"\ny="+y+"\nz="+z);

  //实例化旋转动画
  RotateAnimation rotateAnimation=new RotateAnimation(current,-x,RotateAnimation.RELATIVE_TO_SELF,0.5f,RotateAnimation.RELATIVE_TO_SELF,0.5f);
  rotateAnimation.setDuration(200);
  current=-x;
  iv_main_images.startAnimation(rotateAnimation);
  //改变屏幕的亮度
  //先拿到屏幕
//  WindowManager.LayoutParams layoutParams= getWindow().getAttributes();
//  layoutParams.screenBrightness=light/225f;
//  getWindow().setAttributes(layoutParams);

  }
  //当值发生精度改变
  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {

  }
 }



 @Override
 protected void onDestroy() {
 super.onDestroy();
 sensorManager.unregisterListener(myListner);
 }
 public void getAllSensors(View view){
 List<Sensor> sensors= sensorManager.getSensorList(Sensor.TYPE_ALL);
 for (Sensor sensor : sensors) {
  Log.i("test", sensor.getName());
//  sensor.getPower();
 }

 }



}

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

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多