android - 关闭应用程序时使用 MediaPlayer 的服务不会停止 - Android

标签 android android-music-player

我正在开发一个简单的游戏,其中 3 个 Activity (菜单、设置和排名列表)需要一个背景音乐,该背景音乐应该在后台流畅播放,即使例如用户离开菜单并进入设置然后返回。

为此,我创建了完美运行的服务。只有一个主要问题:当应用程序关闭时(例如用户按下主页按钮),音乐不会停止播放。

我试过 onDestroy、onStop、onPause 但问题没有解决。

服务:

package com.android.migame;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.IBinder;

public class Meni_music extends Service implements OnCompletionListener {

    private static final String TAG = null;
    MediaPlayer player;

    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        player = MediaPlayer.create(this, R.raw.menu);
        player.setLooping(true); // Set looping
    }

    public int onStartCommand(Intent intent, int flags, int startId) {
        player.start();
        return 1;
    }

    public IBinder onUnBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onDestroy() {
        player.stop();
        player.release();
        stopSelf();
    }

    @Override
    public void onLowMemory() {
    }

    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
    }
}

菜单:

package com.android.migame;

    import android.app.Activity;
    import android.app.ActivityManager;

    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.ImageView;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;

    public class Meni extends Activity {

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

            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            setContentView(R.layout.meni);

            startService(new Intent(Meni.this,Meni_music.class));

        }

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

        @Override
        protected void onResume() {
            super.onResume();
        }

}

最佳答案

我认为通过创建您自己的应用程序类来最合乎逻辑地解决此行为。使用以下方法在您的 list 中注册此类:

<application
    android:name="MyApplication"

MyApplication 类看起来像这样:

public class MyApplication extends Application
    implements ActivityLifecycleCallbacks, Runnable
{
    private Handler h;

    @Override public void onCreate()
    {
        h = new Handler();
        registerActivityLifecycleCallbacks(this);
    }

    public void onActivityCreated(Activity activity, Bundle savedInstanceState) { }
    public void onActivityStarted(Activity activity) { }
    public void onActivityStopped(Activity activity) { }
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) { }
    public void onActivityDestroyed(Activity activity) { }

    public void onActivityResumed(Activity activity)
    {
        h.removeCallbacks(this);
        startService(new Intent(this, Meni_music.class));
    }

    public void onActivityPaused(Activity activity);
    {
        h.postDelayed(this, 500);
    }

    public void run()
    {
        stopService(new Intent(this, Meni_music.class));
    }
}

关于android - 关闭应用程序时使用 MediaPlayer 的服务不会停止 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16628468/

相关文章:

android - 编辑文本标签?

android - 停止声音服务

android - 在默认音乐播放器上播放歌曲 - android

Android 2.3 音乐播放器源代码

android - 如何检查是否正在从哪个音乐应用程序播放音乐?

Android MediaPlayer 准备时间过长

android - 约束布局 : animating multiple views at once

java - Android map : Failed to load map. 无法联系谷歌服务器

android - 自定义 Android AutoCompleteTextView

android - UrbanAirship 安卓广播接收器