zoukankan      html  css  js  c++  java
  • 传感器的使用

    传感器类型:方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。

      方向传感器:   Sensor.TYPE_ORIENTATION

      加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER

      光线传感器:    Sensor.TYPE_LIGHT

      磁场传感器:   Sensor.TYPE_MAGNETIC_FIELD

      距离(临近性)传感器: Sensor.TYPE_PROXIMITY

      温度传感器:   Sensor.TYPE_TEMPERATURE

    //获取某种类型的感应器

    Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    //注册监听,获取传感器变化值

    sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);

    上面第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。

    最快: SensorManager.SENSOR_DELAY_FASTEST

    最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。

    游戏: SensorManager.SENSOR_DELAY_GAME

    游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。

    普通: SensorManager.SENSOR_DELAY_NORMAL

    标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。

    用户界面: SensorManager.SENSOR_DELAY_UI

    一般对于屏幕方向自动旋转使用,相对节省电能和逻辑处理,一般游戏开发中我们不使用。

    指南针Demo:

      

     1 package com.android.hzy.sensor;
     2 
     3 import android.app.Activity;
     4 import android.content.Context;
     5 import android.hardware.Sensor;
     6 import android.hardware.SensorEvent;
     7 import android.hardware.SensorEventListener;
     8 import android.hardware.SensorManager;
     9 import android.os.Bundle;
    10 import android.view.animation.Animation;
    11 import android.view.animation.RotateAnimation;
    12 import android.widget.ImageView;
    13 
    14 public class MainActivity extends Activity {
    15 
    16     private SensorManager sensorManager;
    17     private Sensor sensor;
    18     private MySensorEventListener listener;
    19     private ImageView iv;
    20     
    21     @Override
    22     protected void onCreate(Bundle savedInstanceState) {
    23         super.onCreate(savedInstanceState);
    24         setContentView(R.layout.activity_main);
    25         
    26         iv = (ImageView) findViewById(R.id.iv);
    27         iv.setKeepScreenOn(true);// 保持屏幕的高亮
    28         
    29         // 得到sensor管理器
    30         sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    31         sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);// 得到方向传感器
    32         
    33         listener = new MySensorEventListener();
    34         
    35     }
    36     
    37     /**
    38      * 第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。
    39         最快: SensorManager.SENSOR_DELAY_FASTEST
    40         最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。
    41         游戏: SensorManager.SENSOR_DELAY_GAME
    42         游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。
    43         普通: SensorManager.SENSOR_DELAY_NORMAL 
    44         标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。
    45         用户界面: SensorManager.SENSOR_DELAY_UI
    46      */
    47 
    48     @Override
    49     protected void onResume() {
    50         // TODO Auto-generated method stub
    51         super.onResume();
    52         // 注册sensor监听  传感器非常的消耗性能,显示在前台的时候再注册监听
    53         sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
    54     }
    55     
    56     @Override
    57     protected void onPause() {
    58         // TODO Auto-generated method stub
    59         super.onPause();
    60         // 取消监听
    61         sensorManager.unregisterListener(listener);
    62     }
    63     
    64     /**
    65      * 传感器事件监听
    66      * @author Administrator
    67      *
    68      */
    69     private final class MySensorEventListener implements SensorEventListener{
    70 
    71         private float predegree = 0;
    72         
    73         @Override
    74         public void onSensorChanged(SensorEvent event) {
    75             // TODO Auto-generated method stub
    76             float x = event.values[SensorManager.DATA_X];
    77             float y = event.values[SensorManager.DATA_Y];
    78             float z = event.values[SensorManager.DATA_Z];
    79             
    80             // 指南针只需用到X轴
    81             RotateAnimation animation = new RotateAnimation(-predegree, x, //
    82                     Animation.RELATIVE_TO_SELF, 0.5f, //
    83                     Animation.RELATIVE_TO_SELF, 0.5f);
    84             
    85             animation.setDuration(200);
    86             iv.startAnimation(animation);
    87             
    88             predegree = x;
    89         }
    90         
    91         @Override
    92         public void onAccuracyChanged(Sensor sensor, int accuracy) {
    93             // TODO Auto-generated method stub
    94             
    95         }
    96         
    97     }
    98     
    99 }
  • 相关阅读:
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 获取指定进程的输入命令行
    dotnet 获取指定进程的输入命令行
    PHP sqrt() 函数
    PHP sinh() 函数
    PHP sin() 函数
    PHP round() 函数
  • 原文地址:https://www.cnblogs.com/androidez/p/2901295.html
Copyright © 2011-2022 走看看