我想使用Android代码启用浮动通知。通常用户不知道有关设置。所以我需要启用这作为默认。
bvuwiixz1#
您可能已经知道,这需要权限SYSTEM_ALERT_WINDOW。由于Android M google有begun locking down这个权限来减少混乱。这个权限有点不寻常的是它要求用户进入一个实际的设置屏幕普通的Android M权限流不适用于这个。引用API:如果应用面向API级别23或更高级别,则应用用户必须通过权限管理屏幕向应用明确授予此权限您可以使用Settings类来检查您是否已经拥有该权限,如果没有,则需要解释并通过intent将用户引导至相关设置屏幕:
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,因为一些pre-marshmallow设备有exceptions
yvt65v4c2#
我也面临着同样的问题,需要从设置中启用它,但在清单文件中添加权限后,它工作得很完美。
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
在版本9上测试。
velaa5lx3#
我与之斗争并找到了一种方法(在我的例子中,我使用OneSignal React-Native SDK)解决方案是创建一个“类别”(在OneSignal控制台上),具有“紧急”的重要性:)之后发送推送的时候,就得参照这个类别的channel_id了,Doc:https://documentation.onesignal.com/docs/android-notification-categories
3条答案
按热度按时间bvuwiixz1#
您可能已经知道,这需要权限SYSTEM_ALERT_WINDOW。
由于Android M google有begun locking down这个权限来减少混乱。这个权限有点不寻常的是它要求用户进入一个实际的设置屏幕普通的Android M权限流不适用于这个。引用API:
如果应用面向API级别23或更高级别,则应用用户必须通过权限管理屏幕向应用明确授予此权限
您可以使用Settings类来检查您是否已经拥有该权限,如果没有,则需要解释并通过intent将用户引导至相关设置屏幕:
这 * 应该 * 只会影响运行23+的设备,因为较旧的设备应该自动获得权限,但不要依赖检查SDK_INT,而是依赖canDrawOverlays,因为一些pre-marshmallow设备有exceptions
yvt65v4c2#
我也面临着同样的问题,需要从设置中启用它,但在清单文件中添加权限后,它工作得很完美。
在版本9上测试。
velaa5lx3#
我与之斗争并找到了一种方法(在我的例子中,我使用OneSignal React-Native SDK)
解决方案是创建一个“类别”(在OneSignal控制台上),具有“紧急”的重要性:)
之后发送推送的时候,就得参照这个类别的channel_id了,Doc:https://documentation.onesignal.com/docs/android-notification-categories