Mik*_*ike 26 android background media-player
编辑 - 找到一个简单的5-10线解决方案!看下面我自己的答案!好极了!!!!!!!!!
我搜索了5个小时,数十个SO帖子,没有答案,这似乎是最简单明显的怪异事!
编辑顺便说一句,这不是一个音乐播放器的应用程序,只是一个应用程序来查看图片和文本,打开多个活动,如菜单和关于,查看差异类型的图片等.我只想播放一些简单的背景音乐,同时通过图片看和文字,为什么这么难?
另一个编辑 - 似乎主要的问题是:"为什么按下主页按钮不打开onPause或onStop ???" - 我可以知道何时停止媒体播放器?我在市场上下载的游戏怎么做到这个???
家庭活动开始
然后
媒体播放器开始:
player = MediaPlayer.create(this, R.raw.idil);
player.setLooping(true);
player.setVolume(100,100);
player.start();
Run Code Online (Sandbox Code Playgroud)
玩家在onCreate之外宣布
MediaPlayer player;
Run Code Online (Sandbox Code Playgroud)
当其他活动被打开时,背景音乐继续不间断,这很好,这就是我想要的.
现在,当我完成了我非常简单的应用程序(只显示差异活动中的一些图片和文本)时,我要么多次单击BACK以进入主页/原始活动,然后又一次"退出",或者,我只是按回家"退出",因为我已经完成了这个应用程序,我不再需要听到那个音乐了.
选项1
通话player.stop();中的onPause覆盖,这是不是我想要的,因为当我离开家的活动像"菜单"和"约",我也没有什么用暂停和打开新的活动的时候,因为我做恢复等活动的背景音乐停止不希望漂亮的背景音乐"跳过"或被打断.
方案2
@Override
protected void onPause() {
super.onPause();
if (this.isFinishing()){
player.stop();
}
}
Run Code Online (Sandbox Code Playgroud)
这是更好的,因为背景音乐不会在活动之间停止,当我从我的家庭活动按BACK时,音乐停止,我可以继续享受安卓的安卓手机,但问题是,当按下HOME时按钮"退出"我的应用程序,那讨厌的背景音乐继续播放.
奇怪
@Override
protected void onStop() {
super.onStop();
if (this.isFinishing()){
player.stop();
}
}
Run Code Online (Sandbox Code Playgroud)
与onPause相同(我确实理解实际的差异)
编辑 - 这似乎没关系,如果player.stop(); 高于或低于super.onStop(); 但它影响我无法看到的东西,无论哪种方式,仍然没有解决方案:(
OOOOO
OOOOO
编辑 - 另一个选项 - 但不工作
public void onUserLeaveHint() {
player.stop();
super.onUserLeaveHint();
}
Run Code Online (Sandbox Code Playgroud)
这会在我按HOME时停止音乐,但是当我开始新的活动时它也会停止:(
编辑 - 我看到多个地方非常常见的工作,但似乎很荒谬:
essentialy保持已经打开和关闭的活动数量的计数(onResume和onPause可能是最好的,但这点不相关),当该计数达到0时,停止背景音乐.是的,这很简单,但为什么我必须以编程方式执行此操作,实际上这个帖子的最大问题是:
将它放入onDestroy不是一个选项,因为onDestroy仅在系统内存不足时调用,或者您强行关闭应用程序,并且有详细记录.
覆盖HOME按钮也是没有选择,因为我已经读过它"不可能"而且我已经读过它"非常不满意",无论哪种方式我都避免这样做.
我没有看到创建SERVICE的必要性,即使我这样做,我何时会停止服务,似乎我会遇到同样的问题
现在,这完全打动了我的想法,我从Android市场下载的每个游戏和每个应用程序都有非常漂亮的背景音乐,当我按BACK或HOME因为我完成了那个可爱的游戏,音乐停止了,而不是保持在后台玩.
我非常沮丧,我觉得这是因为我觉得我错过了一些非常简单的东西,因为这是任何应用程序最基本的生命周期问题之一.
我花了一个月的时间阅读developer.android.com的每一页,包括开发指南,教程,示例项目和研究参考部分,以及谷歌这个主题5个小时.
我也不明白为什么6或7个具有完全相同问题的SO线程尚未得到解答,市场上的每个可下载应用程序在您按HOME或BACK或其他任何内容时都停止播放其音乐(除非它是背景音乐播放器) "退出"应用程序以在手机上执行其他操作.
我错过了什么?
Mik*_*ike 22
我今天很开心,还有头发:)我已经测试了这个并且它有效!
首先,将此添加到您的清单中:
<uses-permission android:name="android.permission.GET_TASKS"/>
Run Code Online (Sandbox Code Playgroud)
其次,将其添加到"Home/Main"活动/班级:
@Override
protected void onPause() {
if (this.isFinishing()){ //basically BACK was pressed from this activity
player.stop();
Toast.makeText(xYourClassNamex.this, "YOU PRESSED BACK FROM YOUR 'HOME/MAIN' ACTIVITY", Toast.LENGTH_SHORT).show();
}
Context context = getApplicationContext();
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
if (!taskInfo.isEmpty()) {
ComponentName topActivity = taskInfo.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
player.stop();
Toast.makeText(xYourClassNamex.this, "YOU LEFT YOUR APP", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(xYourClassNamex.this, "YOU SWITCHED ACTIVITIES WITHIN YOUR APP", Toast.LENGTH_SHORT).show();
}
}
super.onPause();
}
Run Code Online (Sandbox Code Playgroud)
显然,用你的类名替换xYourClassNamex :)
现在显然你不需要"Toasts"但它会告诉你发生了什么.非常有趣的是当你从'Home/Main'活动中按BACK时,你显然会得到2个Toast,"你从你的'主页/主要'活动中回来了",而第二个Toast是"你在你的应用程序中切换的活动" ".我相信我知道为什么会这样,但事实并非如此,因为我称之为"player.stop();" 来自2个场景,这意味着我的应用程序不再被"使用".显然比"player.stop();"做更多的工作 如果你需要:)而且显而易见你不需要"你在你的应用程序中切换活动"的"其他",因为没有理由"停止/暂停"背景音乐,这是我需要的,但如果你新活动开始时需要做点什么,好吧,你去吧:)
希望这有助于任何想知道用户"离开/退出/完成"应用程序的人:)
感谢所有评论的帖子,并帮助每个人!好极了!
编辑-
这部分必须在每个活动的onPause:
Context context = getApplicationContext();
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
if (!taskInfo.isEmpty()) {
ComponentName topActivity = taskInfo.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
player.stop();
Toast.makeText(xYourClassNamex.this, "YOU LEFT YOUR APP", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您将知道用户是否从任何活动中删除了您的应用.这很好知道:)
| 归档时间: |
|
| 查看次数: |
45762 次 |
| 最近记录: |