android系统中通知栏的碎片化严重,各个厂商和版本的适配太繁琐。
这里参考微信创建好应用的通知渠道,直接跳转系统通知设置页面,用户自己设置
ps:厂商不同可能跳转的intentAction会有差异,这里只测试了华为和小米的
/**
* 跳转到通知管理
*
* @param channelId 通知渠道ID
*/
public static void enterNotificationSetting(Context context, String channelId) {
String packageName = context.getPackageName();
try {
// 根据通知栏开启权限判断结果,判断是否需要提醒用户跳转系统通知管理页面
Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String intentAction = QMUIDeviceHelper.isMIUI() ? Settings.ACTION_APP_NOTIFICATION_SETTINGS : Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS;
intent.setAction(intentAction);
//这种方案适用于 API 26, 即8.0(含8.0)以上可以用
intent.putExtra(Settings.EXTRA_APP_PACKAGE, packageName);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, channelId);
}
//这种方案适用于 API21——25,即 5.0——7.1 之间的版本可以使用
intent.putExtra("app_package", packageName);
intent.putExtra("app_uid", channelId);
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
// 出现异常则跳转到应用设置界面
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", packageName, null);
intent.setData(uri);
context.startActivity(intent);
}
}
网友评论