|
|
|
@ -23,12 +23,13 @@ import androidx.core.app.NotificationCompat; |
|
|
|
|
*/ |
|
|
|
|
public class NotificationUtils { |
|
|
|
|
|
|
|
|
|
private NotificationUtils(){ |
|
|
|
|
private NotificationUtils() { |
|
|
|
|
throw new AssertionError(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 显示开始下载时的通知 |
|
|
|
|
* |
|
|
|
|
* @param notifyId |
|
|
|
|
* @param channelId |
|
|
|
|
* @param channelName |
|
|
|
@ -36,39 +37,44 @@ public class NotificationUtils { |
|
|
|
|
* @param title |
|
|
|
|
* @param content |
|
|
|
|
*/ |
|
|
|
|
public static void showStartNotification(Context context, int notifyId,String channelId, String channelName,@DrawableRes int icon,CharSequence title,CharSequence content,boolean isVibrate,boolean isSound, boolean isCancelDownload){ |
|
|
|
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ |
|
|
|
|
createNotificationChannel(context,channelId,channelName,isVibrate,isSound); |
|
|
|
|
public static void showStartNotification(Context context, int notifyId, String channelId, String channelName, @DrawableRes int icon, CharSequence title, CharSequence content, boolean isVibrate, boolean isSound, boolean isCancelDownload) { |
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { |
|
|
|
|
createNotificationChannel(context, channelId, channelName, isVibrate, isSound); |
|
|
|
|
} |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content); |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context, channelId, icon, title, content); |
|
|
|
|
builder.setPriority(NotificationCompat.PRIORITY_DEFAULT); |
|
|
|
|
if(isVibrate && isSound){ |
|
|
|
|
if (isVibrate && isSound) { |
|
|
|
|
builder.setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND); |
|
|
|
|
}else if(isVibrate){ |
|
|
|
|
} else if (isVibrate) { |
|
|
|
|
builder.setDefaults(Notification.DEFAULT_VIBRATE); |
|
|
|
|
}else if(isSound){ |
|
|
|
|
} else if (isSound) { |
|
|
|
|
builder.setDefaults(Notification.DEFAULT_SOUND); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(isCancelDownload){ |
|
|
|
|
if (isCancelDownload) { |
|
|
|
|
Intent intent = new Intent(context, DownloadService.class); |
|
|
|
|
intent.putExtra(Constants.KEY_STOP_DOWNLOAD_SERVICE,true); |
|
|
|
|
PendingIntent deleteIntent = PendingIntent.getService(context, notifyId,intent, PendingIntent.FLAG_CANCEL_CURRENT); |
|
|
|
|
intent.putExtra(Constants.KEY_STOP_DOWNLOAD_SERVICE, true); |
|
|
|
|
int flag = PendingIntent.FLAG_CANCEL_CURRENT; |
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
|
|
|
|
flag = flag | PendingIntent.FLAG_IMMUTABLE; |
|
|
|
|
} |
|
|
|
|
PendingIntent deleteIntent = PendingIntent.getService(context, notifyId, intent, flag); |
|
|
|
|
builder.setDeleteIntent(deleteIntent); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Notification notification = builder.build(); |
|
|
|
|
if(isCancelDownload){ |
|
|
|
|
if (isCancelDownload) { |
|
|
|
|
notification.flags = Notification.FLAG_ONLY_ALERT_ONCE; |
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONLY_ALERT_ONCE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
notifyNotification(context,notifyId,notification); |
|
|
|
|
notifyNotification(context, notifyId, notification); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 显示下载中的通知(更新进度) |
|
|
|
|
* |
|
|
|
|
* @param notifyId |
|
|
|
|
* @param channelId |
|
|
|
|
* @param icon |
|
|
|
@ -77,29 +83,34 @@ public class NotificationUtils { |
|
|
|
|
* @param progress |
|
|
|
|
* @param size |
|
|
|
|
*/ |
|
|
|
|
public static void showProgressNotification(Context context, int notifyId,String channelId,@DrawableRes int icon,CharSequence title,CharSequence content,int progress,int size, boolean isCancelDownload){ |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content,progress,size); |
|
|
|
|
public static void showProgressNotification(Context context, int notifyId, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, int progress, int size, boolean isCancelDownload) { |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context, channelId, icon, title, content, progress, size); |
|
|
|
|
|
|
|
|
|
if(isCancelDownload){ |
|
|
|
|
if (isCancelDownload) { |
|
|
|
|
Intent intent = new Intent(context, DownloadService.class); |
|
|
|
|
intent.putExtra(Constants.KEY_STOP_DOWNLOAD_SERVICE,true); |
|
|
|
|
PendingIntent deleteIntent = PendingIntent.getService(context, notifyId,intent, PendingIntent.FLAG_CANCEL_CURRENT); |
|
|
|
|
intent.putExtra(Constants.KEY_STOP_DOWNLOAD_SERVICE, true); |
|
|
|
|
int flag = PendingIntent.FLAG_CANCEL_CURRENT; |
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
|
|
|
|
flag = flag | PendingIntent.FLAG_IMMUTABLE; |
|
|
|
|
} |
|
|
|
|
PendingIntent deleteIntent = PendingIntent.getService(context, notifyId, intent, flag); |
|
|
|
|
builder.setDeleteIntent(deleteIntent); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Notification notification = builder.build(); |
|
|
|
|
|
|
|
|
|
if(isCancelDownload){ |
|
|
|
|
if (isCancelDownload) { |
|
|
|
|
notification.flags = Notification.FLAG_ONLY_ALERT_ONCE; |
|
|
|
|
}else{ |
|
|
|
|
notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONLY_ALERT_ONCE; |
|
|
|
|
} else { |
|
|
|
|
notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONLY_ALERT_ONCE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
notifyNotification(context,notifyId,notification); |
|
|
|
|
notifyNotification(context, notifyId, notification); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 显示下载完成时的通知(点击安装) |
|
|
|
|
* |
|
|
|
|
* @param notifyId |
|
|
|
|
* @param channelId |
|
|
|
|
* @param icon |
|
|
|
@ -107,20 +118,25 @@ public class NotificationUtils { |
|
|
|
|
* @param content |
|
|
|
|
* @param file |
|
|
|
|
*/ |
|
|
|
|
public static void showFinishNotification(Context context, int notifyId, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, File file, String authority){ |
|
|
|
|
cancelNotification(context,notifyId); |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content); |
|
|
|
|
public static void showFinishNotification(Context context, int notifyId, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, File file, String authority) { |
|
|
|
|
cancelNotification(context, notifyId); |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context, channelId, icon, title, content); |
|
|
|
|
builder.setAutoCancel(true); |
|
|
|
|
Intent intent = AppUtils.getInstallIntent(context,file,authority); |
|
|
|
|
PendingIntent clickIntent = PendingIntent.getActivity(context, notifyId,intent, PendingIntent.FLAG_UPDATE_CURRENT); |
|
|
|
|
Intent intent = AppUtils.getInstallIntent(context, file, authority); |
|
|
|
|
int flag = PendingIntent.FLAG_UPDATE_CURRENT; |
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
|
|
|
|
flag = flag | PendingIntent.FLAG_IMMUTABLE; |
|
|
|
|
} |
|
|
|
|
PendingIntent clickIntent = PendingIntent.getActivity(context, notifyId, intent, flag); |
|
|
|
|
builder.setContentIntent(clickIntent); |
|
|
|
|
Notification notification = builder.build(); |
|
|
|
|
notification.flags = Notification.FLAG_AUTO_CANCEL; |
|
|
|
|
notifyNotification(context,notifyId,notification); |
|
|
|
|
notifyNotification(context, notifyId, notification); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 现在下载失败通知 |
|
|
|
|
* |
|
|
|
|
* @param context |
|
|
|
|
* @param notifyId |
|
|
|
|
* @param channelId |
|
|
|
@ -130,70 +146,78 @@ public class NotificationUtils { |
|
|
|
|
* @param isReDownload |
|
|
|
|
* @param config |
|
|
|
|
*/ |
|
|
|
|
public static void showErrorNotification(Context context, int notifyId, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, boolean isReDownload, UpdateConfig config){ |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content); |
|
|
|
|
public static void showErrorNotification(Context context, int notifyId, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, boolean isReDownload, UpdateConfig config) { |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context, channelId, icon, title, content); |
|
|
|
|
builder.setAutoCancel(true); |
|
|
|
|
if(isReDownload){//重新下载
|
|
|
|
|
Intent intent = new Intent(context, DownloadService.class); |
|
|
|
|
intent.putExtra(Constants.KEY_RE_DOWNLOAD,true); |
|
|
|
|
intent.putExtra(Constants.KEY_UPDATE_CONFIG,config); |
|
|
|
|
PendingIntent clickIntent = PendingIntent.getService(context, notifyId,intent, PendingIntent.FLAG_UPDATE_CURRENT); |
|
|
|
|
int flag = PendingIntent.FLAG_UPDATE_CURRENT; |
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
|
|
|
|
flag = flag | PendingIntent.FLAG_IMMUTABLE; |
|
|
|
|
} |
|
|
|
|
if (isReDownload) {//重新下载
|
|
|
|
|
Intent intent = new Intent(context, DownloadService.class); |
|
|
|
|
intent.putExtra(Constants.KEY_RE_DOWNLOAD, true); |
|
|
|
|
intent.putExtra(Constants.KEY_UPDATE_CONFIG, config); |
|
|
|
|
PendingIntent clickIntent = PendingIntent.getService(context, notifyId, intent, flag); |
|
|
|
|
builder.setContentIntent(clickIntent); |
|
|
|
|
}else{ |
|
|
|
|
PendingIntent clickIntent = PendingIntent.getService(context, notifyId,new Intent(), PendingIntent.FLAG_UPDATE_CURRENT); |
|
|
|
|
} else { |
|
|
|
|
PendingIntent clickIntent = PendingIntent.getService(context, notifyId, new Intent(), flag); |
|
|
|
|
builder.setContentIntent(clickIntent); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Notification notification = builder.build(); |
|
|
|
|
notification.flags = Notification.FLAG_AUTO_CANCEL; |
|
|
|
|
notifyNotification(context,notifyId,notification); |
|
|
|
|
notifyNotification(context, notifyId, notification); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 显示通知信息(非第一次) |
|
|
|
|
* |
|
|
|
|
* @param notifyId |
|
|
|
|
* @param channelId |
|
|
|
|
* @param icon |
|
|
|
|
* @param title |
|
|
|
|
* @param content |
|
|
|
|
*/ |
|
|
|
|
public static void showNotification(Context context, int notifyId,String channelId,@DrawableRes int icon,CharSequence title,CharSequence content,boolean isAutoCancel){ |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content); |
|
|
|
|
public static void showNotification(Context context, int notifyId, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, boolean isAutoCancel) { |
|
|
|
|
NotificationCompat.Builder builder = buildNotification(context, channelId, icon, title, content); |
|
|
|
|
builder.setAutoCancel(isAutoCancel); |
|
|
|
|
Notification notification = builder.build(); |
|
|
|
|
notification.flags = Notification.FLAG_AUTO_CANCEL; |
|
|
|
|
notifyNotification(context,notifyId,notification); |
|
|
|
|
notifyNotification(context, notifyId, notification); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 取消通知 |
|
|
|
|
* |
|
|
|
|
* @param notifyId |
|
|
|
|
*/ |
|
|
|
|
public static void cancelNotification(Context context, int notifyId){ |
|
|
|
|
public static void cancelNotification(Context context, int notifyId) { |
|
|
|
|
getNotificationManager(context).cancel(notifyId); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取通知管理器 |
|
|
|
|
* |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public static NotificationManager getNotificationManager(Context context){ |
|
|
|
|
return (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); |
|
|
|
|
public static NotificationManager getNotificationManager(Context context) { |
|
|
|
|
return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 创建一个通知渠道(兼容0以上版本) |
|
|
|
|
* |
|
|
|
|
* @param channelId |
|
|
|
|
* @param channelName |
|
|
|
|
*/ |
|
|
|
|
@RequiresApi(api = Build.VERSION_CODES.O) |
|
|
|
|
public static void createNotificationChannel(Context context, String channelId, String channelName,boolean isVibrate,boolean isSound){ |
|
|
|
|
NotificationChannel channel = new NotificationChannel(channelId,channelName, NotificationManager.IMPORTANCE_HIGH); |
|
|
|
|
public static void createNotificationChannel(Context context, String channelId, String channelName, boolean isVibrate, boolean isSound) { |
|
|
|
|
NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH); |
|
|
|
|
channel.enableVibration(isVibrate); |
|
|
|
|
if(!isSound){ |
|
|
|
|
channel.setSound(null,null); |
|
|
|
|
if (!isSound) { |
|
|
|
|
channel.setSound(null, null); |
|
|
|
|
} |
|
|
|
|
getNotificationManager(context).createNotificationChannel(channel); |
|
|
|
|
|
|
|
|
@ -201,18 +225,20 @@ public class NotificationUtils { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 构建一个通知构建器 |
|
|
|
|
* |
|
|
|
|
* @param channelId |
|
|
|
|
* @param icon |
|
|
|
|
* @param title |
|
|
|
|
* @param content |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private static NotificationCompat.Builder buildNotification(Context context, String channelId, @DrawableRes int icon,CharSequence title,CharSequence content){ |
|
|
|
|
return buildNotification(context,channelId,icon,title,content,Constants.NONE,Constants.NONE); |
|
|
|
|
private static NotificationCompat.Builder buildNotification(Context context, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content) { |
|
|
|
|
return buildNotification(context, channelId, icon, title, content, Constants.NONE, Constants.NONE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 构建一个通知构建器 |
|
|
|
|
* |
|
|
|
|
* @param channelId |
|
|
|
|
* @param icon |
|
|
|
|
* @param title |
|
|
|
@ -221,16 +247,16 @@ public class NotificationUtils { |
|
|
|
|
* @param size |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private static NotificationCompat.Builder buildNotification(Context context, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, int progress, int size){ |
|
|
|
|
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,channelId); |
|
|
|
|
private static NotificationCompat.Builder buildNotification(Context context, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, int progress, int size) { |
|
|
|
|
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId); |
|
|
|
|
builder.setSmallIcon(icon); |
|
|
|
|
|
|
|
|
|
builder.setContentTitle(title); |
|
|
|
|
builder.setContentText(content); |
|
|
|
|
builder.setOngoing(true); |
|
|
|
|
|
|
|
|
|
if(progress!= Constants.NONE && size!=Constants.NONE){ |
|
|
|
|
builder.setProgress(size,progress,false); |
|
|
|
|
if (progress != Constants.NONE && size != Constants.NONE) { |
|
|
|
|
builder.setProgress(size, progress, false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return builder; |
|
|
|
@ -238,11 +264,12 @@ public class NotificationUtils { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 更新通知栏 |
|
|
|
|
* |
|
|
|
|
* @param id |
|
|
|
|
* @param notification |
|
|
|
|
*/ |
|
|
|
|
private static void notifyNotification(Context context, int id, Notification notification){ |
|
|
|
|
getNotificationManager(context).notify(id,notification); |
|
|
|
|
private static void notifyNotification(Context context, int id, Notification notification) { |
|
|
|
|
getNotificationManager(context).notify(id, notification); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|