我想在我的应用程序后台播放音频文件。很容易。我希望音乐在我的应用程序中的 Activity 之间切换时持续播放,而不是停止或暂停。也相当简单,只需在 onCreate 方法中执行此操作即可完成:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mp = MediaPlayer.create(MainActivity.this, R.raw.lostmexicancity);
mp.setLooping(true);
mp.start();
}
问题?当我按下主页按钮时让音乐停止。
在用户按下后退按钮时关闭声音似乎很容易。这是我所拥有的并且效果很好:
public void onPause() {
if(this.isFinishing()){ //BACK was pressed from this activity
mp.stop();
}
super.onPause(); }
并不复杂,但这不会捕捉到 HOME 按钮的按下。如果按下主页按钮,即使用户不再看到我的应用程序,音乐也会继续播放。
我看到的答案涉及在 list 中设置 Get Tasks 的权限,我不应该这样做并且对用户来说似乎很危险。除此之外,该解决方案甚至都不起作用。我见过涉及使用服务的解决方案,但这些解决方案都不起作用,因为主页按钮仍然像以前一样播放音乐,因为似乎没有办法捕捉它并且它没有“完成”应用程序(更不用说每次有人建议为此任务使用服务时,都会有很多人进来并声明这不是服务的正确使用方式)
似乎在按下主页按钮时停止音乐的唯一方法是在 onPause 中使用非条件停止(),但这并不好,因为当我交换 Activity 与 Intent 时调用它,导致音乐在 Activity 之间结束是不好的。
我很难想象像背景音乐这样的常见功能有这么难,但我看到了一个接一个的帖子,都和我有同样的问题,除了那些会在应用程序内的 Activity 之间杀死音乐之外没有合适的答案.
Google Play 商店中的所有其他应用程序如何做到这一点,但网上似乎没有明确的答案?我可以在每次 onPause() 时停止并开始播放音乐,但这会导致音频出现不专业的间隙,更不用说它会一遍又一遍地从头开始播放背景音频,这是 Not Acceptable 。
最佳答案
我对 Android 编程有点陌生(几个月),今天,我遇到了和你一样的问题(也许你现在还是这样?)
我让它工作如下:
假设我有 MainActivity,在 MainActivity 中我有 Btn2 导致 SecondActivity,Btn3 导致 ThirdActivity。
我在 MainActivity 的开头声明:
public static boolean shouldPlay = false;
然后我实现了我的 onStop() 方法:
public void onStop() {
super.onStop();
if (!shouldPlay) { // it won't pause music if shouldPlay is true
player.pause();
player = null;
}
}
如果 boolean 值 shouldPlay 设置为 true,则我的 onStop() 不会被完全调用,我的音乐也不会关闭。然后我必须决定何时将其设置为 true。当我从 MainActivity 切换到 SecondActivity 时,我通过一个 Intent 来完成它,那时我将 shouldPlay 设置为 true :
Button Btn2 = (Button) findViewById(R.id.Btn2);
Btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
shouldPlay = true;
startActivity(intent);
}
});
Btn3 也是如此。
现在,我们最不想寻找的是,如果我在访问 SecondActivity 或 ThirdActivity 后返回 MainActivity,那么 shouldPlay 将被设置为 true。我尝试的第一件事是在调用 Second 和 ThirdActivity 后立即将其设置为 false(在它们的 onCreate() 中)但它想要工作,可能是因为同时调用了来自 Main 的 onStop() 和来自其他人的 onCreate() (坦率地说,我现在还没有真正了解生命周期)。 每次启动 Main 的 onCreate() 时,只需将 shouldPlay 设置为 false 即可:
shouldPlay = false;
这对我来说很管用。 让我知道它是否适合你, 干杯,
关于java - 跨多个 Activity 的安卓背景音乐;如何捕捉主页按钮按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591563/