您的位置:首页 > 移动开发 > Android开发

android nofication简单实现

2016-12-02 10:14 162 查看

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);
<
ad3d
span style="color:#cc7832;">        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;
}
}


简单就说道这里,如果大家有什么不懂的可以给我留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android