我真的很讨厌Wear OS不需要/不需要的东西(例如Google Fit和Google Now)的左右触摸手势,所以我最终制作了一个自定义表盘(基于CanvasWatchFaceService Engine)并添加了覆盖活动中的GestureListener来拦截事件。这一切都成功完成了,但是意外的副作用是它不仅消耗了左右手势,而且还消耗了上下手势。通常这不是问题,但我无法向上滑动以在SmartWatch上接收传入的通知。
在将Motionevent从Activity传递到系统的各种(失败的)尝试之后,我认为最简单的解决方案是找到一种以编程方式拉起通知栏的方法。也许View可能是一种更优雅的处理方式,但是我可以按照自己希望的方式在自定义表盘上进行所有操作,但无法拉出通知栏。
那么有人知道以编程方式拉起通知栏的方法吗?我希望会有一个目标可以启动,但是到目前为止,我对此的所有研究都显示了如何在普通的Android设备上执行此操作,但不适用于Wear OS。关于如何关闭状态/通知栏的信息也很多,但对我的情况没有帮助。
我最近的尝试是从here的SOF中获取以下内容:
Object sbservice = getSystemService( "statusbar" );
Class<?> statusbarManager = Class.forName( "android.app.StatusBarManager" );
Method showsb;
if (Build.VERSION.SDK_INT >= 17) {
showsb = statusbarManager.getMethod("expandNotificationsPanel");
}
else {
showsb = statusbarManager.getMethod("expand");
}
showsb.invoke( sbservice );
只是为了好玩,我在Android手机上尝试了一下,但成功了,但是在Wear OS设备上尝试时,它什么也没做(logcat中没有错误)。我很确定Wear OS处理状态栏的方式有所不同(至少可能是不同的程序包名称)。