Android 收听主页按钮的按下
是否有办法监听用户按下Home(主页)按钮 我想覆盖Home按钮功能,但我在许多地方读到“出于安全原因,我们无法覆盖Home按钮”。我们是否可以覆盖“主页”按钮 我尝试过各种代码片段。我从以下站点获取了一个样本:Android 收听主页按钮的按下,android,android-homebutton,Android,Android Homebutton,是否有办法监听用户按下Home(主页)按钮 我想覆盖Home按钮功能,但我在许多地方读到“出于安全原因,我们无法覆盖Home按钮”。我们是否可以覆盖“主页”按钮 我尝试过各种代码片段。我从以下站点获取了一个样本: 我在最新的三星J8手机上测试了它,但它不起作用 我的问题是我们能覆盖主按钮还是不能 答:由于android 4.0,您不能将home按钮作为非系统应用覆盖 但是,有一些方法可以听用户是否按下了home按钮。如果您对此感兴趣,我将为您提供一些解决方案 编辑:添加一些解决方案,以收
编辑:添加一些解决方案,以收听主页按钮按下 我提供给你们两种方法来收听主页按钮按下事件。 首先,重新启动广播接收器
class HomeKeyBroadCastReceiver extends BroadcastReceiver {
final String SYSTEM_DIALOG_REASON_KEY = "reason";
//press Home button
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
//press recent app button
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
// long press home button
final String SYSTEM_DIALOGS_REASON_LONG_PRESS_HOME_KEY = "globalactions";
@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) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
// press home , do something
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
// press recent app , do something
} else if (reason.equals(SYSTEM_DIALOGS_REASON_LONG_PRESS_HOME_KEY)) {
// long press home button , do something
}
}
}
}
}
// register Receiver
AppUtils.context.registerReceiver(homeKeyBroadCastReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
另一种方法是,您可以在应用程序中注册生命周期回调
application.registerActivityLifecycleCallbacks(new HomeButtonListerLifecycleCallbacks());
public class HomeButtonListerLifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
// check threshold
private final int CHECK_DELAY = 200;
private Handler handler;
private Runnable checkRunnable;
public HomeButtonListerLifecycleCallbacks() {
this.handler = new Handler(Looper.getMainLooper());
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
ZZLocalPushInfoManager.getInstance().onCreateActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
if (handler != null && checkRunnable != null) {
handler.removeCallbacks(checkRunnable);
}
}
@Override
public void onActivityPaused(final Activity activity) {
if (handler != null) {
if (checkRunnable != null) {
handler.removeCallbacks(checkRunnable);
}
handler.postDelayed(checkRunnable = new Runnable() {
@Override
public void run() {
// Here user has left your app. mostly they pressed home button,
// but they also can go to other app by notification,etc.
}
}, CHECK_DELAY);
}
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
选中此项:@Siva您不能简单地覆盖主页按钮。方法是创建一个“Launcher应用程序”,它相对复杂,需要用户采取特殊步骤才能正确安装。而且链接的代码永远不会起作用-我想它可能在2012年编写时就起作用了,但功能早就被删除了。是的,请建议第一块代码是您刚刚教给我的一个很棒的技巧-谢谢!它不会覆盖,但至少会侦听。第二块并没有说明用户如何离开应用程序(即HOME vs BACK)——它只是说用户“确实离开了”应用程序。