Android - 如何使用代码允许/启用应用程序的“悬浮通知”设置作为默认设置

12
我希望您能够使用Android代码启用悬浮通知。通常用户并不知道该设置,因此我需要将其作为默认设置启用。
图片中为应用程序的通知设置界面:App's Notification Setting

1
你有没有找到解决方案? - pravin
3个回答

15

恐怕是个坏消息。

你可能已经知道,这需要获取SYSTEM_ALERT_WINDOW权限。

自从安卓M版以来,Google已经开始限制这个权限以减少混乱。这个权限有点不寻常的地方在于,它需要用户进入实际的设置屏幕普通的Android M权限流程对此无效。引用API的话:

如果应用程序针对API级别23或更高版本,则应用程序用户必须通过权限管理屏幕显式授予此权限

您可以使用Settings类检查是否已经拥有该权限,当未拥有时,您需要通过意图解释并引导用户到相关的设置屏幕。

Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(i);

这只会影响运行23+的设备,因为旧设备应该会自动获取权限,但不要仅依赖于SDK_INT的检查,而是依赖canDrawOverlays,因为一些棉花糖版本之前存在异常情况


9
那么WhatsApp是如何做到的呢? - Keivan.k
4
我认为WhatsApp和Facebook因其通知而被谷歌列入白名单。 - Moustafa EL-Saghier

7

我也遇到了同样的问题,需要在设置中启用它,但在清单文件中添加权限后,它完美地工作了。

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />

测试过版本9。


非常感谢您,@amit。 - Debashis Nandy
2
添加这个可以启用悬浮通知吗?这对我不起作用 :( - Keivan.k
确实是这样。在构建通知时,请务必仔细检查您的重要性和振动设置。 - georkost

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接