这次做安卓端的app共遇到两个按键问题。
一、使用TabActivity的主页面需要监听返回事件,实现返回键与home键一样的效果。
1、首先先查出触发home键的效果需要调用的代码如下:
Intent intent=newIntent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//如果是服务里调用,必须加入new task标识
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
2、紧接着查找监听返回事件的方法,有如下两种:
@Override
public booleanonKeyDown(intkeyCode, KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
//这里写下监听到返回事件以后的操作
return false;
} else {
return super.onKeyDown(keyCode, event);
}
}
或者
@Override
public voidonBackPressed() {
//这里写下监听到返回事件以后的操作
super.onBackPressed();
}
然而实际运行测试的时候发现,这两个函数始终没有被调用,去搜了下才知道原来是TabActivity与常规的按键监听事件是有冲突,于是找到了新的替代方案,如下:
@Override
public booleandispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ //这里监听返回按钮点击事件
if(event.getAction() == KeyEvent.ACTION_DOWN&& event.getRepeatCount() ==0) {
//在这里调用返回键需要实现的功能(上面的判断使代码只执行一次)
}
return false;
} else {
return super.dispatchKeyEvent(event);
}
}
二、第二个问题是客户反馈第一次安装app时,home键无效?!
于是测试过联想,华为,魅族,三星,红米等品牌手机发现,除了红米手机,模拟器,其他品牌的手机都存在第一次安装app时,点击home键回到桌面再点击桌面icon时候,都会再次启动一个app,如果是从菜单再次点击进入,或者app完全退出后就不存在这样的问题。
尝试了网上各个版本的解决方案都无效,最终确定的一个解决方案和原因如下:
大致查到原因是,利用程序安装器打开程序来启动的Intent没有Category,而我们打开程序带了Category。所以可以通过判断有无Category来决定当前页面是否是启动页。把代码下面这段代码写入启动页的onCreate(Bundle savedInstanceState)方法,super.onCreate(savedInstanceState);的下一行:
if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) !=0){
finish();
return;
}
以上。