Ich teste den Beschleunigungssensor. Alles funktioniert perfekt mit dem virtuellen Gerät, das von Android Studio emuliert wird. Wenn ich meinen Code auf meinem echten Smartphone ausprobiere, passiert nichts in den Protokollen. Blick auf den Code unten:Android-Beschleunigungssensor funktioniert nur im virtuellen Emulator
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;
}
}
Haben Sie eine Vorstellung davon, warum es nicht funktioniert? Ich habe Android 4 auf meinem Smartphone und ich habe mit der richtigen Version eingerichtet. Danke!
Danke, du hast Recht, ich habe die Variationen auf dem Bildschirm gedruckt und funktioniert gut. – lolotte
Gut zu helfen, ich habe das selbe Problem selbst angetroffen – DKIT