2017-04-24 3 views
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を持っており、正しいバージョンでセットアップしました。 ありがとう!

答えて

0

携帯電話の加速度計が機能していない可能性がありますか? System.out.printlnは良い方法ではありません。代わりにLOGコマンドを使用してください。 代わりにアプリの画面にログインしてみてください。何も変わりませんか?

+0

ありがとうございます、私は画面上にバリエーションを印刷してうまく動作します。 – lolotte

+0

喜んで、私は同じ問題を自分自身で遭遇しました – DKIT

関連する問題