App 集成友盟 oppo和vivo会有推送的情况(oppo和vivo通知栏权限默认是关闭)。
MainActivity
if(!NotificationsUtils.isNotificationEnabled(this)) {
NotificationsUtils.openPush(this);
}
NotificationsUtils
public class NotificationsUtils {
public static boolean isNotificationEnabled(Context context) {
return NotificationManagerCompat.from(context.getApplicationContext()).areNotificationsEnabled();
}
public static void openPush(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//这种方案适用于 API 26, 即8.0(含8.0)以上可以用
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, activity.getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, activity.getApplicationInfo().uid);
activity.startActivity(intent);
} else {
PermissionUtil.toPermissionSetting(activity);
}
}
}
PermissionUtil
public class PermissionUtil {
/**
* 跳转到权限设置
*
* @param activity
*/
public static void toPermissionSetting(Activity activity) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
toSystemConfig(activity);
} else {
try {
toApplicationInfo(activity);
} catch (Exception e) {
e.printStackTrace();
toSystemConfig(activity);
}
}
}
/**
* 应用信息界面
*
* @param activity
*/
public static void toApplicationInfo(Activity activity) {
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
localIntent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
localIntent.setData(Uri.fromParts("package", activity.getPackageName(), null));
activity.startActivity(localIntent);
}
/**
* 系统设置界面
*
* @param activity
*/
public static void toSystemConfig(Activity activity) {
try {
Intent intent = new Intent(Settings.ACTION_SETTINGS);
activity.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上是基本代码逻辑,其实这样还是有点问题的,现在是打开app如果没有通知栏权限就跳去设置页,最好给用户一个弹窗先提醒一下会比较好。不过有了上面核心代码想自定义也不会很难。