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());
//        }
//
//    }
}

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

(0)

相关推荐

  • Android利用Sensor(传感器)实现指南针小功能

    首先来说一说该指南针的实现思路: 程序先准备一张指南针图片,该图片上方向指针指向北方.接下来开发一个检测方向的传感器,程序检测到手机顶部绕Z轴转过多少度,让指南针图片反向转多少度即可.由此可见指南针应用只要在界面中添加一张图片,并让图片总是反向转过反向传感器返回的第一个角度值即可. 下面介绍一下方向传感器:方向传感器用于感应手机设备的摆放状态.方向传感器可以返回三个角度,这三个角度即可确定手机的摆放状态.关于方向传感器返回的三个角度的说明如下. 第一个角度:表示手机顶部朝向正北方的夹角.当手机绕

  • Android利用Sensor(传感器)实现水平仪功能

    这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体,液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端. 利用方向传感器返回的第一个参数,实现了一个指南针小应用. 我的Android进阶之旅------>Android利用Sensor(传感器)实现指南针功能 接下来,我们利用返回的第二.三个参数实现该水平仪.因为第二个参数,反映底部翘起的角度(当顶部翘起时为负值),第三个参数可以反映右侧翘起的角度(当左侧翘起时为负值).根据这两个角度就可以开发水平仪,实现手机哪端翘起

  • 详解 android 光线传感器 light sensor的使用

    调用anroid的光线传感器使用. 实现效果图: MainActivity.Java package hk.ust.cse.comp107x.ligthsensor; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardw

  • Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】

    本文实例讲述了Android编程使用光线传感器获取光线强弱的方法.分享给大家供大家参考,具体如下: 在Android开发中,有时我们需要获知设备所在环境的光线强弱情况,当然这需要我们设备拥有光线传感器.通常我们手机的屏幕自动亮度都是用光线传感器来实现的.该传感器在前置摄像头附近,此外,还有一个距离传感器.这里我们主要讲解如何使用Android手机的光线传感器. 下面是我简单封装的一个光线传感器管理类,主要提供了3个方法: 1.start():启动,在获取光照强度前调用. 2.stop():停止,

  • android 传感器(OnSensorChanged)使用介绍

    下面是API中定义的几个代表sensor的常量. Int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type. 加速度传感器 int TYPE_ALL A constant describing all sensor types. 所有类型 A constant describing all sensor types. int TYPE_GRAVITY A constant describing a grav

  • Android传感器SensorEventListener之加速度传感器

    这个类(我的是Activity中)继承SensorEventListener接口 先获取传感器对象,再获取传感器对象的类型 //获取传感器管理对象 SensorManager mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); // 获取传感器的类型(TYPE_ACCELEROMETER:加速度传感器) Sensor mSensor = mSensorManager.getDefaultSensor(

  • Android利用Sensor实现传感器功能

    本文实例为大家分享了Android利用Sensor实现传感器的具体代码,供大家参考,具体内容如下 一.传感器的使用 1.传感器的类型: 方向传感器::Sensor.TYPE_ORIENTATION 加速度(重力)传感器:sensor.TYPE_ACCELEFOMETER 光线传感器:sensor.TYPT_LIGHT 磁场传感器:sensor.TYPE_MANGNETIC_FIELD 距离(临近性)传感器:Sensor.TYPE_FROXIMITY 温度传感器:Sensor.TYPE_TEMPE

  • android利用handler实现倒计时功能

    本文实例为大家分享了android利用handler实现倒计时的具体代码,供大家参考,具体内容如下 xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=&qu

  • Android利用CountDownTimer实现倒计时功能 Android实现停留5s跳转到登录页面

    利用CountDownTimer实现倒计时,停留5s跳转到登录页面功能,具体如下 举个栗子,引导页面最后一个界面要停留5s跳转到登录页面.代码如下: //假设 这是引导页面最后一个界面 public class MainActivity extends Activity { private TextView count_time; private MyCountDownTimer myCountDownTimer; @Override protected void onCreate(Bundle

  • Android利用Intent实现记事本功能(NotePad)

    本文实例为大家分享了Intent如何实现一个简单的记事本功能的演示过程,供大家参考,具体内容如下 1.运行截图 单击右上角[-]会弹出[添加]菜单项,长按某条记录会弹出快捷菜单[删除]项. 2.主要设计步骤 (1)添加引用 鼠标右击[引用]à[添加引用],在弹出的窗口中勾选"System.Data"和"System.Data.SQlite",如下图所示: 注意:不需要通过NuGet添加SQLite程序包,只需要按这种方式添加即可. (2)添加图片 到Android

  • Android利用Chronometer实现倒计时功能

    项目需要实现一个计时的功能,利用Chronometer虽然可以很方便的实现计时功能,但需要的却是一个倒计时控件. 百度了一下方法不少,倒计时的却没有,于是用Chronometer封装了一个倒计时的类,本着开源的精神,分享给大家! 废话不说了,进入主题 首先xml布局如下: <com.example.anticlockwisedemo.Anticlockwise android:id="@+id/id_timer" android:layout_width="wrap_c

  • android利用service完成计时功能

    本文为大家分享了android service计时功能的具体代码,供大家参考,具体内容如下 源码下载地址:https://github.com/luoye123/Timing 1.首先建立主页面的设计:activity_time.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/r

  • Android利用GridView实现单选功能

    先看看GridView实现单选效果 如果是你需要的,你可以继续往下看了 实现起来比较简单,直接上代码 主Activity的布局,一个Button用来跳转到筛选Activity一个TextView用来显示筛选后的到的结果 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi

  • Android利用传感器仿微信摇一摇功能

    传感器 简单的介绍一下传感器: 就是设备用来感知周边环境变化的硬件. Android中的传感器包含在传感器框架中,属于android.hardware.*(硬件部分) 传感器框架主要包含四个部分: ① SensorManager:用来获取传感器的入口,它是一个系统的服务,还可以为传感器注册与取消注册监听 ② Sensor: 具体的传感器,包含了传感器的名字,类型,采样率 ③ SensorEvent:传感器事件,包含了传感器采集回来的数据,传感器的精度 ④ SensorEventListener:

随机推荐