欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android利用Sensor实现传感器功能

程序员文章站 2022-03-02 21:15:55
本文实例为大家分享了android利用sensor实现传感器的具体代码,供大家参考,具体内容如下一、传感器的使用1、传感器的类型:方向传感器::sensor.type_orientation加速度(重...

本文实例为大家分享了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轴旋转与水平线的夹角
利用方向传感器实现 指南针应用

运行后效果图如下:

Android利用Sensor实现传感器功能

Android利用Sensor实现传感器功能

布局文件(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());
//        }
//
//    }
}

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