android 模拟HOME广播,Android监听Home键的完美解决方案

相信有不少朋友在开发过程中需要监听HOME键的需求,现本人将代码奉上,希望对大家有所帮助!

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

public class HomeWatcher

{

private static final String TAG = "HomeWatcher";

private Context mContext;

private IntentFilter mFilter;

private OnHomePressedListener mListener;

private InnerRecevier mRecevier;

// 回调接口

public interface OnHomePressedListener

{

public void onHomePressed();

public void onHomeLongPressed();

}

public HomeWatcher(Context context)

{

mContext = context;

mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

}

/**

* 设置监听

*

* @param listener

*/

public void setOnHomePressedListener(OnHomePressedListener listener)

{

mListener = listener;

mRecevier = new InnerRecevier();

}

/**

* 开始监听,注册广播

*/

public void startWatch()

{

if (mRecevier != null)

{

mContext.registerReceiver(mRecevier, mFilter);

}

}

/**

* 停止监听,注销广播

*/

public void stopWatch()

{

if (mRecevier != null)

{

mContext.unregisterReceiver(mRecevier);

}

}

/**

* 广播接收者

*/

class InnerRecevier extends BroadcastReceiver

{

final String SYSTEM_DIALOG_REASON_KEY = "reason";

final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";

final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";

final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";

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

if (reason != null)

{

Log.i(TAG, "action:" + action + ",reason:" + reason);

if (mListener != null)

{

if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY))

{

// 短按home键

mListener.onHomePressed();

}

else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS))

{

// 长按home键

mListener.onHomeLongPressed();

}

}

}

}

}

}

}

调用时注意:

在初始化调用(如onCreate)时添加如下代码:

HomeWatcher mHomeWatcher = new HomeWatcher(this);

mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener()

{

@Override

public void onHomePressed()

{

//按了HOME键

}

@Override

public void onHomeLongPressed()

{

//长按HOME键

}

});

mHomeWatcher.startWatch();

在程序销毁时(如:onDestroy)时添加如下代码:

if(mHomeWatcher != null)

mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值