[AIR] 检测移动设备运动

Accelerometer 类根据由设备的运动传感器检测的活动调度事件。此数据表示设备的位置或沿三维轴的移动。当设备移动时,传感器会检测到此移动并返回加速数据。Accelerometer 类提供了各种方法,用于查询是否支持加速计以及设置调度加速事件时使用的速率。

注意:使用 Accelerometer.isSupported 属性测试运行时环境是否能够使用此功能。当为各个 API 入口列出的运行时版本可以访问 Accelerometer 类及其成员时,运行时的当前环境将确定此功能的可用性。例如,您可以使用 Flash Player 10.1 的 Accelerometer 类属性编译代码,但是需要使用 Accelerometer.isSupported 属性测试 Accelerometer 功能在 Flash Player 运行时的当前部署环境中的可用性。如果 Accelerometer.isSupported 在运行时为 true,则当前存在 Accelerometer 支持。

 1 package

 2 {

 3     import flash.display.Sprite;

 4     import flash.display.StageAlign;

 5     import flash.display.StageScaleMode;

 6     import flash.events.AccelerometerEvent;

 7     import flash.sensors.Accelerometer;

 8     import flash.text.TextField;

 9     import flash.text.TextFieldAutoSize;

10     

11     /**

12      * @author Frost.Yen

13      * @E-mail [email protected]

14      * @create 2015-6-17 下午2:59:32

15      *

16      */

17     public class AccelermeterTest extends Sprite

18     {

19         private var _accelerometer:Accelerometer;

20         private var _oldAccX:Number;

21         private var _oldAccY:Number;

22         private var _oldAccZ:Number;

23         private var _sum:Number;

24         private var _txt:TextField;

25         public function AccelermeterTest()

26         {

27             super();

28             // 支持 autoOrient

29             stage.align = StageAlign.TOP_LEFT;

30             stage.scaleMode = StageScaleMode.NO_SCALE;

31             _txt=new TextField()

32             _txt.x=10;

33             _txt.y=10;

34             _txt.autoSize=TextFieldAutoSize.LEFT;

35             this.addChild(_txt);

36             if(Accelerometer.isSupported){

37                 _oldAccX=0;

38                 _oldAccY=0;

39                 _oldAccZ=0;

40                 _sum=0;

41                 _accelerometer=new Accelerometer();

42                 _accelerometer.setRequestedUpdateInterval(1000);

43                 _accelerometer.addEventListener(AccelerometerEvent.UPDATE,onUpdate);

44             }else{

45                 _txt.text="当前设备不支持加速计。";

46             }

47         }

48         private function onUpdate(e:AccelerometerEvent):void{

49             _sum=0;

50             const k:Number=5;//越大敏感度越高

51             var accX:Number=Math.round(e.accelerationX*k)/k;

52             var accY:Number=Math.round(e.accelerationY*k)/k;

53             var accZ:Number=Math.round(e.accelerationZ*k)/k;

54             _sum+=Math.abs(accX-_oldAccX);

55             _sum+=Math.abs(accY-_oldAccY);

56             _sum+=Math.abs(accZ-_oldAccZ);

57             _oldAccX=accX;

58             _oldAccY=accY;

59             _oldAccZ=accZ;

60             _txt.text=

61                 "event.accelerationX="+e.accelerationX+"\n"+

62                 "event.accelerationY="+e.accelerationY+"\n"+

63                 "event.accelerationZ="+e.accelerationZ+"\n"+

64                 "accX="+accX+"\n"+

65                 "accY="+accY+"\n"+

66                 "accZ="+accZ+"\n"+

67                 "sum="+_sum;

68             trace(e.accelerationX,e.accelerationY,e.accelerationZ);

69             if(_sum >0.2){

70                 //trace(sum,"摇手机");

71             }

72         }

73     }

74 }

 

你可能感兴趣的:(AIR)