Androidについて質問です。
現在、Android Studioを用いてAndroid開発をしているのですが、地磁気センサーの値がエミュレータではどうしても取得できません。加速度センサーの値は、あらかじめデフォルト値が与えられていたため取得できたのですが、そういった値は地磁気センサーには用意されていないのでしょうか。
また、値を求めることができるのかといったテストをしたいだけなので、実機でテストする必要性はないと感じていたのですが、値自体を取得するためには実機を用いてテストする他ないのでしょうか。
エミュレータは現在、Android Studio内蔵のものと、Genymotionを用いています。
参考になるかどうかはわかりませんが、端末の方角を求めたときのコードを下記に記しておきます。
簡単な質問で申し訳ありませんが、ご回答よろしくお願いいたします。
Java
1package jp.androidbook.myapp; 2 3import android.hardware.Sensor; 4import android.hardware.SensorEvent; 5import android.hardware.SensorEventListener; 6import android.hardware.SensorManager; 7import android.os.Bundle; 8import android.support.v7.app.AppCompatActivity; 9import android.widget.TextView; 10 11import java.util.List; 12 13public class MainActivity extends AppCompatActivity 14 implements SensorEventListener { 15 16 SensorManager manager; 17 float[] rotationMatrix = new float[ 9 ]; 18 float[] a_value = new float[ 3 ]; 19 float[] m_value = new float[ 3 ]; 20 float[] attitude = new float[ 3 ]; 21 TextView textView; 22 23 float[] rotate = new float[ 16 ]; 24 float[] inclinate = new float[ 16 ]; 25 float[] remaped = new float[ 16 ]; 26 float[] orientation = new float[ 3 ]; 27 28 @Override 29 public void onCreate ( Bundle savedInstanceState ) { 30 super.onCreate ( savedInstanceState ); 31 setContentView ( R.layout.activity_main ); 32 textView = ( TextView ) findViewById ( R.id.textView ); 33 34 manager = ( SensorManager ) getSystemService ( SENSOR_SERVICE ); 35 36 manager.registerListener ( this, manager 37 .getDefaultSensor ( Sensor.TYPE_MAGNETIC_FIELD ), 38 SensorManager.SENSOR_DELAY_GAME ); 39 manager.registerListener ( this, manager 40 .getDefaultSensor ( Sensor.TYPE_ACCELEROMETER ), 41 SensorManager.SENSOR_DELAY_GAME ); 42 } 43 @Override 44 public void onAccuracyChanged ( Sensor sensor, int accuracy ) {} 45 46 @Override 47 public void onSensorChanged ( SensorEvent event ) { 48 // MAGNETIC_FIELDのセンサーが取得できていないので、すべてACCELEROMETER 49 switch ( event.sensor.getType () ) { 50 case Sensor.TYPE_MAGNETIC_FIELD: 51 m_value = event.values.clone (); 52 break; 53 case Sensor.TYPE_ACCELEROMETER: 54 a_value = event.values.clone (); 55 break; 56 } 57 if ( a_value != null && m_value != null ) { 58 SensorManager.getRotationMatrix ( rotate, inclinate, a_value, 59 m_value ); 60 SensorManager 61 .remapCoordinateSystem ( rotate, SensorManager.AXIS_X, 62 SensorManager.AXIS_Y, remaped ); 63 SensorManager.getOrientation ( remaped, orientation ); 64 float degree = ( float ) Math.toDegrees ( orientation[ 0 ] ); 65 66 TextView textView = ( TextView ) findViewById ( 67 R.id.textView ); 68 textView.setText ( "dgree:" + degree ); 69 } else { 70 textView.setText ( "Not Found!" ); 71 } 72 } 73}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/16 05:40