TextViews
にセンサーの読み取り値を表示するFragment
が必要です。 SensorManager
を初期化しようとすると、getSystemServices
でFragment
が未定義になります、とEclipseは言います。
フラグメント
public class FragSensors extends Fragment {
private TextView accXTv, accYTv, accZTv;
private SensorManager sensorManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.frag_sensors, container, false);
accXTv = (TextView) v.findViewById(R.id.accXValue);
accYTv = (TextView) v.findViewById(R.id.accYValue);
accZTv = (TextView) v.findViewById(R.id.accZValue);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
private final SensorEventListener mSensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
};
}
もう1つのメソッド呼び出し:
_sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
_
なぜ1つの余分なメソッド呼び出しですか?
システムサービスへのアクセスを提供するgetSystemService()
メソッドは、Context
から取得されます。 Activity
はContext
を拡張し、Fragment
は拡張しません。したがって、最初にActivity
が含まれるFragment
への参照を取得してから、必要なシステムサービスを魔法のように取得する必要があります。
つかいます:
getActivity().getSystemService(name)
sensorManager = (SensorManager) getActivity().getSystemService(Context.NAMEOF_SERVICE);
フラグメントはシステムサービスを直接呼び出すことができません。これらのフラグメントが添付されているアクティビティを使用する必要があります
Kotlinの使用:
this.sensorManager = activity!!.getSystemService(Context.SENSOR_SERVICE) as SensorManager
LayoutInflaterからコンテキストを取得することもできます。
SensorManager sm = (SensorManager) getLayoutInflater().getContext().getSystemService(Context.SENSOR_SERVICE);