我有一个播放音乐的应用程序。 (您也可以关闭选项菜单。)
但问题是,当您按下主页按钮时,音乐会继续播放,我想在用户按下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,但是当我通过菜单活动时,音乐也会停止。
答案 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)
您需要启动单独的服务来播放音乐。
此方法可以更好地扩展到大型应用程序。
在音乐服务中定期(例如每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;
}
}
接下来,当您检测到应用程序已经背景化时,您需要关闭服务。见这里:Checking if an Android application is running in the background。请注意,您不希望在每个类中手动覆盖onPause和onResume。您希望尽可能使用共同的祖先。
答案 2 :(得分:0)
我发现的最好方法是在Application类中使用一个名为“active”的静态布尔值。当您的任何活动暂停时将其设置为false,并在恢复活动时将其设置为true。 然后检查onStop方法中“active”的状态。如果它是假的,您可以安全地假设用户已经点击了家,并且没有其他活动已经开始。在这里关闭媒体播放器。