2014-05-12 60 views
0

傳感器服務出現錯誤。我很確定這是正確的語法,除非我錯過了一些東西。只需要那部分加速度計。非常感謝您是否可以發表想法。Sensor_Service不能作爲變量解析

public class AskQuestions extends Fragment { 

private SensorManager mSensorManager; 
private Sensor mAccelerometer; 
private ShakeDetector mShakedetector; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

View rootView = inflater.inflate(R.layout.fragment_questions, container, false); 
     //Error 
     mSensorManager = getSystemService(SENSOR_SERVICE); 

     mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

     mShakedetector = new ShakeDetector(new OnShakeListener() { 

      @Override 
      public void onShake() { 
       // TODO Auto-generated method stub 
       handleNewAnswer(); 
      } 
     }); 



     return rootView; 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     mSensorManager.registerListener(mShakedetector, mAccelerometer, 
       SensorManager.SENSOR_DELAY_UI); 
    } 
    @Override 
    public void onPause(){ 
     super.onPause(); 
     mSensorManager.unregisterListener(mShakedetector); 
    } 
    private void handleNewAnswer() { 
     if(makeMethink == true) { 
      result = answer.makeMeThink(); 
     }else if(WhatsTheAnswer == true){ 
      result = answer.whatsTheAnswer(); 
     } else if (inspireMe){ 
      result = answer.inspireQuotes(); 
     } 




       displayAnswer.setText(result); 
    } 



} 

回答

1

使用這個代替:

mSensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE); 

問題是你使用的代碼只能在Context(例如,Activity)的子類。 Fragment不是Context的子類,因此您必須獲取該類型的對象才能獲得系統服務。幸運的是,在Fragment中,您可以很容易地使用getActivity()獲得容器Activity

SENSOR_SERVICE是一個在Context中定義的常量,因此無論何時在Context的子類之外使用該常量,都必須編寫Context.SENSOR_SERVICE

+0

請解釋爲什麼你的方法解決了OP的問題。 – mavrosxristoforos

+0

添加了解釋。 –