繁体   English   中英

Android屏幕上的传感器坐标

[英]Sensor coordinates on the screen in Android

我有一个小应用程序,可以显示Eclipse中LogCat中传感器的坐标,并且我希望在手机屏幕上显示相同的内容。 您能给我一些提示,我应该怎么做吗? 它不一定是代码,而只是技巧。

我不知道如何通过mySensors.java中的坐标更新MainActivity中的TextView。 我只收到静态的“ x = 0 y = 0 z = 0”。 不能再...

我的MainActivity.java:

public class MainActivity extends Activity {

SensorManager mSensorManager;
mySensors mSensors;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSensors = new mySensors();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();

    mSensorManager.unregisterListener(mSensors);
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    initSensors();
}

private void initSensors() {
    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    List<Sensor> accel_sensor_list = mSensorManager
            .getSensorList(Sensor.TYPE_ACCELEROMETER);
    mSensorManager.registerListener((SensorEventListener) mSensors,
            accel_sensor_list.get(0), SensorManager.SENSOR_DELAY_UI);
    List<Sensor> magn_sensor_list = mSensorManager
            .getSensorList(Sensor.TYPE_MAGNETIC_FIELD);
    mSensorManager.registerListener((SensorEventListener) mSensors,
            magn_sensor_list.get(0), SensorManager.SENSOR_DELAY_UI);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

我的mySensors.java:

public class mySensors implements SensorEventListener {

private static int VECTOR_SIZE=3;
private static int MATRIX_SIZE=16;

int type, heading_deg, pitch_deg, roll_deg;
boolean isReady;
float[] vals = new float[VECTOR_SIZE];
float[] accels = new float[VECTOR_SIZE];
float[] mags = new float[VECTOR_SIZE];
float[] orientation_rad = new float[VECTOR_SIZE];

float[] R_orig = new float[MATRIX_SIZE];
float[] I_orig = new float[MATRIX_SIZE];
float[] R_remapped = new float[MATRIX_SIZE];

public void onSensorChanged(SensorEvent se) {
    type = se.sensor.getType();
    vals = se.values.clone();
    switch (type) {
    case Sensor.TYPE_ACCELEROMETER:
        accels = vals.clone();
        break;
    case Sensor.TYPE_MAGNETIC_FIELD:
        mags = vals.clone();
        isReady = true;
    }
    if (isReady && mags != null && accels != null) {
        isReady = false;
        SensorManager.getRotationMatrix(R_orig, I_orig, accels, mags);
        // zmiana układ współrzednych odniesienia (!)
        // SensorManager.remapCoordinateSystem(R_orig,
        // SensorManager.AXIS_Z, SensorManager.AXIS_MINUS_X, R_remapped);
        SensorManager.getOrientation(R_orig, orientation_rad);
        heading_deg = (int) (orientation_rad[0] * 57.2957795f); // radians
                                                                // to
                                                                // degrees
        pitch_deg = (int) (orientation_rad[1] * 57.2957795f);
        roll_deg = (int) (orientation_rad[2] * 57.2957795f);

        Log.w("Sensors:",
                "x=" + heading_deg +
                " y=" + pitch_deg +
                " z=" + roll_deg
        );
    }
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub

}
 }

您可以创建自己的Listener接口( 示例方法 ),以监听onSensorChanged结果,并调用主Activity,在此您可以将Text设置为TextView。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM