Guten Tag,
ich versuche nun schon seit gut 2 Stunden herauszufinden, wie ich die Blickrichtung eines Users herausfinden kann.
Das obere Ende des Handys soll dazu in meinem Fall dienen, da man das Handy ja meist so flach (also Bildschirm nach oben) hält, ergibt es hier ja am meisten Sinn, oder ich versteh's falsch..
Das wäre laut Doku die Y Achse des Sensors. Leider habe ich da scheinbar den falschen Sensor erwischt.
Hier Mein bisheriger code:
MainActivity
Spoiler anzeigen
activity_main.xml
Spoiler anzeigen
EDIT:
Scheinbar klappt es jetzt so:
Spoiler anzeigen
*Topic verschoben*
ich versuche nun schon seit gut 2 Stunden herauszufinden, wie ich die Blickrichtung eines Users herausfinden kann.
Das obere Ende des Handys soll dazu in meinem Fall dienen, da man das Handy ja meist so flach (also Bildschirm nach oben) hält, ergibt es hier ja am meisten Sinn, oder ich versteh's falsch..
Das wäre laut Doku die Y Achse des Sensors. Leider habe ich da scheinbar den falschen Sensor erwischt.
Hier Mein bisheriger code:
MainActivity
Quellcode
- package com.example.demo_direction;
- import android.app.Activity;
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- import android.os.Bundle;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- SensorManager mgr;
- TextView tx, ty, tz, maxx;
- float max;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- tx = (TextView) findViewById(R.id.tvx);
- ty = (TextView) findViewById(R.id.tvy);
- tz = (TextView) findViewById(R.id.tvz);
- maxx = (TextView) findViewById(R.id.tvmaxx);
- max = 0;
- mgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
- mgr.registerListener(listener,
- mgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
- SensorManager.SENSOR_DELAY_NORMAL);
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- mgr.unregisterListener(listener);
- }
- private SensorEventListener listener = new SensorEventListener() {
- @Override
- public void onSensorChanged(SensorEvent event) {
- if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
- float x, y, z;
- x = event.values[0];
- y = event.values[1];
- z = event.values[2];
- if (x > max) {
- max = x;
- }
- // update textviews
- tx.setText("X: " + x);
- ty.setText("Y: " + y);
- tz.setText("Z: " + z);
- maxx.setText("Max: " + max);
- }
- }
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- // unused
- }
- };
- }
activity_main.xml
XML-Quellcode
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/tvx"
- android:layout_width="match_parent"
- android:layout_height="86dp" />
- <TextView
- android:id="@+id/tvy"
- android:layout_width="match_parent"
- android:layout_height="89dp" />
- <TextView
- android:id="@+id/tvz"
- android:layout_width="match_parent"
- android:layout_height="108dp" />
- <TextView
- android:id="@+id/tvmaxx"
- android:layout_width="match_parent"
- android:layout_height="136dp" />
- </LinearLayout>
EDIT:
Scheinbar klappt es jetzt so:
Quellcode
- package com.example.demo_direction;
- import android.app.Activity;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- import android.os.Bundle;
- import android.util.Log;
- public class MainActivity extends Activity implements SensorEventListener {
- public static float swRoll;
- public static float swPitch;
- public static float swAzimuth;
- public static SensorManager mSensorManager;
- public static Sensor accelerometer;
- public static Sensor magnetometer;
- public static float[] mAccelerometer = null;
- public static float[] mGeomagnetic = null;
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- @Override
- public void onSensorChanged(SensorEvent event) {
- // onSensorChanged gets called for each sensor so we have to remember
- // the values
- if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
- mAccelerometer = event.values;
- }
- if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
- mGeomagnetic = event.values;
- }
- if (mAccelerometer != null && mGeomagnetic != null) {
- float R[] = new float[9];
- float I[] = new float[9];
- boolean success = SensorManager.getRotationMatrix(R, I,
- mAccelerometer, mGeomagnetic);
- if (success) {
- float orientation[] = new float[3];
- SensorManager.getOrientation(R, orientation);
- // at this point, orientation contains the azimuth(direction),
- // pitch and roll values.
- double azimuth = 180 * orientation[0] / Math.PI;
- double pitch = 180 * orientation[1] / Math.PI;
- double roll = 180 * orientation[2] / Math.PI;
- Log.d("direction", String.valueOf(azimuth));
- }
- }
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
- accelerometer = mSensorManager
- .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- magnetometer = mSensorManager
- .getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
- }
- @Override
- protected void onResume() {
- super.onResume();
- mSensorManager.registerListener(this, accelerometer,
- SensorManager.SENSOR_DELAY_GAME);
- mSensorManager.registerListener(this, magnetometer,
- SensorManager.SENSOR_DELAY_GAME);
- }
- @Override
- protected void onPause() {
- super.onPause();
- mSensorManager.unregisterListener(this, accelerometer);
- mSensorManager.unregisterListener(this, magnetometer);
- }
- }
*Topic verschoben*
Polling is trolling!
Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()