2016-05-16 9 views
0

ich eine kleine app gebaut, die im Grunde vibriert und spielen eine MP3-Datei, die eine Checkbox auf Überprüfung, aber irgendwie die Musik wird nach unchecking das Kontrollkästchen nicht stoppen:Android Mediaplayer nicht stoppen auf Checkbox

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final Vibrator vibrator = (Vibrator) MainActivity.this.getSystemService(Context.VIBRATOR_SERVICE); 
     final CheckBox vibrateBoxStrong = (CheckBox) findViewById(R.id.checkPowerStrong); 

     final Handler handler = new Handler(); 

     final Runnable r = new Runnable() { 
      public void run() { 
       vibrator.vibrate(1000); 
       handler.postDelayed(this, 1000); 
      } 
     }; 

     vibrateBoxStrong.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
        MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.fansound1); 
        if(vibrateBoxStrong.isChecked()) { 
         handler.postDelayed(r, 100); 
         mediaPlayer.start(); 
        } else { 
         mediaPlayer.stop(); 
         handler.removeCallbacks(r); 
         vibrator.cancel(); 
        } 
       } 
      } 
     ); 
    } 
} 
+1

Jedes Mal, wenn die 'CheckBox' seinen überprüft den Zustand ändert, erstellen Sie eine neue' MediaPlayer' Instanz, so dass Sie rufen 'stop()' auf der falschen Instanz . –

+0

hmm ok, wie soll ich es ändern, um das richtige Objekt aufzurufen? –

Antwort

-1

für das Spiel mp3

MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.aaanicholas); 

mPlayer.start(); 

zu stoppen

zu starten
mPlayer.stop(); 

In Ihrem Fall Gebrauch

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final Vibrator vibrator = (Vibrator) MainActivity.this.getSystemService(Context.VIBRATOR_SERVICE); 
     MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.aaanicholas); 
     Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE); 
     final CheckBox vibrateBoxStrong = (CheckBox) findViewById(R.id.checkPowerStrong); 


     vibrateBoxStrong.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
        MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.fansound1); 
        if(vibrateBoxStrong.isChecked()) { 
         v.vibrate(1000);   // it will vibrate for 1000 milliseconds 
         mPlayer.start();   
        } else { 
         mPlayer.stop(); 

         vibrator.cancel(); 
        } 
       } 
      } 
     ); 
    } 
} 
+0

??? genau das habe ich getan –

+0

@AlexOxilg Prüfe meine bearbeitete Antwort –

+0

, also brauche ich dieses Objekt 'mediaPlayer' nicht? –