判断应用是否有通知权限,如果没有通知权限,跳转到权限设置页面
1.判断是否有通知权限
areNotificationsEnabled方法的有效性官方只最低支持到API 19(4.4),低于19的仍可调用此方法不过只会返回true,即默认为用户已经开启了通知,目前暂时没有办法获取19以下的系统是否开启了某个App的通知显示权限。
/**
* 获取通知权限
*
* @param context
*/
public static boolean checkNotifySetting(Context context) {
NotificationManagerCompat manager = NotificationManagerCompat.from(context);
// areNotificationsEnabled方法的有效性官方只最低支持到API 19(4.4),低于19的仍可调用此方法不过只会返回true,即默认为用户已经开启了通知,目前暂时没有办法获取19以下的系统是否开启了某个App的通知显示权限。
return manager.areNotificationsEnabled();
}
2.跳转权限设置
如果没有权限跳转到权限设置页面,如果没有权限设置页面跳转到应用设置页面
/**
* 打开设置通知权限页面
*
* @param context
*/
public static void startNotificationSetting(Context context) {
try {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
//这种方案适用于 API 26, 即8.0(含8.0)以上可以用
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
intent.putExtra(Notification.EXTRA_CHANNEL_ID, context.getApplicationInfo().uid);
//这种方案适用于 API21——25,即 5.0——7.1 之间的版本可以使用
intent.putExtra("app_package", context.getPackageName());
intent.putExtra("app_uid", context.getApplicationInfo().uid);
context.startActivity(intent);
} catch (Exception e) {
ExceptionUtil.printStackTrace(e);
try {
// 出现异常则跳转到应用设置界面:锤子坚果3——OC105 API25
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
} catch (Exception ex) {
ExceptionUtil.printStackTrace(e);
}
}
}