1
加速度センサーをテストしています。すべては、Android Studioでエミュレートされた仮想デバイスと完全に連携します。さらに、私が実際のスマートフォンで自分のコードを試しても、ログには何も起こりません。以下のコードで 見て:あなたはそれが働いていない理由についての考えをAndroidの加速度計は仮想エミュレータでのみ動作します
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 4を持っており、正しいバージョンでセットアップしました。 ありがとう!
ありがとうございます、私は画面上にバリエーションを印刷してうまく動作します。 – lolotte
喜んで、私は同じ問題を自分自身で遭遇しました – DKIT