当按下主页按钮时调用方法

52
我在我的Android Activity中有这个方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if(keyCode == KeyEvent.KEYCODE_BACK)
    {
        Log.d("Test", "Back button pressed!");
    }
    else if(keyCode == KeyEvent.KEYCODE_HOME)
    {
        Log.d("Test", "Home button pressed!");
    }
    return super.onKeyDown(keyCode, event);
}

但是,即使KEYCODE_HOME有效,log方法也从未触发。对于返回按钮可以正常工作。有人知道为什么会这样,以及如何让它工作吗?


1
http://stackoverflow.com/a/8883447/439171 - Italo Borssatto
@Yvette 我同意。然而只是出于一个原因。它可能应该被关闭,因为反思后,这不是一个很好的尝试去检测 - 因此对于未来的 SO 访问者来说也不是很好。有更好的方法来停止服务(这才是我真正的问题所在),并且你不能像一些答案下面所讨论的那样覆盖主页按钮。 - ingh.am
请按照此处建议使用**onTrimMemory()**函数。链接 - scr
11个回答

0

在您的activity中定义变量,如下所示:

const val SYSTEM_DIALOG_REASON_KEY = "reason"
const val SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps"
const val SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"

像这样定义你的广播接收器类:

class ServiceActionsReceiver: BroadcastReceiver(){
        override fun onReceive(context: Context?, intent: Intent?) {
            
            val action = intent!!.action
            if (action == Intent.ACTION_CLOSE_SYSTEM_DIALOGS) {
                val reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY)
                if (reason != null) {
                    if (reason == SYSTEM_DIALOG_REASON_HOME_KEY) {
                        //do what you want to do when home pressed
                    } else if (reason == SYSTEM_DIALOG_REASON_RECENT_APPS) {
                        //do what you want to do when recent apps pressed
                    }
                }
            }
        }
    }

在编程中,可以像这样在onCreate方法或onResume方法中注册接收器:

val filter = IntentFilter()
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)
registerReceiver(receiver, filter)

在你的清单文件中添加接收器,像这样:
<receiver android:name=".ServiceActionsReceiver">
            <intent-filter >
                <actionandroid:name="android.intent.action.CLOSE_SYSTEM_DIALOGS"/>
            </intent-filter>
</receiver>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接