android 摇一摇功能SensorManager的使用

发布时间:2013-8-26 16:01    发布者:reggae
关键词: android , SensorManager
实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下:

一、在 AndroidManifest.xml 中添加操作权限

[html] view plaincopyprint?
二、实现代码

  1. [java] view plaincopyprint?
  2. import android.app.Activity;
  3. import android.hardware.Sensor;
  4. import android.hardware.SensorEvent;
  5. import android.hardware.SensorEventListener;
  6. import android.hardware.SensorManager;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.os.Message;
  10. import android.os.Vibrator;
  11. import android.util.Log;
  12. import android.widget.Toast;
  13. public class TestSensorActivity extends Activity {
  14. private SensorManager sensorManager;
  15. private Vibrator vibrator;
  16. private static final String TAG = "TestSensorActivity";
  17. private static final int SENSOR_SHAKE = 10;
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.main);
  22. sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
  23. vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
  24. }
  25. @Override
  26. protected void onResume() {
  27. super.onResume();
  28. if (sensorManager != null) {// 注册监听器
  29. sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
  30. // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率
  31. }
  32. }
  33. @Override
  34. protected void onStop() {
  35. super.onStop();
  36. if (sensorManager != null) {// 取消监听器
  37. sensorManager.unregisterListener(sensorEventListener);
  38. }
  39. }
  40. private SensorEventListener sensorEventListener = new SensorEventListener() {
  41. @Override
  42. public void onSensorChanged(SensorEvent event) {
  43. // 传感器信息改变时执行该方法
  44. float[] values = event.values;
  45. float x = values[0]; // x轴方向的重力加速度,向右为正
  46. float y = values[1]; // y轴方向的重力加速度,向前为正
  47. float z = values[2]; // z轴方向的重力加速度,向上为正
  48. Log.i(TAG, "x轴方向的重力加速度" + x +  ";y轴方向的重力加速度" + y +  ";z轴方向的重力加速度" + z);
  49. // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。
  50. int medumValue = 19;// 如果不敏感请自行调低该数值,低于10的话就不行了,因为z轴上的加速度本身就已经达到10了
  51. if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) {
  52. vibrator.vibrate(200);
  53. Message msg = new Message();
  54. msg.what = SENSOR_SHAKE;
  55. handler.sendMessage(msg);
  56. }
  57. }
  58. @Override
  59. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  60. }
  61. };
  62. Handler handler = new Handler() {
  63. @Override
  64. public void handleMessage(Message msg) {
  65. super.handleMessage(msg);
  66. switch (msg.what) {
  67. case SENSOR_SHAKE:
  68. Toast.makeText(TestSensorActivity.this, "检测到摇晃,执行操作!", Toast.LENGTH_SHORT).show();
  69. Log.i(TAG, "检测到摇晃,执行操作!");
  70. break;
  71. }
  72. }
  73. };
  74. }
复制代码

这种实现方式是最简单的,同时也是最敷衍的..等等我整理一个更加严谨的出来,这个跑一下就明显感觉到,摇起来真累~ —~。希望大家看到这个文章能觉得有用,谢谢已阅者。更多安卓技术问题欢迎加群探讨:278744577,验证码:eec,不写验证不予通过哟~

本文地址:https://www.eechina.com/thread-119947-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • 想要避免发生灾难,就用MPLAB SiC电源仿真器!
  • 我们是Microchip
  • 深度体验Microchip自动辅助驾驶应用方案——2025巡展开启报名!
  • 利用模拟开发工具生态系统进行安全电路设计
  • 贸泽电子(Mouser)专区

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表