1

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

但问题是当你按下主页按钮时,音乐一直在播放,我想在用户按下主页按钮时停止音乐。

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

我的代码是:

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

}

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

4

3 回答 3

1

我可以建议两种方法

1)让它进入onPause(),创建一个默认flag/boolean设置为falsetrue的,并且在任何情况下都会出现,例如新的活动启动,后按等。所以如果 onPause 被调用并且标志为假,你可以停止音乐。

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

编辑:- 知道您的应用程序是否不在前台。正如布赖恩在另一个答案中所建议的那样。看到这里你可以找到应用程序是前台还是后台并采取相应的行动

于 2013-02-02T20:06:39.777 回答
1

You need to launch a separate service to play the music.

method 1

This method scales better for large applications.

Call the following class periodically (once every 3 seconds, for example) inside your music service to see if your app is in the background. Credit: 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;
    }
}

method 2

Next, you need to close your service when you detect that your application has been backgrounded. See here: Checking if an Android application is running in the background. Notice that you don't want to manually override onPause and onResume in every class. You want to use a common ancestor where possible.

于 2013-02-02T20:07:56.023 回答
0

我发现最好的方法是在你的应用程序类中有一个静态布尔值,称为“活动”或其他东西。当您的任何活动暂停时将其设置为 false,当您的活动恢复时将其设置为 true。然后在 onStop 方法中检查“活动”的状态。如果它是假的,你可以安全地假设用户点击了主页并且没有其他活动开始。在此处关闭媒体播放器。

于 2013-02-06T03:11:44.730 回答