gpt4 book ai didi

android - 在android中检测主页按钮按下

转载 作者:IT老高 更新时间:2023-10-28 13:09:06 30 4
gpt4 key购买 nike

这已经让我发疯了一段时间了。

有没有什么方法可以可靠地检测到在 Android 应用程序中是否按下了主页按钮?

如果做不到这一点,是否有一种可靠的方法来判断导致 Activity 进入 onPause 的原因?即我们是否可以检测它是由新 Activity 启动还是按返回/主页引起的。

我看到的一个建议是覆盖 onPause() 并调用 isFinishing() 但这会在按下主页按钮时返回 false,就像新 Activity 开始时一样,因此无法区分两者。

非常感谢任何帮助。

** 更新**:感谢@android-hungry 提供此链接:https://nishandroid.blogspot.com/

重写以下方法:

@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}

然后按下主页按钮会触发以下事件:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});

我不确定这条线是否有任何副作用:

this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);   

因此,与流行的看法相反,您实际上可以听出 home 键。令人担忧的是,您可以返回 false 并且让 home 键什么都不做。

更新:正如预期的那样,这有一些副作用 - 启用此模式后,嵌入的视频和谷歌地图似乎不可见。

更新:据说这个 hack 从 Android 4.0 起不再有效

最佳答案

以下代码对我有用 :)

HomeWatcher mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
@Override
public void onHomePressed() {
// do something here...
}
@Override
public void onHomeLongPressed() {
}
});
mHomeWatcher.startWatch();
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;

public class HomeWatcher {

static final String TAG = "hg";
private Context mContext;
private IntentFilter mFilter;
private OnHomePressedListener mListener;
private InnerReceiver mReceiver;

public HomeWatcher(Context context) {
mContext = context;
mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}

public void setOnHomePressedListener(OnHomePressedListener listener) {
mListener = listener;
mReceiver = new InnerReceiver();
}

public void startWatch() {
if (mReceiver != null) {
mContext.registerReceiver(mReceiver, mFilter);
}
}

public void stopWatch() {
if (mReceiver != null) {
mContext.unregisterReceiver(mReceiver);
}
}

class InnerReceiver 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.e(TAG, "action:" + action + ",reason:" + reason);
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
mListener.onHomePressed();
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
mListener.onHomeLongPressed();
}
}
}
}
}
}
}
public interface OnHomePressedListener {
void onHomePressed();
void onHomeLongPressed();
}

关于android - 在android中检测主页按钮按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8881951/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com