扫码关注官方订阅号
RT ,我就是想在service 里面 调用一下返回键。 现在网上大多数都是 在 Activity里面调用的返回键。 请问在service里面可以实现吗。
认证高级PHP讲师
Activity可以响应KeyEvent,所以你调用dispatchKeyEvent的时候,是Activity或者DecorView进行响应你的KeyEvent,但是Service并没有Window和它进行绑定,所以你不能在当前上下文中调用返回键。
Activity
KeyEvent
dispatchKeyEvent
DecorView
Service
Window
如果你想在系统级别调用返回键,是需要系统级的签名的(也就是改Android OS的源码,重新编译)
借助 AccessibilityService 辅助服务的AccessibilityEvent.getSource().performAction(AccessibilityService.GLOBAL_ACTION_BACK); 可以实现,不过还需要用户去开启服务,可行性不高, 或者你试试异步发送 new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);不知道这个在services里面有没有效果。
请问楼主解决了吗?我也遇到了这样的问题。是怎么结局的可以分享一下吗?我的邮箱QQ277543034@qq.com
Runtime runtime = Runtime.getRuntime(); runtime.exec("input keyevent " + KeyEvent.KEYCODE_BACK);
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
Activity可以响应KeyEvent,所以你调用dispatchKeyEvent的时候,是Activity或者DecorView进行响应你的KeyEvent,但是Service并没有Window和它进行绑定,所以你不能在当前上下文中调用返回键。如果你想在系统级别调用返回键,是需要系统级的签名的(也就是改Android OS的源码,重新编译)
借助 AccessibilityService 辅助服务的AccessibilityEvent.getSource().performAction(AccessibilityService.GLOBAL_ACTION_BACK);
可以实现,不过还需要用户去开启服务,可行性不高,
或者你试试异步发送 new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);不知道这个在services里面有没有效果。
请问楼主解决了吗?我也遇到了这样的问题。是怎么结局的可以分享一下吗?我的邮箱QQ277543034@qq.com