作者:暗淡的天2004_976 | 来源:互联网 | 2023-10-10 16:39
前言:Android通知栏提示笔记通知几乎是每一款app都拥有的功能1.发送通知发送一个通知栏必须用到两个类:NotificationManager、Notification。Noti
前言:Android通知栏提示笔记
通知几乎是每一款app都拥有的功能
1.发送通知
发送一个通知栏必须用到两个类: NotificationManager 、 Notification。
NotificationManager : 是状态栏通知的管理类,负责发通知、清楚通知等。
NotificationManager 是一个系统Service,必须通过 getSystemService()方法来获取。
视图文件, xml:
<Button
android:text="发送通知"
android:onClick="test_2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="下载通知"
android:onClick="test_3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
方法:
//===========================发通知==============================//
//定义一个NotifactionManager对象
private NotificationManager manager;
//设置日期格式
private SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
public void test_2(View view){
//获取NotifactionManager对象
manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
//构建一个Notifaction的Builder对象
Notification.Builder builder=new Notification.Builder(this);
//设置通知相关信息
builder.setTicker("你有一条新的通知");//设置信息提示
builder.setSmallIcon(R.mipmap.ic_launcher);//设置通知提示图标
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.user2));//设置图标
builder.setContentTitle("部门通知");//设置标题
builder.setContentText("今天中午一点在报告厅一开部门会议,"+sdf.format(new Date()));//设置文本
builder.setAutoCancel(true);//查看后自动取消
builder.setWhen(SystemClock.currentThreadTimeMillis());//什么时候发出的通知
builder.setDefaults(Notification.DEFAULT_LIGHTS);//消息提示模式
//设置震动规律,(第一个参数: 振动前等待的时间,第二个参数: 第一次振动的时长、以此类推 )
builder.setVibrate(new long[]{1000,2000,1000,3000});
//builder.setSound(); //设置声音
//自定义声音
//builder.setSound(Uri.parse("file:///sdcard/notification/ringer.mp3"));
//设置灯
builder.setLights(Color.GREEN,1000,1000);
//设置点击通知后执行的动作
Intent intent=new Intent(this,NewFileActivity.class);
intent.putExtra("message","今天中午一点在报告厅一开部门会议,请大家准参加,通知发布时间:"+sdf.format(new Date()));
//用当前时间充当通知的id,这里是为了区分不同的通知,如果是同一个id,前者就会被后者覆盖
int requestId=(int) new Date().getTime();
//第一个参数连接上下文的context
// 第二个参数是对PendingIntent的描述,请求值不同Intent就不同
// 第三个参数是一个Intent对象,包含跳转目标
// 第四个参数有4种状态
PendingIntent pendingIntent=PendingIntent.getActivity(this,requestId,intent,PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
//发出通知,参数是(通知栏的id,设置内容的对象)
manager.notify(requestId,builder.build());
}
图解:
对 NotificationManager 、 Notification更详细的内容
2.下载通知
demo:
//发送一个下载通知
Notification.Builder builder;
public void test_3(View view){
manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
builder=new Notification.Builder(this);
builder.setTicker("文件开始下载");
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle("文件下载");
builder.setContentText("文件正在下载中......");
builder.setWhen(SystemClock.currentThreadTimeMillis());
builder.setDefaults(Notification.DEFAULT_LIGHTS);//消息提示模式
builder.setProgress(100,0,false);
//模拟正在执行下载
new Thread(new Runnable() {
@Override
public void run() {
for (int i=1;i<=100;i++){
builder.setProgress(100, i, false);
if(i==100)
builder.setContentText("文件下载完毕!");
manager.notify(1, builder.build());
SystemClock.sleep(100);//模拟下载
}
manager.cancel(1);
}
}).start();
}