Android 之 通知 Notification

来源:互联网 发布:java图形界面开发框架 编辑:程序博客网 时间:2024/05/22 11:37
位于标题栏之下,通常用于提醒用户,内容为一些应用程序的推送消息和电池信息等。

通常是使用NotificationManager来管理通知的。

使用Notification.Builder来构建通知的对象。
setDefaults(int defaults)   设置通知的led灯或者振动信息
setContentTitle(CharSequence title):设置通知的标题
setContentText(CharSequence text):设置通知的内容
setAutoCancel(boolean autoCancel):设置点击通知栏之后,是否自动删除通知信息
setSmallIcon(int icon):为通知栏设置小图标。
setLargeIcon(Bitmap icon):为通知栏设置大图标
setTicker(CharSequence tickerText):设置通知栏的提示文本
setContentIntent(PendingIntent intent):设置点击通知后将启动的程序组件

发送通知的步骤:
1.通过调用context的getSystemService方法获取系统的通知服务管理器NotificationManager
2.通过构造器创建一个NotificationCompat.Builder对象。

3.调用builder的相关方法,设置通知属性。
4.通过调用builder的build方法,设置通知的对象。
5.通过通知管理器的notify对象,发送通知。

package com.qf.notification_demo;import android.os.Bundle;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.support.v4.app.NotificationCompat;import android.view.Menu;import android.view.View;import android.widget.RemoteViews;public class MainActivity extends Activity {private NotificationManager manager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1、初始化通知管理器的系统服务manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);}public void notify01(View view){//2.构建通知NotificationCompat.Builder builder = new NotificationCompat.Builder(this);//3.设置内容//设置小图标(必须要指定的,如果大图标没有被指定,那么小图标就显示在大图标的位置上)builder.setSmallIcon(R.drawable.d_baibai);//设置大图标Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.d_bizui);builder.setLargeIcon(bm);//设置标题builder.setContentTitle("提示信息");//设置内容builder.setContentText("恭喜你,被《奔跑吧,兄弟》选中,获得了笔记本电脑一台,手机一部,现金8888元,快来领奖吧!!");//设置提示用户的信息builder.setTicker("你有一条新消息!!!");//设置时间builder.setWhen(System.currentTimeMillis());//设置优先级builder.setPriority(Notification.PRIORITY_HIGH);//设置跳转界面PendingIntent pi = PendingIntent.getActivity(this, 100, new Intent(this, SecondActivity.class), PendingIntent.FLAG_ONE_SHOT);builder.setContentIntent(pi);//设置一值显示,点击之后才消失builder.setAutoCancel(true);//获取通知对象Notification notification = builder.build();//发送通知manager.notify(1, notification);}//进度条通知public void notify02(View view){new Thread(){public void run() {//1.获取builder对象NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this);//2.设置小图标builder.setSmallIcon(R.drawable.d_beishang);builder.setTicker("正在下载中....");builder.setContentTitle("下载文件");builder.setContentText("正在下载中....");for (int i = 0; i <=100; i+=10) {//设置通知的进度条builder.setProgress(100, i, false);//发送通知manager.notify(2, builder.build());try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}//取消下载的通知manager.cancel(2);builder = new NotificationCompat.Builder(MainActivity.this);builder.setSmallIcon(R.drawable.d_doge);builder.setContentTitle("下载完成");builder.setContentText("下载完成,点击进入安装界面");builder.setTicker("下载完成....");builder.setPriority(Notification.PRIORITY_HIGH);//发送完成通知manager.notify(3, builder.build());}}.start();}//列表通知(新闻类app经常使用的通知)public void notify03(View view){//1.获得builder对象NotificationCompat.Builder builder = new NotificationCompat.Builder(this);builder.setSmallIcon(R.drawable.d_dahaqi).setContentTitle("今日头条");NotificationCompat.InboxStyle style = new NotificationCompat.InboxStyle();style.addLine("三星手机note7出现大规模爆炸事件,三星公司除中国外全面召回") .addLine("30省份启动户籍改革 你们那里落户门槛有多高?") .addLine("大陆对台战略改变:“区别对待”、“一岛两制”") .addLine("马蓉宣布开通网络直播 网友:你怎么不去死!") .setSummaryText("以上为今天推送精彩内容");//设置通知样式为列表样式builder.setStyle(style);//发送通知manager.notify(4, builder.build());}//大图通知(通常用于提供壁纸类的app)public void notify04(View view){NotificationCompat.Builder builder = new NotificationCompat.Builder(this);builder.setSmallIcon(R.drawable.d_chanzui).setContentTitle("今日消息").setContentText("大量精美图片来袭!!");//实例化大图样式的对象NotificationCompat.BigPictureStyle style = new NotificationCompat.BigPictureStyle();Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.bg);style.bigPicture(bm);style.setSummaryText("可爱的阿狸");//设置通知的样式builder.setStyle(style);//发送通知manager.notify(5, builder.build());}//自定义通知(想要自定义通知格式时,使用这个)public void notify05(View view){NotificationCompat.Builder builder = new NotificationCompat.Builder(this);builder.setSmallIcon(R.drawable.ic_launcher).setContentTitle("自定义通知").setContentText("丰富的表情包");//把布局文件转化为远程视图对象RemoteViews views = new RemoteViews(getPackageName(), R.layout.notification);//设置远程视图当中对应的控件的内容views.setImageViewResource(R.id.imageView1, R.drawable.ali);views.setTextViewText(R.id.textView1, "emoji的表情");builder.setContent(views);//发送通知manager.notify(6, builder.build());}}

public class SecondActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);}}



自定义通知的布局:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >


    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/d_baibai" />


    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/d_beishang" />


    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/d_bishi" />


    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/d_chijing" />


    <ImageView
        android:id="@+id/imageView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/d_doge" />


    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />


</LinearLayout>






0 0