追記(目標としてはonSensorChangedの中にあるx,yを自分で作ったクラスで使いたいです。)
関数setDatax,setDatayを用いるとLog.iでx、yの値を見たところセンサーからの値を更新することができました。しかし他のクラスで値を受け取ろうとすると0のままです。これを0ではなく更新された値を獲得するには何を学べばいいでしょうか?
activityはインスタンス化できないということなのでこの方法が根本的に違うのでしたら、どういう方法を用いればいいでしょうか?教えてください
値を渡す側のプログラムはSBクリエイティブの『初めてのandroidプログラミング』の6章に乗っているコードを参考にしており、SBクリエイティブのサイトからサンプルプログラムをダウンロードできます。
#値を渡す側
java
1import android.content.Context; 2import android.content.pm.ActivityInfo; 3import android.graphics.Canvas; 4import android.graphics.Color; 5import android.graphics.Paint; 6import android.hardware.Sensor; 7import android.hardware.SensorEvent; 8import android.hardware.SensorEventListener; 9import android.hardware.SensorManager; 10import android.os.Bundle; 11import android.support.v7.app.AppCompatActivity; 12import android.util.Log; 13import android.view.SurfaceHolder; 14import android.view.SurfaceView; 15 16 17 18public class MainActivity extends AppCompatActivity 19 implements SensorEventListener, SurfaceHolder.Callback { 20 //SurfaceView生成時のイベントをコールバックで受け取るためにMainActivityにSurfaceHolder.Callback を実装 21 SensorManager mSensorManager; 22 Sensor mAccSensor; 23 SurfaceHolder mHolder; 24 int mSurfaceWidth = 0;//画面の幅 25 int mSurfaceHeight = 0;//画面の高さ 26 float y; 27 float x; 28 29 30 31 32 @Override 33 protected void onCreate(Bundle savedInstanceState) { 34 super.onCreate(savedInstanceState); 35 setContentView(R.layout.activity_main); 36 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 37 mAccSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); 38 39 } 40 41 public void setDatax(float data1){ 42 this.x = data1; 43 } 44 public void setDatay(float data1){ 45 this.y = data1; 46 } 47 48 @Override 49 public void onSensorChanged(SensorEvent event) { 50 if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { 51 y = event.values[0]; 52 x = event.values[1]; 53 setDatax(x); 54 setDatay(y); 55 } 56 } 57 58 @Override 59 public void onAccuracyChanged(Sensor sensor, int i) { 60 } 61 62 @Override 63 public void surfaceCreated(SurfaceHolder surfaceHolder) { 64 registerSensor(); 65 } 66 67 public void registerSensor() { 68 mSensorManager.registerListener(this, mAccSensor, SensorManager.SENSOR_DELAY_GAME); 69 } 70 @Override 71 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 72 mSurfaceWidth = width; 73 mSurfaceHeight = height; 74 } 75 76 @Override 77 public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 78 mSensorManager.unregisterListener(this); 79 } 80 81}
#受け取る側
java
1public class myclass { 2MainActivity ma = new MainActivity 3float x1 = ma.x; 4float y1 = ma.y; 5 6}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。