ToggleButton die Vibration einrichten
Da ich euch in Tutorial Dialog ? ein Layout über dem SurfaceView anlegen den Code für die pausescreen.xml zur verfügung gestellt hatte und die ToggelButton dadurch bereits eine passende Id haben, müssen wir diese nicht mehr verändern. Wäre dies nicht der Fall, wäre es klug den ToggeButton eine sinnvolle Id zu geben.
Damit man das Smartphone mit der Methode…
public void vibrator() {
Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vb.vibrate(200);
}
… in der wir ein Objekt vom Typen Vibrator anlegen und den VIBRATOR_SERVICE zurodnen und ihn dann in Zeile 3, für 200ms vibrieren lassen, kann – müssen wir im AndroidManifest die Rechte eintragen. Das haben wir zwar in einem der letzten Tutorials getan, jedoch möchte ich das zur Wiederholung nochmal angeben:
<uses-permission android:name="android.permission.VIBRATE"/>
Permissions fügen wir im XML – Coder des AndroidManifestes immer nach der Zeile…
<uses-sdk android:minSdkVersion="8" />
… ein.
Da unsere Methode initialize() der GameActivity Klasse bereits unsere anderen Button anlegt, werden wir diese erweitern um dort unsere ToggleButton anzulegen und ihnen die erwünschte Funktionalität zu geben.
Für den ToggleButton der für die Vibration zuständig ist, benötigen wir folgenden Code
SharedPreferences pref = getSharedPreferences("GAME", 0);
vibrationToggleState = pref.getBoolean("vibrationToggleState", false);
vibrationToggle = (ToggleButton) dialog.findViewById(R.id.tbVibration);
vibrationToggle.setChecked(vibrationToggleState);
vibrationToggle.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
saveVibrationToggleState();
}
});
Wie ich bereits in einem der letzten Tutorials erwähnt hatte, benötigen wir auch hierbei SharedPreferences, da wir speichern möchten, ob der User die Vibration aktiv haben möchte, oder nicht.
In Zeile 1 legen wir ein Objekt vom Typen SharedPreferences an, welches die Infos von “GAME” bezieht.
In Zeile 2 holen wir uns den Boolean – Wert der in “vibrationToggleState” gespeichert ist und ordnen ihn unserer boolschen Variable vibrationToggleState zu. Wenn in vibrationToggleState” nichts gespeichert ist, soll der Wert false sein.
In Zeile 3 ordnen wir unserem ToggleButton die Id zu.
In Zeile 4 setzen wir den ToggleButton abhängig von vibrationToggleState auf true(isChecked) oder false.
In Zeile 5ff legen wir eine Instanz des onClickListeners an und setzen diese.
In der onClick () Methode rufen wir die Methode saveVibrationToggleState() auf.
Diese Methode sieht folgender Maßen aus:
public void saveVibrationToggleState(){
SharedPreferences pref = getSharedPreferences("GAME", 0);
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("vibrationToggleState", vibrationToggle.isChecked());
editor.commit();
}
Außer Zeile 5, in der “vibrationToggleState” zugeordnet wird, ob der ToggleButton aktiv oder inaktiv ist, sollte nichts neu für uns sein.
Um nun in unserer Klasse GameView, in der wir den onTouchEvent haben auf den Zustand unseres ToggleButtons zugreifen zu können, benötigen wir noch einen getter für vibartionToggleState:
public boolean getVibrationToggleState(){
return vibrationToggleState;
}
Jetzt müssen wir noch bestimmen wann wir möchten, dass das Smartphone vibriert.
Dies ist der Fall wenn der Spieler auf einen “falschen” Sprite klickt und ein leben verliert. also fügen wir es in unserer onTouchEvent() – Methode direkt nach lives–; ein:
if (theGameActivity.getVibrationToggleState())
theGameActivity.vibrator();