Android编程之通知栏的用法小结

本文实例总结了Android编程中通知栏的用法。分享给大家供大家参考,具体如下:

很久没有使用Android的通知功能了,今天把两年前的代码搬出来一看,发现很多方法都废弃了,代码中各种删除线看的十分不爽。于是乎,打开Google,查看官方文档,学习最新的发送通知栏消息的方法。

本文中的代码均参照谷歌官方文档编写:

http://developer.android.com/guide/topics/ui/notifiers/notifications.html

1.首先,获取系统的通知服务:

代码如下:

NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

2.发送一个最简单的通知

public void simpleNotice(View view) {
    //此Builder为android.support.v4.app.NotificationCompat.Builder中的,下同。
    Builder mBuilder = new Builder(this);
    //系统收到通知时,通知栏上面显示的文字。
    mBuilder.setTicker("天津,晴,2~15度,微风");
    //显示在通知栏上的小图标
    mBuilder.setSmallIcon(R.drawable.consult_answer);
    //通知标题
    mBuilder.setContentTitle("天气预报");
    //通知内容
    mBuilder.setContentText("天津,晴,2~15度,微风");
    //设置大图标,即通知条上左侧的图片(如果只设置了小图标,则此处会显示小图标)
    mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.share_sina));
    //显示在小图标左侧的数字
    mBuilder.setNumber(6);
    //设置为不可清除模式
    mBuilder.setOngoing(true);
    //显示通知,id必须不重复,否则新的通知会覆盖旧的通知(利用这一特性,可以对通知进行更新)
    nm.notify(1, mBuilder.build());
}

3.删除一个通知。参数即为通知的id

nm.cancel(1);

4.发送一个通知,点击通知后跳转到一个Activity,从这个Activity返回后,进入程序内的某一个页面(一般为主页)

//点击通知进入一个Activity,点击返回时进入指定页面。
public void resultActivityBackApp(View view) {
    Builder mBuilder = new Builder(this);
    mBuilder.setTicker("通知标题2");
    mBuilder.setSmallIcon(R.drawable.ic_launcher);
    mBuilder.setContentTitle("通知标题2");
    mBuilder.setContentText("点击通知进入一个Activity,点击返回时进入指定页面。");
    //设置点击一次后消失(如果没有点击事件,则该方法无效。)
    mBuilder.setAutoCancel(true);
    //点击通知之后需要跳转的页面
    Intent resultIntent = new Intent(this, ResultActivityBackApp.class);
    //使用TaskStackBuilder为“通知页面”设置返回关系
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    //为点击通知后打开的页面设定 返回 页面。(在manifest中指定)
    stackBuilder.addParentStack(ResultActivityBackApp.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(pIntent);
    // mId allows you to update the notification later on.
    nm.notify(2, mBuilder.build());
}

同时,需要在manifest中为点击通知后打开的Activity指定父Activity.

<activity
  android:name=".ResultActivityBackApp"
  android:parentActivityName=".MainActivity">
  <meta-data
    android:name="android.support.PARENT_ACTIVITY"
    android:value=".MainActivity" />
</activity>

(其中,activity的属性parentActivityName为API 16中的属性,meta-data中的代码为兼容API 16以下。因此,对于大多数程序,这两个地方都得写。)

5.和上述4类似,只是在打开的Activity中返回时回到home页

//点击通知进入一个Activity,点击返回时回到桌面
public void resultActivityBackHome(View view) {
    Builder mBuilder = new Builder(this);
    mBuilder.setTicker("通知标题3");
    mBuilder.setSmallIcon(R.drawable.ic_launcher);
    mBuilder.setContentTitle("通知标题3");
    mBuilder.setContentText("点击通知进入一个Activity,点击返回时回到桌面");
    //设置点击一次后消失(如果没有点击事件,则该方法无效。)
    mBuilder.setAutoCancel(true);
    Intent notifyIntent = new Intent(this, ResultActivityBackHome.class);
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(pIntent);
    nm.notify(3, mBuilder.build());
}

6.带进度条的通知

public void progressNotice(View view) {
    final Builder mBuilder = new Builder(this);
    mBuilder.setTicker("通知标题4");
    mBuilder.setContentTitle("Picture Download")
        .setContentText("Download in progress")
        .setSmallIcon(R.drawable.ic_launcher);
    // Start a lengthy operation in a background thread
    new Thread(new Runnable() {
      @Override
      public void run() {
        int progress;
        for (progress = 0; progress <= 100; progress++) {
          // Sets the progress indicator to a max value, the current completion percentage,
          // and "determinate" state
          mBuilder.setProgress(100, progress, false);
          //不明确进度的进度条
//          mBuilder.setProgress(0, 0, true);
          nm.notify(4, mBuilder.build());
          // 模拟延时
          try {
            Thread.sleep(200);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
        // When the loop is finished, updates the notification
        mBuilder.setContentText("Download complete");
        // Removes the progress bar
        mBuilder.setProgress(0, 0, false);
        nm.notify(4, mBuilder.build());
      }
    }
    ).start();
}

7.扩展布局的通知。按住通知条下滑,可以查看更详细的内容

public void expandLayoutNotice(View view) {
    Builder mBuilder = new Builder(this);
    mBuilder.setTicker("通知标题5");
    mBuilder.setSmallIcon(R.drawable.ic_launcher);
    mBuilder.setContentTitle("通知标题5");
    mBuilder.setContentText("按住通知下拉可显示扩展布局");
    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
    String[] events = new String[]{"Beijing", "Tianjin", "Shanghai", "Guangzhou"};
    // 设置扩展布局的标题
    inboxStyle.setBigContentTitle("Event tracker details:");
    for (String s : events) {
      inboxStyle.addLine(s);
    }
    mBuilder.setStyle(inboxStyle);
    nm.notify(5, mBuilder.build());
}

8.自定义布局的通知栏。(根据谷歌的官方文档不推荐这么做,因为使用这种方式时,对不同屏幕进行适配需要考虑的因素太多。而且,通知栏应该展示的就是最简明扼要的信息,对于大多数程序默认的布局已经足够了。)

//自定义布局的通知
public void customLayoutNotice(View view) {
    Builder mBuilder = new Builder(this);
    mBuilder.setTicker("通知标题6");
    mBuilder.setTicker("通知标题6");
    mBuilder.setSmallIcon(R.drawable.ic_launcher);
    RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_layout_notice);
    mBuilder.setContent(remoteViews);
    //为RemoteViews上的按钮设置文字
    remoteViews.setCharSequence(R.id.custom_layout_button1, "setText", "Button1");
    remoteViews.setCharSequence(R.id.custom_layout_button2, "setText", "Button2");
    //为RemoteViews上的按钮设置点击事件
    Intent intent1 = new Intent(this, CustomLayoutResultActivity.class);
    intent1.putExtra("content", "From button1 click!");
    PendingIntent pIntentButton1 = PendingIntent.getActivity(this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.custom_layout_button1, pIntentButton1);
    Intent intent2 = new Intent(this, CustomLayoutResultActivity.class);
    intent2.putExtra("content", "From button2 click!");
    PendingIntent pIntentButton2 = PendingIntent.getActivity(this, 1, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.custom_layout_button2, pIntentButton2);
    nm.notify(6, mBuilder.build());
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android5.x中的阴影效果elevation和translationZ的实现方法

    android5.x中 view多了一个 属性 z,垂直高度上的变化. Z属性  由两部分组成,elevation 和 translationZ <ImageView android:id="@+id/me_daijjBack" android:layout_width="27dp" android:layout_height="27dp" android:elevation="3dp" android:translat

  • Android 操作excel功能实例代码

    学习app对excel的读写控制 1.界面设计 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id

  • Android 自定义阴影效果详解及实例

    Android 自定义阴影效果详解及实例 Android5.X中,Google为其增加了两个属性 android:elevation=" " 与 android:translationZ=" ",对应垂直方向上的高度变化.系统会自动增加阴影效果. 在TabLayout中增加android:elevation=" 8dp" ,效果如下: 箭头指向的就是系统为我们默认提供,结果差强人意.那我们是不是可以自定义阴影,不使用系统提供的. 自定义阴影效果

  • Android实现图片阴影效果的方法

    本文实例介绍了Android实现图片阴影效果,设置画布颜色,图像倾斜效果,图片阴影效果的方法,采用canvas.save(Canvas.MATRIX_SAVE_FLAG);来实现.由于图片的实际尺寸比显示出来的图像要大一些,因此需要适当更改下大小,以达到较好的效果,在原有矩形基础上,画成圆角矩形,同时带有阴影层.读者可以根据自身需要对该程序代码进行个性化的修改以便更符合自身项目需求. 具体实现代码如下: package canvas.test; import android.app.Activi

  • Android的消息机制

    一.简介 Android的消息机制主要是指Handler的运行机制,那么什么是Handler的运行机制那?通俗的来讲就是,使用Handler将子线程的Message放入主线程的Messagequeue中,在主线程使用. 二.学习内容 学习Android的消息机制,我们需要先了解如下内容. 消息的表示:Message 消息队列:MessageQueue 消息循环,用于循环取出消息进行处理:Looper 消息处理,消息循环从消息队列中取出消息后要对消息进行处理:Handler 平常我们接触的大多是H

  • Android实现点赞动画(27)

    本文实例为大家分享了Android使用入门第二十七篇点赞动画的具体代码,供大家参考,具体内容如下 MainActivity.java代码: package siso.likeanimation; import android.graphics.Bitmap; import android.graphics.PointF; import android.graphics.drawable.BitmapDrawable; import android.support.v4.content.res.R

  • 详解Android Material设计中阴影效果的实现方法

    View可以投下的阴影,一个View的elevation值决定了它的阴影的大小和绘制的顺序.可以设置一个视图的elevation,在布局中使用属性:android:elevation <TextView android:id="@+id/my_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=&quo

  • Android编程使用自定义shape实现shadow阴影效果的方法

    本文实例讲述了Android编程使用自定义shape实现shadow阴影效果的方法.分享给大家供大家参考,具体如下: 直接上xml文件, 并且附上相应的解析: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_p

  • Android编程实现canvas绘制饼状统计图功能示例【自动适应条目数量与大小】

    本文实例讲述了Android编程实现canvas绘制饼状统计图功能.分享给大家供大家参考,具体如下: 本例的目的是实现一个简单的饼状统计图,效果如下:    特点: 1.使用非常方便,可放在xml布局文件中,然后在代码中设置内容,即: PieChartView pieChartView = (PieChartView) findViewById(R.id.pie_chart); PieChartView.PieItemBean[] items = new PieChartView.PieItem

  • Android 解决监听home键的几种方法

    Android 解决监听home键的几种方法 前言: 以下两种方法可以完美解决监听back键,home键,多任务键(最近任务键). 一.使用注册广播监听home键.多任务键 演示图 创建一个广播代码如下: class InnerRecevier extends BroadcastReceiver { final String SYSTEM_DIALOG_REASON_KEY = "reason"; final String SYSTEM_DIALOG_REASON_RECENT_APP

随机推荐