Android实习02:"摇一摇"功能的实现

来源:互联网 发布:中国移动网络测试 编辑:程序博客网 时间:2024/06/10 23:21

Android Studio的安装

  1. Android官网已经不支持adt-bundle-window的eclipse维护了,而是建议大家使用Android studio开发Android project。
  2. Android Studio的安装和环境吧变量的配置类似于adt-bundle-window类似
  3. Android studio后跳过SDK的更新(已经是最新版本,向下兼容),并且要装gradle(新建项目的时候会有提示)。

手机摇一摇功能的实现

  1. “摇一摇”实现的基本原理
    Android手机内置的传感器 + 振动对象Vibrator + 三轴加速度值 + 阈值
  2. 一、在 AndroidManifest.xml 中添加操作权限
<uses-permission android:name="android.permission.VIBRATE"/>

二、实现代码(这种代码只是一个demo,后面会有自己的改进版(改进版可以在真实的project中使用))

package com.xs.test;  import android.app.Activity;  import android.hardware.Sensor;  import android.hardware.SensorEvent;  import android.hardware.SensorEventListener;  import android.hardware.SensorManager;  import android.os.Bundle;  import android.os.Handler;  import android.os.Message;  import android.os.Vibrator;  import android.util.Log;  import android.widget.Toast; public class TestSensorActivity extends Activity {      private SensorManager sensorManager;      private Vibrator vibrator;      private static final String TAG = "TestSensorActivity";      private static final int SENSOR_SHAKE = 10;      /** Called when the activity is first created. */      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);          vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);      }      @Override      protected void onResume() {          super.onResume();          if (sensorManager != null) {// 注册监听器              sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);              // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率          }      }      @Override      protected void onPause() {          super.onPause();          if (sensorManager != null) {// 取消监听器              sensorManager.unregisterListener(sensorEventListener);          }      }      /**      * 重力感应监听      */      private SensorEventListener sensorEventListener = new SensorEventListener() {          @Override          public void onSensorChanged(SensorEvent event) {              // 传感器信息改变时执行该方法              float[] values = event.values;              float x = values[0]; // x轴方向的重力加速度,向右为正              float y = values[1]; // y轴方向的重力加速度,向前为正              float z = values[2]; // z轴方向的重力加速度,向上为正              Log.i(TAG, "x轴方向的重力加速度" + x +  ";y轴方向的重力加速度" + y +  ";z轴方向的重力加速度" + z);              // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。              int medumValue = 19;// 三星 i9250怎么晃都不会超过20,没办法,只设置19了              if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) {                  vibrator.vibrate(200);                  Message msg = new Message();                  msg.what = SENSOR_SHAKE;                  handler.sendMessage(msg);              }          }          @Override          public void onAccuracyChanged(Sensor sensor, int accuracy) {          }      };      /**      * 动作执行      */      Handler handler = new Handler() {          @Override          public void handleMessage(Message msg) {              super.handleMessage(msg);              switch (msg.what) {              case SENSOR_SHAKE:                  Toast.makeText(TestSensorActivity.this, "检测到摇晃,执行操作!", Toast.LENGTH_SHORT).show();                  Log.i(TAG, "检测到摇晃,执行操作!");                  break;              }          }      };  }  
0 0
原创粉丝点击