Android加速计仅在虚拟仿真器中工作
我正在测试加速计传感器。所有这些都与Android Studio模拟的虚拟设备完美配合。此外,当我在真正的智能手机上尝试我的代码时,日志中什么也没有发生。 请看下面的代码:Android加速计仅在虚拟仿真器中工作,android,android-sensors,Android,Android Sensors,我正在测试加速计传感器。所有这些都与Android Studio模拟的虚拟设备完美配合。此外,当我在真正的智能手机上尝试我的代码时,日志中什么也没有发生。 请看下面的代码: import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.ha
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager senSensorManager;
private Sensor senAccelerometer;
private long lastUpdate = 0;
private float last_x, last_y, last_z;
private long diffTime;
private static final int SHAKE_THRESHOLD = 600;
ArrayList numbersGenerated = new ArrayList();
private ArrayList<Row> rows;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
senSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
senAccelerometer = senSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
senSensorManager.registerListener(this, senAccelerometer , SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
Sensor mySensor = sensorEvent.sensor;
if (mySensor.getType() == Sensor.TYPE_ACCELEROMETER) {
ArrayList<Row> rows = new ArrayList<>();
Row row;
float x = sensorEvent.values[0];
float y = sensorEvent.values[1];
float z = sensorEvent.values[2];
long curTime = System.currentTimeMillis();
if ((curTime - lastUpdate) > 100) {
long diffTime = (curTime - lastUpdate);
lastUpdate = curTime;
}
float speed = Math.abs(x + y + z - last_x - last_y - last_z)/ diffTime * 10000;
if (speed > SHAKE_THRESHOLD) {
System.out.println("X\t Y\tZ");
last_x = x;
last_y = y;
last_z = z;
row = new Row(x,y,z);
rows.add(row);
}
System.out.println("X\t Y\tZ");
System.out.println("----------------------");
for (Row printRow : rows)
{
System.out.println(
printRow.getX() + "\t " +
printRow.getY() + "\t" +
printRow.getZ());
}
}
else{
System.out.println("no accelerometer");
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
protected void onPause() {
super.onPause();
senSensorManager.unregisterListener(this);
}
protected void onResume() {
super.onResume();
senSensorManager.registerListener(this, senAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
class Row
{
// REMEMBER: each attribute is a column
//
private final float x;
private final float y;
private final float z;
public Row(float x, float y, float z)
{
this.x = x;
this.y = y;
this.z = z;
}
public float getX()
{
return x;
}
public float getY()
{
return y;
}
public float getZ()
{
return z;
}
}
导入android.content.Context;
导入android.hardware.Sensor;
导入android.hardware.SensorEvent;
导入android.hardware.SensorEventListener;
导入android.hardware.SensorManager;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入java.util.ArrayList;
公共类MainActivity扩展AppCompatActivity实现SensorEventListener{
私人传感器管理器传感器管理器;
专用传感器;
private long lastUpdate=0;
私人浮动last_x,last_y,last_z;
私生活时间长;
私有静态最终int-SHAKE_阈值=600;
ArrayList numbersGenerated=新建ArrayList();
私有数组列表行;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
senSensorManager=(SensorManager)getSystemService(Context.SENSOR\u SERVICE);
SenAccelerator=senSensorManager.getDefaultSensor(传感器类型\加速计);
senSensorManager.registerListener(此、senAccelerator、SensorManager.SENSOR\u延迟\u正常);
}
@凌驾
传感器更改时的公共无效(传感器事件传感器事件){
传感器mySensor=sensorEvent.Sensor;
if(mySensor.getType()==Sensor.TYPE\u加速计){
ArrayList行=新的ArrayList();
行行;
浮点x=传感器事件。值[0];
浮动y=传感器事件值[1];
浮动z=传感器事件值[2];
long curTime=System.currentTimeMillis();
如果((curTime-lastUpdate)>100){
long diffTime=(curTime-lastUpdate);
lastUpdate=curTime;
}
浮动速度=Math.abs(x+y+z-last_x-last_y-last_z)/diffTime*10000;
如果(速度>抖动阈值){
System.out.println(“X\t Y\tZ”);
最后的x=x;
最后的y=y;
last_z=z;
行=新行(x,y,z);
行。添加(行);
}
System.out.println(“X\t Y\tZ”);
System.out.println(“-------------------------”);
用于(行打印行:行)
{
System.out.println(
printRow.getX()+“\t”+
printRow.getY()+“\t”+
getZ());
}
}
否则{
System.out.println(“无加速计”);
}
}
@凌驾
精度更改时的公共无效(传感器,int精度){
}
受保护的void onPause(){
super.onPause();
senSensorManager.unregisterListener(此);
}
受保护的void onResume(){
super.onResume();
senSensorManager.registerListener(此、senAccelerator、SensorManager.SENSOR\u延迟\u正常);
}
班级排
{
//记住:每个属性都是一列
//
私人最终浮动x;
私人最终浮动;
私人最终浮动z;
公用行(浮动x、浮动y、浮动z)
{
这个.x=x;
这个。y=y;
这个。z=z;
}
公共浮点getX()
{
返回x;
}
公共浮球
{
返回y;
}
公共浮动getZ()
{
返回z;
}
}
你知道为什么它不工作吗?我的智能手机上安装了安卓4,我安装了正确的版本。
谢谢!也许你手机的加速计不工作了? System.out.println不是记录日志的好方法,请改用log命令。
尝试登录到应用程序屏幕,这会改变什么吗?可能是您手机的加速计不工作? System.out.println不是记录日志的好方法,请改用log命令。
尝试登录到应用程序屏幕,这会改变什么吗?谢谢,你说得对,我在屏幕上打印了变体,效果很好。很高兴提供帮助,我自己也遇到了同样的问题谢谢,你说得对,我在屏幕上打印了变体,效果很好。很高兴提供帮助,我自己也遇到了同样的问题