当前位置: 代码迷 >> Android >> android4.0按HOME之后如何样关闭service
  详细解决方案

android4.0按HOME之后如何样关闭service

热度:98   发布时间:2016-05-01 12:20:14.0
android4.0按HOME之后怎么样关闭service?
我的应用有背景音乐,音乐放在service里面,我想让应用开着的时候播放音乐,按HOME按钮或者退出之后音乐就停止,但是现在按HOME键之后音乐还在继续播放,没办法停止,我尝试在activity的onstop方法里面停止音乐,但是在应用里跳转到别的activity会调用onstop方法,那么音乐在打开状态下突然就停止了,4.0之后HOME按钮也事件也不好获取,这个问题怎么解决呢?
------解决方案--------------------
你可以设置个全局变量 
static boolean isBehind = false;
然后在onResume方法中
将这个变量设置成false;
在onPause方法中
将这个变量设置成true;
在onStop方法中进行判断,
if(isBehind = false)
    stopService;
当你跳转到另一个activity的时候,
具体的activity生命周期如图

先执行第一个activity的onPause
此时isBehind = true;
然后执行第二个activity的onResume
此时此时isBehind = false;
当第二个activity is running的时候
第一个activity才会onStop
此时不会停止服务
当按home键的时候,就是直接onPause onStop,然后停止服务。

这种方法很笨,看看别的大神的简单方法。。
------解决方案--------------------
提供两个思路:
一:直接在service中控制音乐的开与关,设置一个标志位flag,当flag=true时停止音乐,反之则不做处理。同时,在你所有的activity的onStart()、onPause()(不能在onStop()中,因为onStop()的执行在新的activity执行onStart()之后)方法中为service提供状态flag,当onPause()设定为true,onStart()设定为flase,然后,再在onStop()中进行停止音乐的操作,因为onStop()执行在onStart()之后,所以只要程序有act在前台,能保证始终有音乐播放
二、按home键、返回键的时候给出提示框,用户选择确定之后停止音乐,另外,监听home是不能在onKeyDown(int keycode, KeyEvent event)中监听的,在这个方法中监听,不光是4.0,2.x中也监听不到,要监听home,必须有特殊处理以及相应的权限,这个具体咋处理我一时想不起来,lz自己去查查吧
------解决方案--------------------
app中对于HOME键广播事件的接收:
首先,自定义一个BroadcastReceiver:

class HomeKeyEventBroadCastReceiver extends BroadcastReceiver {  
  
    static final String SYSTEM_REASON = "reason";  
    static final String SYSTEM_HOME_KEY = "homekey";//home key  
    static final String SYSTEM_RECENT_APPS = "recentapps";//long home key  
      
    @Override  
    public void onReceive(Context context, Intent intent) {  
        String action = intent.getAction();  
        if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {  
            String reason = intent.getStringExtra(SYSTEM_REASON);  
            if (reason != null) {  
                if (reason.equals(SYSTEM_HOME_KEY)) {  
                    // home key处理点  
                      
                } else if (reason.equals(SYSTEM_RECENT_APPS)) {  
                    // long home key处理点  
                }  
            }  
        }  
  相关解决方案