首页 > 其他分享 >监听手机晃动SensorEventListener

监听手机晃动SensorEventListener

时间:2023-04-30 19:07:58浏览次数:36  
标签:晃动 Vibrator importandroid SensorEventListener sensorManager vibrator context sen


监听手机晃动SensorEventListener_android

1. importandroid.content.Context;  
2. importandroid.hardware.Sensor;  
3. importandroid.hardware.SensorEvent;  
4. importandroid.hardware.SensorEventListener;  
5. importandroid.hardware.SensorManager;  
6.  
7.  
8. publicclassShakeListener implementsSensorEventListener {  
9. //速度阈值,当摇晃速度达到这值后产生作用 
10. privatestaticfinalintSPEED_SHRESHOLD = 4000;  
11. //两次检测的时间间隔 
12. privatestaticfinalintUPTATE_INTERVAL_TIME = 70;  
13.   
14. //传感器管理器 
15. privateSensorManager sensorManager;  
16. //传感器 
17. privateSensor sensor;  
18. //重力感应监听器 
19. privateOnShakeListener onShakeListener;  
20. //上下文 
21. privateContext context;  
22. //手机上一个位置时重力感应坐标 
23. privatefloatlastX;  
24. privatefloatlastY;  
25. privatefloatlastZ;  
26.   
27. //上次检测时间 
28. privatelonglastUpdateTime;  
29.  
30. //构造器 
31. publicShakeListener(Context c) {  
32.  //获得监听对象 
33.  context = c;  
34.  start();  
35. }  
36.   
37. //开始 
38. publicvoidstart() {  
39.  //获得传感器管理器 
40.  sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);   
41.  if(sensorManager != null) {  
42.   //获得重力传感器 
43.   sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  
44.  }  
45.  //注册 
46.  if(sensor != null) {  
47.   sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);  
48.  }  
49.    
50. }  
51.   
52. //停止检测 
53. publicvoidstop() {  
54.  sensorManager.unregisterListener(this);  
55. }  
56.   
57. //摇晃监听接口 
58. publicinterfaceOnShakeListener {  
59.  publicvoidonShake();  
60. }  
61.   
62. //设置重力感应监听器 
63. publicvoidsetOnShakeListener(OnShakeListener listener) {  
64.  onShakeListener = listener;  
65. }  
66.   
67.   
68. //重力感应器感应获得变化数据 
69. publicvoidonSensorChanged(SensorEvent event) {  
70.  //现在检测时间 
71.  longcurrentUpdateTime = System.currentTimeMillis();  
72.  //两次检测的时间间隔 
73.  longtimeInterval = currentUpdateTime - lastUpdateTime;    
74.  //判断是否达到了检测时间间隔 
75.  if(timeInterval < UPTATE_INTERVAL_TIME)   
76.   return;  
77.  //现在的时间变成last时间 
78.  lastUpdateTime = currentUpdateTime;  
79.    
80.  //获得x,y,z坐标 
81.  floatx = event.values[0];  
82.  floaty = event.values[1];  
83.  floatz = event.values[2];  
84.    
85.  //获得x,y,z的变化值 
86.  floatdeltaX = x - lastX;  
87.  floatdeltaY = y - lastY;  
88.  floatdeltaZ = z - lastZ;  
89.    
90.  //将现在的坐标变成last坐标 
91.  lastX = x;  
92.  lastY = y;  
93.  lastZ = z;  
94.    
95.  doublespeed = Math.sqrt(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)/timeInterval * 10000;  
96.  //达到速度阀值,发出提示 
97.  if(speed >= SPEED_SHRESHOLD)  
98.   onShakeListener.onShake();  
99. }  
100.   
101. publicvoidonAccuracyChanged(Sensor sensor, intaccuracy) {  
102.    
103. }  
104.  
105. }



用法: 


 

监听手机晃动SensorEventListener_android


1. ShakeListener shakeListener = newShakeListener(this);//创建一个对象 
2. shakeListener.setOnShakeListener(newOnShakeListener(){//调用setOnShakeListener方法进行监听 
3.  
4. publicvoidonShake() {  
5.    //对手机摇晃后的处理(如换歌曲,换图片,震动……) 
6.    //onVibrator(); 
7. }  
8.  
9. });




//震动 


 

监听手机晃动SensorEventListener_android


1. privatevoidonVibrator() {  
2.  Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);  
3.  if(vibrator == null) {  
4.   Vibrator localVibrator = (Vibrator) context.getApplicationContext()  
5.     .getSystemService("vibrator");  
6.   vibrator = localVibrator;  
7.  }  
8.  vibrator.vibrate(100L);  
9. }

标签:晃动,Vibrator,importandroid,SensorEventListener,sensorManager,vibrator,context,sen
From: https://blog.51cto.com/u_548275/6237987

相关文章

  • TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误
    MicrosoftWindows[版本6.1.7601]版权所有(c)2009MicrosoftCorporation。保留所有权利。C:\Users\Administrator>lsnrctlLSNRCTLfor64-bitWindows:Version11.2.0.1.0-Productionon28-4月-202311:29:22Copyright(c)1991,2010,Oracle.Allrightsreserved......
  • Chrome devTools--节点监听
    节点监听dombreakpoints:子节点修改/属性修改/节点移除子节点修改适用场景:当鼠标移入下拉框时,下拉选项出现,想要选中下拉选项dom,修改下拉选项的dom时,却又消失了解决方案:选中body节点,监听dom字节点的修改,Breakon---》subtreemodifications,下拉选项触发时进入debugger 节......
  • Android监听事件
    监听事件​ 监听事件机制由事件源,事件和事件监听器三类对象组成,事件源一般就是activity中的UI控件。下面引用别人整理的图来更加形象的表达这些关系。​ 事件监听机制的意义就是让事件源的行为委托给事件监听器,让监听器控制事件的发生。​1.实现监听事件的方法通过内部类......
  • 只监听父元素的滚动事件,而不监听子元素的滚动事件
    第一种,JS1、判断domthis.$refs.squareRef.addEventListener('wheel',this.addScrolbarFn,false)addScrolbarFn(event){event.stopPropagation()constdom=this.$refs?.rightResultRef?.$refs?.resultDivif(event.target===this.$refs?.squareRef){......
  • Vue监听页面放大缩小事件
    Vue监听页面放大缩小事件 ,使用window.addEventListener,methods中方法ChangeWin(){letratio=this.getRatio();letPwidth=window.screen.width*this.getRatio()/100;letPHeight=window.screen.height*this.getRatio()/100;//1920*1080......
  • Watch监听-示例
    packagecom.hw.curator;importorg.apache.curator.RetryPolicy;importorg.apache.curator.framework.CuratorFramework;importorg.apache.curator.framework.CuratorFrameworkFactory;importorg.apache.curator.framework.api.BackgroundCallback;importorg.apach......
  • ORCLE静态监听注册/动态监听注册
    1.什么是注册注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时......
  • 使用proxy实现一个监听鼠标事件
    由于弹框遮罩层问题,如果绑定鼠标移入移出事件不能顺利,就想着监听鼠标坐标来实现,vue拥有监听器实现简单,就想着用proxy来做一个如下代码<template><divid="x">x:0</div><divid="y">y:0</div><divclass="myDiv"index="1">mydiv1</div&......
  • uniapp计算属性和监听属性的使用及props验证
    计算属性:定义:computed:{变量名xx(){return计算的代码}} 使用: <p>乘以2的值为{{变量名xx()}}</p>监听属性:(普通监听:无法监听到第一次绑定的变化)定义: watch:{变量名xx(newName,oldName){console.log(可以打印新老数据)}}(普通监听:可监听到第一次绑定的变化)定......
  • Vue3 watch 监听对象数组中对象的特定属性
    Vue3watch监听对象数组中对象的特定属性在Vue3中,可以使用watch函数来监听对象数组中对象的特定属性。可以通过在回调函数中遍历数组来检查对象的特定属性是否发生变化,并在变化发生时执行相应的操作。一、监听对象的特定属性例如,假设有一个名为items的对象数组,其中每个......