如何在切换活动时阻止我的媒体播放器停止但不是在我点击HOME时停止?

时间:2013-02-02 19:59:35

标签: android android-layout android-intent android-activity android-music-player

我有一个播放音乐的应用程序。 (您也可以关闭选项菜单。)

但问题是,当您按下主页按钮时,音乐会继续播放,我想在用户按下HOME按钮时停止播放音乐。

我尝试将onPause()和onStop()方法放到music.stop()。但它失败了,因为当我开始一个新的活动时,音乐也会停止,但我不希望它,只有当按下主页按钮时。

我的代码是:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.options);
     it=(RadioButton)findViewById(R.id.radio0);
     ti=(RadioButton)findViewById(R.id.radio1);
     but=(ToggleButton)findViewById(R.id.toggleButton1);
     music=MediaPlayer.create(Options.this, R.raw.avril);
   mainmenu=new Intent("com.KAYA.ingilizce_gelistirme.BASLANGIC");


    but.setOnClickListener(new View.OnClickListener()   {

        @Override
        public void onClick(View v) {
            if(but.isChecked()) {
                if(!music.isPlaying())
            music.start();
            }
            else
            if(music.isPlaying())
            music.pause();

        }
    });
     it.setChecked(true);
     Button menu=(Button)findViewById(R.id.button1);
     menu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivity(mainmenu);
        }
    });

}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub


    startActivity(new Intent(mainmenu));
    }


@Override
protected void onPause() {

    if(music.isPlaying()){
    music.pause();
    music.release();
    }
    but.setChecked(false);

    super.onPause();

}



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

}

这里是音乐开始播放的OPTIONS ACTIVITY,但是当我通过菜单活动时,音乐也会停止。

3 个答案:

答案 0 :(得分:1)

我可以通过两种方式建议

1)让它在onPause()中,创建一个默认设置为flag/boolean的{​​{1}},在每个案例中都会false,例如新活动启动,在背面按等。所以如果调用onPause并且flag为false,你可以停止音乐。

2)你已经有了背景true,你可以继续检查哪个活动在前台,如果service你可以停止音乐。

编辑: - 了解您的应用是否不在前台。正如Brian在另一个答案中所建议的那样请参阅here you can find if app is foreground or in background并采取相应措施

答案 1 :(得分:1)

您需要启动单独的服务来播放音乐。

方法1

此方法可以更好地扩展到大型应用程序。

在音乐服务中定期(例如每3秒一次)调用以下课程,以查看您的应用是否在后台。信用:check android application is in foreground or not?

class ForegroundCheckTask extends AsyncTask<Context, Void, Boolean> {
    @Override
    protected Boolean doInBackground(Context... params) {
        final Context context = params[0];
        return isAppOnForeground(context);
    }

    private boolean isAppOnForeground(Context context) {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
        if (appProcesses == null) {
            return false;
        }
        final String packageName = context.getPackageName();
        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
                return true;
            }
        }
        return false;
    }
}

方法2

接下来,当您检测到应用程序已经背景化时,您需要关闭服务。见这里:Checking if an Android application is running in the background。请注意,您不希望在每个类中手动覆盖onPause和onResume。您希望尽可能使用共同的祖先。

答案 2 :(得分:0)

我发现的最好方法是在Application类中使用一个名为“active”的静态布尔值。当您的任何活动暂停时将其设置为false,并在恢复活动时将其设置为true。 然后检查onStop方法中“active”的状态。如果它是假的,您可以安全地假设用户已经点击了家,并且没有其他活动已经开始。在这里关闭媒体播放器。