onSensorChanged()未被调用

4

我正在编写一个安卓应用,但是在使用加速度计时遇到了一些问题。奇怪的是,我的 onSensorChanged() 函数没有被调用,我不知道原因 :/ 请帮帮我好吗? :) 这是我的代码:

@SuppressLint("NewApi") 
public class Game extends Activity implements SensorEventListener {

SensorManager sensorManager;
ImageView vaisseau;
TextView test;
RelativeLayout rl;

@SuppressLint("NewApi") @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);

    setContentView(R.layout.game);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    Display ecran = getWindowManager().getDefaultDisplay(); 
    int largeur= ecran.getWidth();
    int hauteur= ecran.getHeight();

    Drawable d = getResources().getDrawable(R.drawable.spaceship);
    int largeurVaisseau = d.getIntrinsicWidth();

    vaisseau = new ImageView(this);
    vaisseau.setImageResource(R.drawable.spaceship);
    rl = (RelativeLayout)findViewById(R.id.layout_game);
    vaisseau.setX(largeur/2 - largeurVaisseau);
    vaisseau.setY(hauteur-hauteur*10/100);
    rl.addView(vaisseau);

    test = new TextView(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return true;
}

public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
        test.setText(Float.toString(event.values[0]));
        rl.addView(test);
    }
}   

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

@Override
protected void onResume() {
    super.onResume();
    sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
}
}

Thanks in advance :), Jeffrey

1个回答

1

建议注册传感器 Sensor.TYPE_ACCELEROMETER 而不是 Sensor.TYPE_ORIENTATION。


谢谢你的回答 :) 但还是不起作用 :/ 有什么想法吗? - user2363392
您在传感器上进行了2次注册(在onCreate()onResume()中),这可能会导致问题。我怀疑它不会完全停止工作(或从未工作过),但可能会有问题。您可能只想使用onResume()中的一个。您尝试过连接调试器或记录传感器变化而不是直接更新UI吗?也许UI没有工作,但传感器变化正在发生? - Larry Schiefer
我推荐这个不错的参考代码:https://dev59.com/qGkv5IYBdhLWcg3w3Uk0#10291428 - Someone Somewhere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接