【问题标题】:Implementing Music Across Activities跨活动实施音乐
【发布时间】:2014-10-28 19:09:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android eclipse audio adt


    【解决方案1】:

    固定:

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

    @Override
    protected void onDestroy() {
        super.onDestroy();
        doUnbindService();
    }
    

    【讨论】:

      【解决方案2】:

      please red : onCreate, OnPause , OnResume

      【讨论】:

      • 这不是一个真正的答案。您应该解释他做错了什么以及如何解决,而不是简单地抛出关键字(其中两个是 OP 在他的问题中使用的)。请在文本中执行此操作,而不是在图像中。目前尚不清楚这如何回答这个问题。
      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 2012-04-26
      相关资源
      最近更新 更多