- 关于home键的监听,下面的方法是不管用的, 当然正常的BACK还是可以用的
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME){
L.e("按home键,这里是走不到的!");
}
}
- 解决办法就是按home键,系统会发送一个广播
- public static final String ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS";所以就需要在广播中捕捉这个action来做处理了。
- 下面的代码
public class HomeReceiverUtil {
static final String SYSTEM_DIALOG_REASON_KEY = "reason";
static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
private static BroadcastReceiver mHomeReceiver = null;
/**
* 添加home的广播
* @param context
*/
public static void registerHomeKeyReceiver(Context context , final HomeKeyListener listener) {
L.d("注册home的广播");
mHomeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
homeFinish(intent , context , listener);
}
};
final IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.registerReceiver(mHomeReceiver, homeFilter);
}
/**
* 注销home的广播
* @param context
*/
public static void unregisterHomeKeyReceiver(Context context) {
L.d( "销毁home的广播");
if (null != mHomeReceiver) {
context.unregisterReceiver(mHomeReceiver);
mHomeReceiver = null ;
L.d("已经注销了,不能再注销了");
}
}
private static void homeFinish(Intent intent, Context context, HomeKeyListener listener) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null && reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
if (listener != null){
listener.homeKey();
}
}
}
}
//回调接口, 当然可以自己自行处理
public interface HomeKeyListener{
void homeKey();
}
}
- 下面就是在activity中的使用
这里的this要格外注意一下!这里的this要格外注意一下!这里的this要格外注意一下!
使用this了 必须在onPause中解绑,因为生命周期是先走onPause 在onCreate..的
当然吧this替换成getApplicationContext() 了 OnPause, onStop , onDestroy都可以解绑,
把下面的写到BaseActivity中就可以了
//监听home按键
//onCreate,onResume注册都行
HomeReceiverUtil.registerHomeKeyReceiver(this, new HomeReceiverUtil.HomeKeyListener() {
@Override
public void homeKey() {
Toast.makeText(HomeActivity.this, "这里做些处理", Toast.LENGTH_SHORT).show();
}
});
//记住,使用this了 必须在onPause中解绑,生命周期的原因!
HomeReceiverUtil.unregisterHomeKeyReceiver(this);