2017-03-26 15 views
2

このクラスは、電話機が上を向いているときと、下向きにして画面にプリントするときを検出するクラスです。匿名クラスからメソッドを呼び出す方法

package com.example.kyriakos.androiddetectflipping; 
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 java.util.List; 

public class Test extends Activity { 

    SensorManager sensorManager; 
    Sensor accelerometerSensor; 
    boolean accelerometerPresent; 

    TextView face; 

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

     face = (TextView)findViewById(R.id.face); 

     sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
     List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER); 
     if(sensorList.size() > 0){ 
      accelerometerPresent = true; 
      accelerometerSensor = sensorList.get(0); 
     } 
     else{ 
      accelerometerPresent = false; 
      face.setText("No accelerometer present!"); 
     } 
    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     if(accelerometerPresent){ 
      sensorManager.registerListener(accelerometerListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL); 
     } 
    } 

    @Override 
    protected void onStop() { 

     super.onStop(); 
     if(accelerometerPresent){ 
      sensorManager.unregisterListener(accelerometerListener); 
     } 
    } 

    public SensorEventListener accelerometerListener = new SensorEventListener(){ 

     @Override 
     public void onAccuracyChanged(Sensor arg0, int arg1) { 

     } 

     @Override 
     public void onSensorChanged(SensorEvent arg0) { 

      float z_value = arg0.values[2]; 
      if (z_value >= 0){ 
       face.setText("Face UP"); 
      } 
      else{ 
       face.setText("Face DOWN"); 
      } 
     }}; 


} 

は今、私は別のクラスからのメッセージを印刷したい

package com.example.kyriakos.androiddetectflipping; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

public class Flip extends AppCompatActivity{ 


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

}} 

私はこの

ようにフリップクラス内onSensorChangedメソッドを呼び出そうとしましたので、それがonSensorChangedメソッドは、メッセージを印刷するための責任があると思います
SensorEventListener ob = new SensorEventListener(); 
    ob.onSensorChanged; 

SensorEventListenerは匿名の内部クラスなので間違っています!!私の質問はこのメソッドをどのように呼び出すことができるのですか?メソッドf匿名の内部クラスですが、私は非常によく理解していません。私の質問がばかだが、私はJavaに新しい、アンドロイドと私は学ぶことを勉強しようとしています

+0

ここで、そのメソッドを呼び出すとしますか? 'Flip onCreate()'メソッドの中にありますか? – developer

+0

はい私はFlipクラスの中でそれを呼びたい – Kyriakos

+0

'onSensorChanged'メソッドを呼び出すには' SensorEvent 'オブジェクトが必要ですか?私はあなたのコードに 'SensorEvent'オブジェクトanywereが見つかりませんでした – developer

答えて

1

あなたは匿名クラスを割り当てていません基底クラスはobです。あなたがそれにアクセスすると、それがメソッドをオーバーロードしています使用している場合、あなたは何をする必要があるだろう:

Test test = new Test(); 
SensorEventListener ob = test.accelerometerListener; 

は、その後、あなたがそれをあなたのオーバーライドされたメソッドを呼び出すことができます。

+0

ありがとう、私は間違いを理解していると思いますので、このようにしてください。 'Test test = new Test(); SensorEventListener ob = test.accelerometerListener; ob.onSensorChanged(SensorEvent arg0);しかし今、それはarg0を解決できないと言います。/もう一度何か間違っているのですか?ありがとうございます。 – Kyriakos

+0

あなたはそれについて議論をしなければなりません。あなたはそれを実行して 'SensorEvent'を提供しなければなりません。何らかの形でそれを作成することによって 'sensEvent'を作成することができます(私はそれを構築する方法を知らない)。次にメソッドを 'ob.onSensorChanged(sensEvent)'と呼びます。これは通常Androidによって提供されます。以前はそれについての質問がありました。http://stackoverflow.com/questions/8734850/can-i-create-a-new-sensorevent-object-to-test-onsensorchanged-function –

+0

よろしくお願いいたします。私はそれを読むでしょう! – Kyriakos

関連する問題