2012-01-13 39 views
8

Tôi đang cố gắng lấy góc nghiêng, góc cuộn từ cảm biến của tôi từ điện thoại Android nhưng không thành công cho đến thời điểm này,lấy góc nghiêng Android

khi tôi nhấp vào nút của mình. , tôi nhận được "Kết quả: 0.0 -0,0 -0,0"

package com.example; 

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.widget.TextView; 
import android.widget.Button; 
import android.view.View; 


public class MyActivity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final float[] mValuesMagnet  = new float[3]; 
     final float[] mValuesAccel  = new float[3]; 
     final float[] mValuesOrientation = new float[3]; 
     final float[] mRotationMatrix = new float[9]; 

     final Button btn_valider = (Button) findViewById(R.id.btn1); 
     final TextView txt1 = (TextView) findViewById(R.id.textView1); 
     final SensorEventListener mEventListener = new SensorEventListener() { 
      public void onAccuracyChanged(Sensor sensor, int accuracy) { 
      } 

      public void onSensorChanged(SensorEvent event) { 
       // Handle the events for which we registered 
       switch (event.sensor.getType()) { 
        case Sensor.TYPE_ACCELEROMETER: 
         System.arraycopy(event.values, 0, mValuesAccel, 0, 3); 
         break; 

        case Sensor.TYPE_MAGNETIC_FIELD: 
         System.arraycopy(event.values, 0, mValuesMagnet, 0, 3); 
         break; 
       } 
      }; 
     }; 
     btn_valider.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View view) 
      { 
       SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet); 
       SensorManager.getOrientation(mRotationMatrix, mValuesOrientation); 
       final CharSequence test; 
       test = "results: " + mValuesOrientation[0] +" "+mValuesOrientation[1]+ " "+ mValuesOrientation[2]; 
       txt1.setText(test); 
      } 
     }); 

    } 
} 

Trả lời

17

của bạn gần như có với mã Mike, nhưng để cho phép các dữ liệu được lấy ra bằng cách lắng nghe sự kiện đối với bất kỳ các bộ cảm biến, cảm biến người nghe sự kiện và muốn được đăng ký với lớp SensorManager bằng cách sử dụng:

SensorManager _sensorManager; 

_sensorManager.registerListener(mEventListener, _sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
       SensorManager.SENSOR_DELAY_NORMAL); 

Dưới đây là mã của bạn được điều chỉnh để hiển thị dữ liệu mà tôi tin là những gì bạn muốn xem.

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.widget.TextView; 
import android.widget.Button; 
import android.view.View; 


public class StackOverflowTestingGroundActivity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);   

     SensorManager sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);   

     final float[] mValuesMagnet  = new float[3]; 
     final float[] mValuesAccel  = new float[3]; 
     final float[] mValuesOrientation = new float[3]; 
     final float[] mRotationMatrix = new float[9]; 

     final Button btn_valider = (Button) findViewById(R.id.btn1); 
     final TextView txt1 = (TextView) findViewById(R.id.textView1); 
     final SensorEventListener mEventListener = new SensorEventListener() { 
      public void onAccuracyChanged(Sensor sensor, int accuracy) { 
      } 

      public void onSensorChanged(SensorEvent event) { 
       // Handle the events for which we registered 
       switch (event.sensor.getType()) { 
        case Sensor.TYPE_ACCELEROMETER: 
         System.arraycopy(event.values, 0, mValuesAccel, 0, 3); 
         break; 

        case Sensor.TYPE_MAGNETIC_FIELD: 
         System.arraycopy(event.values, 0, mValuesMagnet, 0, 3); 
         break; 
       } 
      }; 
     }; 

     // You have set the event lisetner up, now just need to register this with the 
     // sensor manager along with the sensor wanted. 
     setListners(sensorManager, mEventListener); 

     btn_valider.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View view) 
      { 
       SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet); 
       SensorManager.getOrientation(mRotationMatrix, mValuesOrientation); 
       final CharSequence test; 
       test = "results: " + mValuesOrientation[0] +" "+mValuesOrientation[1]+ " "+ mValuesOrientation[2]; 
       txt1.setText(test); 
      } 
     }); 

    } 

    // Register the event listener and sensor type. 
    public void setListners(SensorManager sensorManager, SensorEventListener mEventListener) 
    { 
     sensorManager.registerListener(mEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
       SensorManager.SENSOR_DELAY_NORMAL); 
     sensorManager.registerListener(mEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), 
       SensorManager.SENSOR_DELAY_NORMAL); 
    } 
} 
+0

cảm ơn, mà đã làm nó –

+0

những góc mang lại giá trị rất nhỏ và thậm chí nếu giữ trên bề mặt phẳng vẫn tiếp tục thay đổi giá trị –

+0

@AashishVirendraKBhatnagar là trong radian + cảm biến không quá chính xác –

Các vấn đề liên quan