import android.app.Application;import android.app.NotificationChannel;import android.app.NotificationManager;import android.os.Build;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * 应用程序 */public class BaseApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        createNotificationChannel();    }    /**     * 创建通知栏渠道     */    private void createNotificationChannel() {        /**         * 在API 26+ 创建NotificationChannel         */        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {            List> list = new ArrayList<>();            HashMap hashMap;            hashMap = new HashMap<>();            hashMap.put("name", "聊天");            hashMap.put("description", "聊天消息通知");            hashMap.put("channel", Constant.notifyChannelChat);            list.add(hashMap);            hashMap = new HashMap<>();            hashMap.put("name", "订阅");            hashMap.put("description", "订阅消息通知");            hashMap.put("channel", Constant.notifyChannelSubscription);            list.add(hashMap);            hashMap = new HashMap<>();            hashMap.put("name", "推荐");            hashMap.put("description", "推荐消息通知");            hashMap.put("channel", Constant.notifyChannelRecommend);            list.add(hashMap);            hashMap = new HashMap<>();            hashMap.put("name", "新闻");            hashMap.put("description", "新聞消息通知");            hashMap.put("channel", Constant.notifyChannelNews);            list.add(hashMap);            hashMap = new HashMap<>();            hashMap.put("name", "其他");            hashMap.put("description", "其他消息通知");            hashMap.put("channel", Constant.notifyChannelOther);            list.add(hashMap);            NotificationManager notificationManager = getSystemService(NotificationManager.class);            for (int i = 0; i < list.size(); i++) {                HashMap map = list.get(i);                String textName = MapUtil.getMapValue(map, "name");                String textDescription = MapUtil.getMapValue(map, "description");                String textChannel = MapUtil.getMapValue(map, "channel");                NotificationChannel channelOther = new NotificationChannel(textChannel, textName, NotificationManager.IMPORTANCE_DEFAULT);                channelOther.setDescription(textDescription);                notificationManager.createNotificationChannel(channelOther);            }        }    }}

 

import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import java.util.HashMap;import java.util.Map;/** * 主界面 */public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.btn_notification).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Map map = new HashMap<>();                map.put("channel", "1");                map.put("title", "张三");                map.put("content", "你最近还好吗");                map.put("big_text", "-------------------------------------------------------------");                // https://developer.android.com/training/notify-user/build-notification?hl=zh-cn#java                NotificationUtil.sendNotification(MainActivity.this, map);            }        });    }}

 

import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.media.RingtoneManager;import android.support.v4.app.NotificationCompat;import android.support.v4.app.NotificationManagerCompat;import android.text.TextUtils;import java.util.Map;import java.util.Random;/** * 通知栏工具类 */public class NotificationUtil {    public static void sendNotification(Context context, Map map) {        if (context != null && map != null) {            String channel = MapUtil.getMapValue(map, "channel", "0");            String channelId = Constant.notifyChannelOther;            switch (channel) {                case "0":                    channelId = Constant.notifyChannelOther;                    break;                case "1":                    channelId = Constant.notifyChannelChat;                    break;                case "2":                    channelId = Constant.notifyChannelNews;                    break;                case "3":                    channelId = Constant.notifyChannelRecommend;                    break;                case "4":                    channelId = Constant.notifyChannelSubscription;                    break;            }            String title = MapUtil.getMapValue(map, "title");            String content = MapUtil.getMapValue(map, "content");            // 设置通知内容,构造函数要求您提供通道ID。这是与Android 8.0(API级别26)及更高版本兼容所必需的,但旧版本会忽略这一点            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, channelId)                    .setSmallIcon(R.drawable.notification_icon)                    .setContentTitle(title)                    .setContentText(content)                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)                    .setAutoCancel(true)                    .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));            String bigText = MapUtil.getMapValue(map, "big_text");            // 如果bigText的值不为空            if (!TextUtils.isEmpty(bigText)) {                // 如果您希望通知更长,可以通过添加样式模板来启用可扩展通知                mBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(bigText));            }            // 为应用中的活动创建明确的意图            Intent intent = new Intent(context, NotificationClickReceiver.class);            intent.setAction(NotificationClickReceiver.noticeClick);            intent.putExtras(MapUtil.getBundle(map));            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, new Random().nextInt(1000), intent, PendingIntent.FLAG_UPDATE_CURRENT);            mBuilder.setContentIntent(pendingIntent);            // 显示通知,注意:从Android 8.1(API级别27)开始,应用程序无法每秒发出超过一次的通知。            // 如果您的应用在一秒钟内发布了多个通知,则它们都会按预期显示,但每秒只有第一个通知发出声音            NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);            notificationManager.notify(new Random().nextInt(1000), mBuilder.build());        }    }}

 

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.widget.Toast;/** * 监听通知栏点击事件 */public class NotificationClickReceiver extends BroadcastReceiver {    public final static String noticeClick = "android.intent.action.noticeClick";    @Override    public void onReceive(Context context, Intent intent) {        if (context != null && intent != null && intent.getAction() != null && intent.getAction().equals(noticeClick)) {            // 通知栏被点击            Bundle bundle = intent.getExtras();            if (bundle != null) {                Toast.makeText(context, "收到消息", Toast.LENGTH_SHORT).show();            }        }    }}

 

import android.os.Bundle;import android.text.TextUtils;import java.util.Map;/** * Map工具类 */public class MapUtil {    /**     * 根据map的key取map的值     */    public static String getMapValue(Map map, String key) {        if (map != null && !TextUtils.isEmpty(key) && map.containsKey(key)) {            return map.get(key);        } else {            return "";        }    }    /**     * 根据map的key取map的值,当map的值为空时取传过来的默认值     */    public static String getMapValue(Map map, String key, String defaultValue) {        if (map != null && !TextUtils.isEmpty(key) && map.containsKey(key)) {            String value = map.get(key);            if (value != null) {                return value;            } else {                return defaultValue;            }        } else {            return defaultValue;        }    }    /**     * 把map转换成bundle     */    public static Bundle getBundle(Map map) {        Bundle bundle = new Bundle();        if (map != null) {            for (Map.Entry entry : map.entrySet()) {                String key = entry.getKey();                if (!TextUtils.isEmpty(key)) {                    bundle.putString(key, entry.getValue());                }            }        }        return bundle;    }}

 

/** * 常量类 */public class Constant {    // 通知渠道ID:聊天    public final static String notifyChannelChat = "chat";    // 通知渠道ID:订阅    public final static String notifyChannelSubscription = "subscription";    // 通知渠道ID:推荐    public final static String notifyChannelRecommend = "recommend";    // 通知渠道ID:新闻    public final static String notifyChannelNews = "news";    // 通知渠道ID:其他    public final static String notifyChannelOther = "other";}

 

<?xml version="1.0" encoding="utf-8"?>                                                                

 点击查看kotlin版 

更多相关文章

  1. Android学习笔记(7)————Android中的消息机制
  2. android jpush 极光推送
  3. Android(安卓)闹钟以及通知
  4. Android二级分类列表ListView
  5. Android子线程与子线程的通信
  6. 浅析Android中的消息机制
  7. Android(安卓)Notifications通知
  8. Android应用程序组件Content Provider的共享数据更新通知机制分
  9. Android应用程序键盘(Keyboard)消息处理机制分析(10)

随机推荐

  1. Android通过共享Uid实现两个应用间的数据
  2. Android(安卓)- 数据存储 -存储文件
  3. android的内存管理方式
  4. Android(安卓)消息处理机制(Looper、Handl
  5. [Java][Android][Process] 暴力的服务可
  6. Android之消息推送实现
  7. Android屏幕密度(Density)和分辨率的关系
  8. EditText横屏时,弹出软件盘时不进行全屏
  9. android UI进阶之仿iphone的tab效果 (Andr
  10. 从0系统学 Android--1.1认识 Android