Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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
Java 跨活动实施音乐_Java_Android_Eclipse_Audio_Adt - Fatal编程技术网

Java 跨活动实施音乐

Java 跨活动实施音乐,java,android,eclipse,audio,adt,Java,Android,Eclipse,Audio,Adt,问题:当我使用home(主页)按钮关闭应用程序时,音乐会继续播放。所以我手动关闭应用程序,停止活动,音乐停止。。。几秒钟,然后再次启动(这次重启是为了将其关闭) MusicService.class: package com.MyApp.App; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaPlayer

问题:当我使用home(主页)按钮关闭应用程序时,音乐会继续播放。所以我手动关闭应用程序,停止活动,音乐停止。。。几秒钟,然后再次启动(这次重启是为了将其关闭)

MusicService.class:

package com.MyApp.App;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;

public class MusicService extends Service implements
    MediaPlayer.OnErrorListener {

    private final IBinder mBinder = new ServiceBinder();
    MediaPlayer mPlayer;
    private int length = 0;

    public MusicService() {
    }

    public class ServiceBinder extends Binder {
        MusicService getService() {
            return MusicService.this;
        }
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return mBinder;
    }

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

        mPlayer = MediaPlayer.create(this, R.raw.test_music);
        mPlayer.setOnErrorListener(this);

        if (mPlayer != null) {
            mPlayer.setLooping(true);
            mPlayer.setVolume(100, 100);
        }

        mPlayer.setOnErrorListener(new OnErrorListener() {

            public boolean onError(MediaPlayer mp, int what, int extra) {

                onError(mPlayer, what, extra);
                return true;
            }
        });
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mPlayer.start();
        return START_STICKY;
    }

    public void pauseMusic() {
        if (mPlayer.isPlaying()) {
            mPlayer.pause();
            length = mPlayer.getCurrentPosition();
        }
    }

    public void resumeMusic() {
        if (mPlayer.isPlaying() == false) {
            mPlayer.seekTo(length);
            mPlayer.start();
        }
    }

    public void stopMusic() {
        mPlayer.stop();
        mPlayer.release();
        mPlayer = null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mPlayer != null) {
            try {
                mPlayer.stop();
                mPlayer.release();
            } finally {
                mPlayer = null;
            }
        }
    }

    public boolean onError(MediaPlayer mp, int what, int extra) {

        Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show();
        if (mPlayer != null) {
            try {
                mPlayer.stop();
                mPlayer.release();
            } finally {
                mPlayer = null;
            }
        }
        return false;
    }
}
MainPage.class:

package com.MyApp.App;

import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;

public class MainPage extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_page);

        Intent music = new Intent();
        music.setClass(this, MusicService.class);
        startService(music);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mServ.stopMusic();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mServ.pauseMusic();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mServ.stopMusic();
    }

    private boolean mIsBound = false;
    private MusicService mServ;
    private ServiceConnection Scon = new ServiceConnection() {

        public void onServiceConnected(ComponentName name, IBinder binder) {
            mServ = ((MusicService.ServiceBinder) binder).getService();
        }

        public void onServiceDisconnected(ComponentName name) {
            mServ = null;
        }
    };

    void doBindService() {
        bindService(new Intent(this, MusicService.class), Scon,
                Context.BIND_AUTO_CREATE);
        mIsBound = true;
    }

    void doUnbindService() {
        if (mIsBound) {
            unbindService(Scon);
            mIsBound = false;
        }
    }
}

(注意:我已从我的应用程序中摘录,因此我可能忘记了此代码中的导入,但所有导入都正确地包含在应用程序中。)

请红色:onCreate、OnPause、OnResume

修复:

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

    doBindService();

    Intent music = new Intent();
    music.setClass(this, MusicService.class);
    startService(music);
}


这不是一个真正的答案。你不应该简单地扔掉关键词(OP在他的问题中使用了两个),而应该解释他做错了什么以及如何修复它。请在文本中而不是图像中执行此操作。目前还不清楚这是如何回答这个问题的。
@Override
protected void onDestroy() {
    super.onDestroy();
    doUnbindService();
}