有种方法可能会行,但有局限性,就是要以startService方式启动,并且不知道还会不会产生其它影响。说下原理,设置一个全局标志,在activity中获取到按键监听,设置不同标志,然后启动service。由于service已经启动了,所以只会调用onStartCommand方法,在其中判断全局标志执行相应操作
解决方案 »
- 求分析一小段代码 run()
- 关于Activity跳转finish的问题。
- 怎么解决如下错误,小弟在这里谢谢各位了
- 关于girdview中的一个项目中的控件问题
- 在线等,求教一个关于Animation 或者说是ViewFlipper的问题!
- 用一个变量来标示Dialog的最后点击了什么的功能,我现在用的是一个类变量,感觉不够科学,那Dialog有没有一个可以做标示的?比如View有个setTag 谢
- actionbar问题
- Android中导入Unity项目,界面点击事件失去焦点问题
- 离职了
- 4.2以上的版本 超时休眠应该如何修改时间?
- 大牛们,请问瘦脸、美白之类的照片美化功能是用什么库实现的?
- Android菜鸟问个问题
这样做肯定不行,因为我的应用就没有activity,全部都是后台service,所以对按键的检测只能从service上相办法。
你说的这种方法:如果activity被挂到了后台,同样按键还是没法检测到、
service去接受。如果你说的是系统级的按键监听,安卓由于权限设置,貌似很难做到。
而且即使是有activity,当程序被挂起放到后台之后还是无法接收按键了。。
你的意思是如果按键是系统级的,就可以被监听到么???还有啊,普通手机上的关机键是怎么做到的呢,他应该也是一个service啊,是怎么捕获到的呢???
你说的监听home键,可以在service中么????如何做到的,代码贴一下吧,应该是同样的道理。。
我觉得肯定还是有办法的,要不然关机键,音量键是如何实现的呢
二、app中对于HOME键广播事件的接收 首先,自定义一个BroadcastReceiver:[java] view plaincopy
class HomeKeyEventBroadCastReceiver extends BroadcastReceiver {
static final String SYSTEM_REASON = "reason";
static final String SYSTEM_HOME_KEY = "homekey";//home key
static final String SYSTEM_RECENT_APPS = "recentapps";//long home key
@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_REASON);
if (reason != null) {
if (reason.equals(SYSTEM_HOME_KEY)) {
// home key处理点
} else if (reason.equals(SYSTEM_RECENT_APPS)) {
// long home key处理点
}
}
}
}
}
其次,生成且注册之
[java] view plaincopy
receiver = new HomeKeyEventBroadCastReceiver();
registerReceiver(receiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
这样,我们就可以在app中进行HOME键的处理了!没有试过。估计是这个思路。
大哥啊,你的onkey事件还是只有在当前窗口获得焦点之后,才会检测到按键事件,,哎,,,
大哥啊,你的onkey事件还是只有在当前窗口获得焦点之后,才会检测到按键事件,,哎,,,
public class NotifyService extends Service implements OnKeyListener {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
}
这样得不?平时用的控件onkey什么的也是没有,感觉都是添加上去的。。上班没时间测试下代码,只能想想,楼主试试。。
大哥啊,你的onkey事件还是只有在当前窗口获得焦点之后,才会检测到按键事件,,哎,,,
public class NotifyService extends Service implements OnKeyListener {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
}
这样得不?平时用的控件onkey什么的也是没有,感觉都是添加上去的。。上班没时间测试下代码,只能想想,楼主试试。。如果按照这种方式写,此方法始终没有被调用。不知道是我写的不对的,还是这个函数的问题。。
而且就算是可以被执行,当此界面失去焦点之后,还是失效了,不会响应
所以这样还是不能达到预期效果,在service中获取按键edit2.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
return true;
}
});
http://blog.chinaunix.net/uid-26620446-id-3205382.html
这里有个链接,大概是讲home键发广播的实现原理,可以参照这个改。当然了,,我也不会哈
这个需求必须修改底层才可实现,我现在的做法是修改底层,在按键按下时发送广播,这样在service或者activity都可捕获到按键信息