如何在 Android 设备上禁用“空中命令”?
Posted
技术标签:
【中文标题】如何在 Android 设备上禁用“空中命令”?【英文标题】:How to disable "air command" on Android devices? 【发布时间】:2018-06-22 17:46:31 【问题描述】:您好,我使用触控笔(例如三星触控笔)开发了一个应用程序。 如您所知,当我们单击手写笔上的按钮时,会出现“Air command”(弹出窗口)。 我的目标是“在我的自定义函数中覆盖 air 命令”
首先,我从“*SpenHoverListener”(Samsung Spen SDK 5.0 支持)开始,重写 onHover 函数如下。
private SpenHoverListener mHoverListener = new SpenHoverListener()
@Override
public boolean onHover(View view, MotionEvent event)
Log.e("Test",""+event.getButtonState());
updateHoverUI(event.getRawX(), event.getRawY(), event.getPressure(), event.getAction(), "Hover");
return true;
;
我可以成功监听按钮点击事件(BUTTON_STYLUS_PRIMARY => 按钮被点击)。 但是,我无法禁用 air 命令。
有什么办法可以禁用air命令?
最好的问候。
【问题讨论】:
您是否尝试过覆盖 Spen 的 onHoverButtonDown 事件?从文档中看起来像这样的事件要覆盖以停止空中命令,因为空中命令仅在您悬停时按下按钮时才会触发。 @kshishoo 在以前的三星 SDK sdk2.3 中是可能的。 (但我不知道覆盖 onHoverButtonDown 是否会与空中命令功能重叠)。无论如何,遗憾的是,三星 SDK 5.0 删除了 onHoverButtonDown 接口。 (已弃用。) 所以唯一的其他解决方案(这将是非常复杂的)是您设置一个 Tasker 任务来感知按钮按下,查找空中命令活动,如果找到它则将其杀死然后执行你想在你的应用程序中做什么。 (如果您可以将函数编码为在不启动空中命令的长按按钮上触发,这将容易得多) @kshishoo 我认为监控空中命令是否出现并不是那么容易。为此,我们应该从活动堆栈中转储最近的活动(例如 => adb shell dumpsys activity recents),并解析转储的结果以定期检测 air 命令。此外,还会存在一些时间问题(当我们检查转储结果时)。 @kshishoo 顺便说一句,重点(长按按钮不会触发空中命令)真的很有帮助。谢谢:) 【参考方案1】:序言
在以前的笔记本型号和平板电脑中可以禁用Air command。 在 Marshmallow(第 6 版)上,没有这样的切换。 要关闭三星 Galaxy Note 4(发布时)的 Air 命令功能:
Go to Settings > Controls.
Tap on S Pen.
Tap on Air Command.
Disable Air Command.
Air 命令 (packagecom.samsung.android.service.aircommand
) 是通过 system service 实现的。
代码
名义上您无法以编程方式删除/禁用此 Air 服务(权限),并且作为 system service
它似乎拥有 首先考虑硬件事件(您稍后/也可以得到它们,如果 Air 处于活动状态,则为时已晚)。
话虽这么说Greenify 做到了,所以我寻找其他选择并找到Brevent。这是 GitHub (AS 3) 上的完全免费源代码,我现在正在玩它(注意它包含 C 代码,所以如果你想构建它,需要 NDK,或参见 ->)。 Brevent Play Store
空中命令在 Galaxy Note 5 中显示为灰色
对于here 用户来说,这个graying out 是一个问题,对你来说它可能是一个解决方案。
这里有一些选择的 cmets:
一些车主报告说 Galaxy Note 5 中的空中命令显示为灰色。 Galaxy Note 5空中指令灰显的原因通常是由于 一些辅助功能设置(转到辅助功能并打开语音助手?)。实际上,当您启用此类可访问性设置时,空中命令会出现警告消息。但大多数时候,没有人阅读它。
我有一个 Galaxy Note 5,在设备之前一切都很好 建议我将其 android 软件从 5.1.1 更新到 6.0.1
我有 Note 5,安装后 Air 命令停止工作 诺顿杀毒软件。
绿化
供您个人使用您可以使用“免费”应用:
(Android 版本 6+,即使没有 root!)Greenify 禁用 Air Command Service
(要禁用系统应用程序/服务,您需要做一个小的“捐赠”,功能描述为“ 实验性”)。
【讨论】:
遗憾的是,三星 Galaxy Note 5 (Android 7.0) 不支持禁用空中命令的功能。 // 顺便说一句,您提到:“Greenify”(看起来像一个使电池续航时间更长的应用程序)可以禁用空中命令。在这里,他们如何(Greenify)对功能进行编程(禁用空中命令)?你说没有办法以编程方式删除空中指挥服务。 R.E. “Greenify”:(试试看它是否有效!那么您至少会知道问题的范围)它应该NOT可以从无根的android应用程序中删除系统服务(您需要内核系统调用),我认为 Google 不打算让您这样做,但 Greenify 的“Oasis Feng”可能找到了某种他一直保密的方法。这可能是他正在利用的一个漏洞。他使用的其中一件事是“启用设备管理员”(DevicePolicyManager)。见this Greenify 显然使用 android 命令“am”来停止应用程序。它将不再在手机启动期间启动、响应注册的意图或被系统警报触发。代码:#am force-stop com.samsung.android.service.aircommand #am start com.samsung.android.service.aircommand 见here【参考方案2】:只需将返回类型更改为 false。这将启动您的方法,并将与悬停失败的系统进行通信;因此不会触发 Air View。
private SpenHoverListener mHoverListener = new SpenHoverListener()
@Override
public boolean onHover(View view, MotionEvent event)
Log.e("Test",""+event.getButtonState());
updateHoverUI(event.getRawX(), event.getRawY(), event.getPressure(), event.getAction(), "Hover");
return false;
;
【讨论】:
感谢您的评论。但它不起作用。 “return false”表示“我不会将事件转移到子视图”。由于空中命令已经在上层处理过,所以不影响任何东西。 您好,请问您找到解决方案了吗?我正在开发冒险游戏,我喜欢使用 spen 按钮来做其他事情。【参考方案3】:使用 ADB 或超级用户 shell,您还可以执行以下操作:
pm disable com.samsung.android.service.aircommand
要重新启用它,请执行相同操作,但 →disable
enable
。
【讨论】:
【参考方案4】:以上提到的解决方案都不适合我(Galaxy Tab S3 上的 Android 9)。 特别是,我没有像热键建议的那样成功地使用 ADB 禁用 Air Command。 然而,这导致我在 ADB shell 中执行下一个命令:
pm uninstall -k --user 0 com.samsung.android.service.aircommand
删除(不生根)比禁用更激进。然而,当我被驱动到当前页面时,这就是我真正想要的,我在其他任何地方都没有找到它。所以我想分享它可能会有用......
【讨论】:
【参考方案5】:如何在 Android 设备上禁用“空中命令”?
据我所知,您无法在无根设备上以编程方式禁用它;我尝试了其他方法,甚至使用了 Greenify(显然是支付了 Greenify 的捐赠包),但并没有解决问题,对我有用的方法(三星 Galaxy Tab A SM-P580 WIFI)是实际卸载应用程序。备份了应用adb pull /system/priv-app/AirCommand/AirCommand.apk %USERPROFILE%\Desktop\aircommand.apk
已卸载应用adb shell pm uninstall -k --user current com.samsung.android.service.aircommand
(可选)如果您想找回它,可以使用 adb 再次安装它adb install %USERPROFILE%\Desktop\aircommand.apk
这就是我在 Android 设备上禁用 Air Command 的方法,希望这对调查此问题的人有所帮助。
祝你有美好的一天!
【讨论】:
以上是关于如何在 Android 设备上禁用“空中命令”?的主要内容,如果未能解决你的问题,请参考以下文章
如何禁用 Android 上的设备后退按钮(react-native)?
当按钮被禁用时,如何在 Apple Developer 网站上添加新设备以进行配置?