Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何停止媒体播放器在线程内运行_Android - Fatal编程技术网

Android 如何停止媒体播放器在线程内运行

Android 如何停止媒体播放器在线程内运行,android,Android,每当按下process(进程)对话框的stop(停止)选项时,我都试图停止媒体播放器并退出我的activity(活动)类,但通过使用下面的代码,我可以退出activity(活动)类,但无法停止媒体播放器的声音,并且它一直运行到线程停止 请在这件事上帮助我 提前支付 public class Test_Service extends Activity { private MediaPlayer mp; private Thread welcomeThread; @Override public

每当按下process(进程)对话框的stop(停止)选项时,我都试图停止媒体播放器并退出我的activity(活动)类,但通过使用下面的代码,我可以退出activity(活动)类,但无法停止媒体播放器的声音,并且它一直运行到线程停止

请在这件事上帮助我 提前支付

public class Test_Service extends Activity {

private MediaPlayer mp;
private Thread welcomeThread;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mp = MediaPlayer.create(Test_Service.this,R.raw.alarm1);


    welcomeThread=new Thread() {
      int wait = 0;
            @Override
        public void run() {
            try {
                super.run();
                    while (wait <30000) {

                     mp.start();
                     sleep(3000);
                    wait +=3000;
                    }
            } catch (Exception e) {
                System.out.println("EXc=" + e);
            } finally {

        }
        }
    };
    new AlertDialog.Builder(Test_Service.this)
    .setTitle("Alarm is running")
    .setPositiveButton("Stop",new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        mp.stop();
                    welcomeThread.stop(); 
        Test_Service.this.finish();

    }
    })
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        mp.stop();
        Test_Service.this.finish();


}
    })
    .create().show();
    welcomeThread.start();
        }

    }
公共类测试服务扩展活动{
私人媒体播放器;
私有线程welcomeThread;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mp=MediaPlayer.create(Test_Service.this,R.raw.alarm1);
welcomeThread=新线程(){
int wait=0;
@凌驾
公开募捐{
试一试{
super.run();

while(wait首先,您应该使用
处理程序
及其方法来延迟启动

此外,您可以在AlertDialog上设置以下
OnDismissListener
,并将播放器停在那里以避免代码重复

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

    @Override
    public void onDismiss(DialogInterface dialog) {
        mp.release();
        handler.removeCallbacks(startingRunnable);
        finish();
    }
});

将停止并释放您的MediaPlayer。如果要重用此MediaPlayer,您必须在调用
release()

后创建一个新的MediaPlayer。首先,您应该使用
处理程序及其方法延迟启动

此外,您可以在AlertDialog上设置以下
OnDismissListener
,并将播放器停在那里以避免代码重复

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

    @Override
    public void onDismiss(DialogInterface dialog) {
        mp.release();
        handler.removeCallbacks(startingRunnable);
        finish();
    }
});
将停止并释放您的MediaPlayer。如果要重用此MediaPlayer,必须在调用
release()

welcomeThread.stop();后创建一个新的MediaPlayer。使用welcomeThread.interrupt();不是一个好的做法,而是使用welcomeThread.interrupt();