android nofication简单实现

本文介绍了一个简单的通知封装类实现,可用于展示聊天消息等通知。通过示例代码展示了如何创建自定义通知,包括设置通知的内容、图标、声音等,并提供了在Activity中调用通知的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nofication 的简单实现和封装

对于现在的应用基本上都会使用到nofication(通知),通知的样式也是越来越多
在这里呢,我只是简单的实现一个聊天消息的通知,给与初学者提供帮助

废话不多说
封装类:
package com.zy.fire.ui;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.NotificationCompat;

import java.util.ArrayList;

@SuppressLint("NewApi")
public class NotifyUtil {

    private int NOTIFICATION_ID;
    private NotificationManager nm;
    private Notification notification;
    private NotificationCompat.Builder cBuilder;
    private Context mContext;


    public NotifyUtil(Context context, int ID) {
        this.NOTIFICATION_ID = ID;
        mContext = context;
        nm = (NotificationManager) mContext
                .getSystemService(Activity.NOTIFICATION_SERVICE);
        cBuilder = new NotificationCompat.Builder(mContext);
    }


    private void setCompatBuilder(PendingIntent pendingIntent,
                                  int smallIcon, String ticker,
                                  String title, String content,
                                  boolean sound, boolean vibrate,
                                  boolean lights) {

        cBuilder.setContentIntent(pendingIntent);
        cBuilder.setSmallIcon(smallIcon);
        cBuilder.setTicker(ticker);
        cBuilder.setContentTitle(title);
        cBuilder.setContentText(content);
        cBuilder.setWhen(System.currentTimeMillis());

        //设置滑动小时
        cBuilder.setAutoCancel(true);

        cBuilder.setPriority(NotificationCompat.PRIORITY_MAX);

        int defaults = 0;

        //在此处判断声音

        if (sound) {
            defaults |= Notification.DEFAULT_SOUND;
        }
        if (vibrate) {
            defaults |= Notification.DEFAULT_VIBRATE;
        }
        if (lights) {
            defaults |= Notification.DEFAULT_LIGHTS;
        }

        if (sound || vibrate || lights) {
            System.out.println("=====深渊");
            cBuilder.setDefaults(defaults);
        }else{
            System.out.println("=====无声");
        }
    }


    /**
     * 显示消息通知
     *
     * @param pendingIntent
     * @param smallIcon
     * @param ticker
     * @param title
     * @param content
     */
    public void notify_mailbox(PendingIntent pendingIntent, int smallIcon, int largeIcon, ArrayList<String> messageList,
                               String ticker, String title, String content, boolean sound, boolean vibrate, boolean lights) {

        setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, sound, vibrate, lights);
        Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), largeIcon);

        //卧槽,设置大图标居然不管用,经过查询,发现是部分锤子手机不行,I fu le you;
        cBuilder.setLargeIcon(bitmap);
        cBuilder.setSmallIcon(smallIcon);
        //只能用小图了
        //cBuilder.setDefaults(Notification.DEFAULT_ALL);
        cBuilder.setAutoCancel(true);

        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
        for (String msg : messageList) {
            inboxStyle.addLine(msg);
        }
        inboxStyle.setSummaryText("[" + messageList.size() + "]" + title);
        cBuilder.setStyle(inboxStyle);
        sent();
    }


    private void sent() {
        notification = cBuilder.build();
        nm.notify(NOTIFICATION_ID, notification);
    }


    public void clear() {
        nm.cancelAll();
    }
}

在Activity中的简单调用这里我写的只是一个测试   大家可以按照需要自己修改和添加
package com.zy.fire.ui;

import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import java.util.ArrayList;

/*****************************************************
 * author:      wz
 * email:       wangzhong0116@foxmail.com
 * version:     1.0
 * date:        2016/12/1 12:28
 * description: 简单通知测试
 *****************************************************/

public class NoficationTestActivity extends AppCompatActivity implements View.OnClickListener {

    private Button nofication1;
    private Button button;
    private int requestCode = (int) SystemClock.uptimeMillis();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_nofication);
        initView();
    }

    private void initView() {
        nofication1 = (Button) findViewById(R.id.nofication1);
        button=(Button)findViewById(R.id.button);
        nofication1.setOnClickListener(this);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.nofication1:
                showN(1);
                break;
            case R.id.button:
                showN(2);
                break;
        }
    }

    private void showN(int flag){
        String content = "[" + 5 + "]高圆圆: 万一啊是否";
        int smallIcon = R.mipmap.ic_launcher;
        int largeIcon = R.mipmap.ic_launcher;
        NotifyUtil notify3 = new NotifyUtil(this, ++flag);
        String ticker = "您有一条新通知";
        String title = "消息提醒";
        ArrayList<String> messageList = new ArrayList<String>();
        messageList.add("asdfadsf");
        messageList.add("asdfadsf");
        messageList.add("asdfadsf");
        notify3.notify_mailbox(getDefalutIntent(), smallIcon, largeIcon, messageList, ticker,
                title, content, true, true, true);
    }


    /**
     * @获取默认的pendingIntent,为了防止2.3及以下版本报错
     * @flags属性:
     * 在顶部常驻:Notification.FLAG_ONGOING_EVENT
     * 点击去除: Notification.FLAG_AUTO_CANCEL
     */
    public PendingIntent getDefalutIntent(){
        Intent intent = new Intent();
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        Bundle bundle = new Bundle();
        intent.putExtras(bundle);
        intent.setClass(this, MessageActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(this,
                requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        return pIntent;
    }
}


简单就说道这里,如果大家有什么不懂的可以给我留言
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值