一般AP中的back键是怎么被监听到的?

纠结的木棉花 2011-04-15 01:45:44
如题?程序片段是怎样の?
...全文
275 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mourinho 2011-04-26
  • 打赏
  • 举报
回复
void onBackPressed() //Called when the activity has detected the user's press of the back key.
在Activity里重写此方法即可
yxmsw2007 2011-04-16
  • 打赏
  • 举报
回复
activity中onKeyDown源码是这样写的
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getApplicationInfo().targetSdkVersion
>= Build.VERSION_CODES.ECLAIR) {
event.startTracking();
} else {
onBackPressed();
}
return true;
}

if (mDefaultKeyMode == DEFAULT_KEYS_DISABLE) {
return false;
} else if (mDefaultKeyMode == DEFAULT_KEYS_SHORTCUT) {
if (getWindow().performPanelShortcut(Window.FEATURE_OPTIONS_PANEL,
keyCode, event, Menu.FLAG_ALWAYS_PERFORM_CLOSE)) {
return true;
}
return false;
} else {
// Common code for DEFAULT_KEYS_DIALER & DEFAULT_KEYS_SEARCH_*
boolean clearSpannable = false;
boolean handled;
if ((event.getRepeatCount() != 0) || event.isSystem()) {
clearSpannable = true;
handled = false;
} else {
handled = TextKeyListener.getInstance().onKeyDown(
null, mDefaultKeySsb, keyCode, event);
if (handled && mDefaultKeySsb.length() > 0) {
// something useable has been typed - dispatch it now.

final String str = mDefaultKeySsb.toString();
clearSpannable = true;

switch (mDefaultKeyMode) {
case DEFAULT_KEYS_DIALER:
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + str));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
break;
case DEFAULT_KEYS_SEARCH_LOCAL:
startSearch(str, false, null, false);
break;
case DEFAULT_KEYS_SEARCH_GLOBAL:
startSearch(str, false, null, true);
break;
}
}
}
if (clearSpannable) {
mDefaultKeySsb.clear();
mDefaultKeySsb.clearSpans();
Selection.setSelection(mDefaultKeySsb,0);
}
return handled;
}
}
CyberLogix 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 javasoldiers 的回复:]

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//监听到back键了,做你想要的处理就可以了,呵呵
} ……
[/Quote]

楼上正解,帮顶
javasoldiers 2011-04-15
  • 打赏
  • 举报
回复
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//监听到back键了,做你想要的处理就可以了,呵呵
}
return super.onKeyDown(keyCode, event);
}
dinjay 2011-04-15
  • 打赏
  • 举报
回复
一般的都会在down里拦截,但是不排除一些在上层屏蔽的设备,那就需要在dispatch里处理了。
XiangZhiLiu 2011-04-15
  • 打赏
  • 举报
回复

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
//按下的如果是BACK,同时没有重复
//DO SOMETHING
}

return super.onKeyDown(keyCode, event);
}

希望对lz有用
另外打个广告哈、、并非恶意的、、嘻嘻
148784731 android高级技术群

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧