自从Nexus 5上的Android 6.0更新以来,每次我收到“登录WiFi网络”通知时,手机都会振动。有什么想法可以在保持通话,短信,WhatsApp消息等振动的同时关闭该功能吗?
自从Nexus 5上的Android 6.0更新以来,每次我收到“登录WiFi网络”通知时,手机都会振动。有什么想法可以在保持通话,短信,WhatsApp消息等振动的同时关闭该功能吗?
Answers:
有一种解决方法涉及“ 请勿打扰”的“仅优先级”模式。
简而言之,您必须仅使用“ 优先级”(来自“ 快速设置 -请勿打扰”),因为它具有按应用设置的通知警报,可以覆盖系统的默认设置。仅优先级模式仍将显示所有通知。但是,只会发出优先通知(声音,振动和LED灯)。
这个想法是将所有通知作为优先级处理(从“设置”-“声音和通知”-“应用程序通知”-“ [应用名称]-作为优先处理”),但强制门户通知除外,该通知位于Android System应用程序下(默认情况下,系统应用程序未列出)您需要在溢出菜单中勾选显示系统。将此应用设置为非优先级,但不要忘记其余的系统应用。
但是,在使用此替代方法之前,您可能首先要考虑一些缺点:
TL; DR
如果您仍然希望除强制门户网站(此特定问题)之外的所有通知上都有些动摇,恐怕您不能这样做。
就像评论中提到的dbasch一样,棉花糖中添加了振动(实际上是通知警报本身)。
如您已经注意到的那样,当Android检测到WiFi需要登录到强制门户时,它将创建一条通知。它由中的setProvNotificationVisibleIntent()
功能完成ConnectivityService
。
显示或隐藏网络配置通知。
我们使用通知有两个目的:通知网络需要登录(
NotificationType.SIGN_IN
),或通知网络无法访问Internet(NotificationType.NO_INTERNET
)。我们每个ID最多显示一个通知,因此在特定网络上,我们可以显示最近请求的通知类型。因此,例如,如果强制门户在连接后几秒钟内未能回复,我们可能会先显示NO_INTERNET
,然后在强制门户检查完成后显示SIGN_IN
。
Android 6.0棉花糖中使用的通知警报的相关代码:
Notification notification = new Notification.Builder(mContext)
...
.setDefaults(Notification.DEFAULT_ALL)
...
请注意,这Notification.DEFAULT_ALL
将“ 使用所有默认值(如果适用) ”,这意味着它取决于系统的通知设置(声音,振动和LED指示灯)。
与Android 5.x Lollipop中的代码相比,代码为:
Notification notification = new Notification();
...
不多不少。那是相关的代码。new Notification()
将“ 使用默认值构造一个Notification
对象 ”。尽管含义似乎没有变化,但是请注意,defaults
它没有设置/初始化为 Notification.DEFAULT_ALL
(值:-1)。相反,由于没有初始化,因此它将默认设置为0,这不是alert。
我不知道这是否是被棉花糖修复的Google忽略的错误。同样,这就是为什么Android Lollipop中没有警报,而现在Android Marshmallow中没有警报的原因。
该通知由Android系统(android
)启动。您可以使用appops拒绝Android系统在任何情况下振动设备的权限。前提是您已经在PC中设置了adb,请执行以下操作:
adb shell appops set android VIBRATE deny
尝试连接到没有互联网的Wi-Fi。您仍然会收到该通知,但不会产生任何振动。如果您还打算隐藏该通知,则可以按照此处或在此网站上发布的其余答案进行操作。
要还原更改,请执行以下操作:
adb shell appops set android VIBRATE allow
拨号振动由Dialer应用程序启动,对于SMS,它将是您的默认SMS应用程序,对于WhatsApp消息,它将是同一应用程序,因此不会受到影响。我可能不知道该命令可能会产生无法预料的后果,因此请通过注释让我知道它们。
注意: 此解决方案已在非官方的CM13版本上进行了测试。