Något fel på min knappkod med if-sats? Bug i SoundManager?

Diskussion i 'Frågor, support och diskussion' startad av xtreme, 12 okt 2010.

  1. xtreme

    xtreme Adult Droid Medlem

    Blev medlem:
    12 apr 2010
    Inlägg:
    516
    Mottagna gillanden:
    13

    MINA ENHETER

    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;
    	
    			}
    		
    		}
    	};