2016-05-16 2 views
0

я построил маленькое приложение, которое в основном вибрирует и играет mp3 файл на проверку флажка, но как-то музыка не остановится после снятия галочки:Android медиаплеер не останавливается на флажке

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

Каждый раз, когда 'CheckBox' меняет свое состояние проверено, необходимо создать новый экземпляр' MediaPlayer', так что вы звоните 'стоп()' на неверном экземпляра , –

+0

hmm ok, как мне его изменить, чтобы вызвать правильный объект? –

ответ

-1

для игры mp3

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

начать

mPlayer.start(); 

остановить

mPlayer.stop(); 

В вашем случае использования

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

??? это именно то, что я сделал –

+0

@AlexOxilg Проверьте мой отредактированный ответ –

+0

, так что мне не нужен этот объект 'mediaPlayer'? –

 Смежные вопросы

  • Нет связанных вопросов^_^