package com.track.beini.navtrack.utils; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.TaskStackBuilder; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.provider.Settings; import android.support.v4.app.NotificationCompat; import com.track.beini.navtrack.MainActivity; import com.track.beini.navtrack.R; /** * Create by beini 2019/5/21 * 通知管理类 */ public class NotificationHelper extends ContextWrapper { private NotificationManager mNotificationManager; private NotificationChannel mNotificationChannel; public static final String CHANNEL_ID = "default"; private static final String CHANNEL_NAME = "Default Channel"; private static final String CHANNEL_DESCRIPTION = "this is default channel!"; public NotificationHelper(Context base) { super(base); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mNotificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); mNotificationChannel.setDescription(CHANNEL_DESCRIPTION); getNotificationManager().createNotificationChannel(mNotificationChannel); } } public NotificationCompat.Builder getNotification(String title, String content) { NotificationCompat.Builder builder = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { builder = new NotificationCompat.Builder(this, CHANNEL_ID); } else { builder = new NotificationCompat.Builder(this); builder.setPriority(NotificationCompat.PRIORITY_DEFAULT); } builder.setContentTitle(title); builder.setContentText(content); builder.setSmallIcon(R.mipmap.icon_app); //点击通知之后需要跳转的页面 Intent resultIntent = new Intent(this, MainActivity.class); resultIntent.putExtra("goto", "message"); //使用TaskStackBuilder为“通知页面”设置返回关系 TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); //为点击通知后打开的页面设定 返回 页面。(在manifest中指定) stackBuilder.addParentStack(MainActivity.class); stackBuilder.addNextIntent(resultIntent); PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pIntent); // builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.icon_app)); //点击自动删除通知 builder.setAutoCancel(true); return builder; } public void notify(int id, NotificationCompat.Builder builder) { if (getNotificationManager() != null) { getNotificationManager().notify(id, builder.build()); } } public void openChannelSetting(String channelId) { Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, channelId); if (getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) startActivity(intent); } public void openNotificationSetting() { Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); if (getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) startActivity(intent); } private NotificationManager getNotificationManager() { if (mNotificationManager == null) mNotificationManager = (NotificationManager) this.getSystemService(this.NOTIFICATION_SERVICE); return mNotificationManager; } }
使用:
private static final int DEFAULT_ID = 1001;
public void showNotification(String title, String content, Context context) { NotificationHelper mNotificationHelper = new NotificationHelper(context); NotificationCompat.Builder builder = mNotificationHelper.getNotification(title, content); mNotificationHelper.notify(DEFAULT_ID, builder); }