Android利用Sensor实现传感器功能
本文实例为大家分享了Android利用Sensor实现传感器的具体代码,供大家参考,具体内容如下
一、传感器的使用
1、传感器的类型:
方向传感器::Sensor.TYPE_ORIENTATION
加速度(重力)传感器:sensor.TYPE_ACCELEFOMETER
光线传感器:sensor.TYPT_LIGHT
磁场传感器:sensor.TYPE_MANGNETIC_FIELD
距离(临近性)传感器:Sensor.TYPE_FROXIMITY
温度传感器:Sensor.TYPE_TEMPERATURE
常用的API:
<1>得到传感器的服务(得到传感器的管理者)
SensorManager sm=(SensorManager)getSystemService(SENSOR_SERVICE);
<2>得到手机所支持的所有的传感器的类型:
List list=sm.getSensorList(SensorManager.TYPE_ALL);
<3>传感器的类型:
Sensor.getType();
<4>传感器的名字;
Sensor.getName();
<5>传感器的监听:SensorEventListener()
sm.registerListener(监听,传感器对象,rate);
重点:
<1>光线传感器:sensor.TYPT_LIGHT
得到光线值:float f=event.values[0];
WindowManager.LayoutParams params = activity.getWindow().getAttributes();
params.screenBrightness = value / 255f;
activity.getWindow().setAttributes(params);
<2>加速度传感器:sensor.TYPE_ACCELEFOMETER
加速度有三个值:这三个值是手机在三个方向受到的加速度
float x=event.values[0];–>在手机顶部从左边沿往有边沿是手机的X轴的正方向
float y=event.values[1];–>从手机顶部沿手机左边沿手机底部是Y轴的正方向
float z=event.values[2];–>垂直手机屏幕朝外的是正方向
<3>方向传感器:Sensor.TYPE_ORIENTATION
方向传感器三个值:
方向角:指手机平躺时,手机头部绕Z轴旋转,与地球正北极的夹角
0代表北(North)
90代表东East
180代表南(South)
270代表西(West)
俯视角:手机绕X轴旋转与水平线的夹角
滚转角:手机绕Y轴旋转与水平线的夹角
利用方向传感器实现 指南针应用
运行后效果图如下:
布局文件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.g150825_android29.MainActivity"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/znz" android:id="@+id/iv_image" />I <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:id="@+id/tv_main_result" /> </RelativeLayout>
Java代码(MainActivity )
package com.example.g150825_android29; 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.Animation; 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 sensorOri; private TextView tv_main_result; private MyListener myListener; private ImageView iv_image; private float current=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_main_result = (TextView) findViewById(R.id.tv_main_result); iv_image = (ImageView) findViewById(R.id.iv_image); //得到传感器管理者 sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //得到光线传感器 // sensorLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); //获取加速度传感器 // sensorACC = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //获取方向传感器 sensorOri=sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); //获取光线传感器的值(光线值) myListener = new MyListener(); } //注册监听(监听某一个传感器的值) @Override protected void onResume() { super.onResume(); sensorManager.registerListener(myListener,sensorOri,SensorManager.SENSOR_DELAY_UI); } class MyListener implements SensorEventListener{ //当值发生改变 @Override public void onSensorChanged(SensorEvent sensorEvent) { float[] f=sensorEvent.values; 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, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f); rotateAnimation.setDuration(200); current=-x; iv_image.startAnimation(rotateAnimation); //改变屏幕的亮度 // WindowManager.LayoutParams layoutParams=getWindow().getAttributes(); // layoutParams.screenBrightness=light/255f; // getWindow().setAttributes(layoutParams); } //当值的精度发生改变 @Override public void onAccuracyChanged(Sensor sensor, int i) { } } //取消注册监听 @Override protected void onDestroy() { super.onDestroy(); sensorManager.unregisterListener(myListener); } // public void getAllSensors(View view){ // List<Sensor> sensors=sensorManager.getSensorList(Sensor.TYPE_ALL); // for(Sensor s:sensors){ // Log.i("test", s.getName()); // } // // } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
原文出处:https://blog.csdn.net/qq_37278353/article/details/57413997
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
- 下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
用Intel HAXM给Android模拟器Emulator加速
Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20- 在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
Android开发中布局中的onClick简单完成多控件时的监听的利与弊
本文章来为各位介绍一篇关于Android开发中布局中的onClick简单完成多控件时的监听的利与弊的例子,希望这个例子能够帮助到各位朋友. 首先在一个控件加上这么一句:and...2016-09-20Ubuntu 系统下安装Android开发环境 Android Studio 1.0 步骤
Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,可以在Linux,Mac OS X,Window...2016-09-20- 这篇文章主要为大家详细介绍了Android实现简单用户注册案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-26