欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android的重力感应测试

程序员文章站 2022-07-15 11:24:12
...
由于重力感应是与手机硬件相关的,所以测试起来比较麻烦,有木有办法在模拟器上模拟测试呢?这也是本人比较关心的问题,还好,确实有。那就是sensorsimulator组件。
首先介绍下测试平台:
模拟器:android2.3.3
组件:sensorsimulator1.1.1(见附件)

步骤如下:
1.安装APK,在bin目录下有个SensorSimulatorSettings-1.1.1.apk文件,可通过adb install SensorSimulatorSetting-1.1.1.apk命令安装。
2.设置SensorSimulatorSetting,安装成功后,启动模拟器,进入SensorSimulatorSetting界面,如下:
设置IP:
android的重力感应测试
            
    
    博客分类: android
设置测试模式配置:
android的重力感应测试
            
    
    博客分类: android

有几种重力感应模式:
android的重力感应测试
            
    
    博客分类: android
Fastest:最快更新率(范围在8ms-30ms)
Game:适合游戏的更新率(40ms)
Normal:系统默认值,适合于屏幕方向的变化的更新率(大约200ms)
UI:适合于用户界面的更新率(350ms)

本人在测试游戏的时候选择了game模式,也可以选其它模式试试。
3.第三步是关键,剩下的就是怎么把这个组件应用到实际应用中去了。
先要加上权限,在android的主xml中加入以下代码:
<uses-permission android:name="android.permission.INTERNET"/>


默认的重力感应侦听器代码如下:
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

public class AccelerometerHandler implements SensorEventListener {
	float accelX;
	float accelY;
	float accelZ;

	public AccelerometerHandler(Context context) {
		SensorManager manager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
		if (manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size() != 0) {
			Sensor accelerometer = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
			manager.registerListener(this, accelerometer,SensorManager.SENSOR_DELAY_GAME);
		}
	}

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// nothing to do here
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		accelX = event.values[0];
		accelY = event.values[1];
		accelZ = event.values[2];
	}

	public float getAccelX() {
		return accelX;
	}

	public float getAccelY() {
		return accelY;
	}

	public float getAccelZ() {
		return accelZ;
	}
}


而我们现在要通过模拟器模拟这个类,所以我写了另一类来模拟这个类的行为,代码如下:
import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

import android.content.Context;
import android.hardware.SensorManager;

public class AccelerometerSimulatorHandler implements SensorEventListener {
	float accelX;
	float accelY;
	float accelZ;

	public AccelerometerSimulatorHandler(Context context) {
		SensorManagerSimulator mSensorManager = SensorManagerSimulator.getSystemService(context,Context.SENSOR_SERVICE);
		if(mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)!=null){
			mSensorManager.connectSimulator();
			Sensor accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
			mSensorManager.registerListener(this, accelerometer,SensorManager.SENSOR_DELAY_GAME);
		}
	}

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		accelX = event.values[0];
		accelY = event.values[1];
		accelZ = event.values[2];
	}

	public float getAccelX() {
		return accelX;
	}

	public float getAccelY() {
		return accelY;
	}

	public float getAccelZ() {
		return accelZ;
	}

}


这个类最主要的区别就在于导入的java类不同,然后在使用这个侦听器的地方将其替换成第二个类即可。
4.运行sensorsimulator,通过命令java -jar sensorsimulator-1.1.1.jar运行sensorsimulator组件,界面如下:
android的重力感应测试
            
    
    博客分类: android
从这个图可知,控制手机的方式也有三种,yaw&pitch、roll&pitch、move,这几种都可以试下。它们分别代表围绕Z、X、Y轴为中心旋转角度(Z轴垂直于地面指向天空)。

5.启动应用,就可以通过sensorsimulator界面来控制感应带来的变化。

大体过程就是这样,总的来说,还是有点麻烦,不过也没其它办法,有总比没有好吧!



  • android的重力感应测试
            
    
    博客分类: android
  • 大小: 23.3 KB
  • android的重力感应测试
            
    
    博客分类: android
  • 大小: 10.4 KB
  • android的重力感应测试
            
    
    博客分类: android
  • 大小: 6.4 KB
  • android的重力感应测试
            
    
    博客分类: android
  • 大小: 28.1 KB