Första biten av koden känner bara av ifall mobilen rör sig. Om knappen (andra biten av koden) är locked ska executeShakeAction(); köras som startar ett ljud. När knappen blir unlocked ska ljudet stoppas.
Problemet är att det fungerar EN gång. Klickar på knappen och när jag rör på mobilen höres ett ljud. Klickar jag på knappen en gång till så slutar ljudet. Men andra gången när jag klickar på knappen igen startar ljudet precis som första gången men stoppas inte. Precis som SoundManager.stopSound(2); inte anropas andra gången trots att bilden bytas. Vad beror det på?
Har en ljudklass som heter SoundManager som innehåller följande kod: http://www.droidnova.com/creating-sound-effects-in-android-part-2,695.html
I stegform fungerar det såhär:
- Första knapptryckningen: ljudet startar vid beröring
- Andra knapptryckningen: ljudet stoppas/avbryts
- Tredje knapptryckningen: ljudet startar vid beröring (hända hit är allt som det ska)
- Fjärde knapptryckningen: ljudet stoppas/avbryts inte utan fortsätter för evigt (anropar en metod för att loppa ljudet). På fjärde trycket ska det ske samma som på andra.
Kod:
private boolean locked = false;
Läst lite på internet att SoundManager har en bug. Det som orsakar problemet? Hur kommer man så fall runt det?
Kod:
private final SensorEventListener mySensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent se) {
updateAccelParameters(se.values[0], se.values[1], se.values[2]); // (1)
if ((!shakeInitiated) && isAccelerationChanged()) { // (2)
shakeInitiated = true;
} else if ((shakeInitiated) && isAccelerationChanged()
//Här testar jag om knappen är låst eller inte
&& locked == true) { // (3)
executeShakeAction();
} else if ((shakeInitiated) && (!isAccelerationChanged())) { // (4)
shakeInitiated = false;
}
}
Kod:
ImageButton.OnClickListener UnlockedButtonOnClickListener = new ImageButton.OnClickListener() {
@Override
public void onClick(View v) {
//Locking
if(locked == false){
//Visar en bild att den är låst
unlocked.setImageResource(R.drawable.pink_locked);
//Låser den
locked = true;
}else if (locked == true) {
//Unlocking
//Stoppar ljudet ifall det sats igång när den var låst
SoundManager.stopSound(2);
//Bytar bild
unlocked.setImageResource(R.drawable.blue_unlocked);
//Sätter den till olåst
locked = false;
}
}
};