前文:相信很多开发者在项目中都使用到了极光推送,极光推送也是一个让我们又爱又恨的需求,如果项目中对推送依赖多点,就会发现各种问,比如推送后进行播报之类的,经常会收到反馈,过一会没推送播报了,黑屏一阵就没了,杀进程没了,这一类问题很坑,不是属于逻辑性问题,优化性难点也很大。以前在项目中遇到过这一类的坑,如果不开VIP,推送的送达率没保证,不对接厂商,是没法在进程杀死的情况下进行接收推送的。
在排除掉外界元素外,公司只愿意用免费的,那只能我们尽力去处理了,首先逻辑没问题,那就在权限上做优化,都知道Android权限需要动态申请,进程存活过久,因为手机系统的电池优化,黑屏后后台休眠之类的会导致APP不接收播报,在点亮后,全接收到了,对于这一类的,可以自己做检测,此处,写下本wolf在项目中遇到的坑,提供下需要检测的权限和需要检测的方法,各位可以在项目中加一个检测的功能。
1、通知权限
应用未开启通知权限,那后果就不用说了,检测与跳转方法如下,我封装了类方法。
/**
* 判断是否开启了通知权限 true 开启 false 未开启
* @param context
* @return
*/
public static boolean isNotificationEnabled(Context context) {
NotificationManagerCompat notification = NotificationManagerCompat.from(context);
boolean isEnabled = notification.areNotificationsEnabled();
return isEnabled;
}
/**
* 跳转到通知管理的界面,去手动开启
* @param context
*/
public static void intentToNotification(Context context){
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.set