Android之Notification的多种用法

来源:互联网 发布:php urldecode解码 编辑:程序博客网 时间:2024/06/05 15:44

1.实现的功能

默认通知(已经废弃)
默认通知(API 11以后可用)
默认通知(API 16以后可用)
自定义通知
清除通知

2.主要代码

package demo.xzy.qh.com.notificationdemo;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.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.RemoteViews;/** * 通知的用法 */public class MainActivity extends Activity implements View.OnClickListener {    private static final int NOTIFICATION_FLAG = 1;    private Button mButton1, mButton2, mButton3, mButton4, mButton5;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initListener();    }    private void initView() {        mButton1 = (Button) findViewById(R.id.btn1);        mButton2 = (Button) findViewById(R.id.btn2);        mButton3 = (Button) findViewById(R.id.btn3);        mButton4 = (Button) findViewById(R.id.btn4);        mButton5 = (Button) findViewById(R.id.btn5);    }    private void initListener() {        mButton1.setOnClickListener(this);        mButton2.setOnClickListener(this);        mButton3.setOnClickListener(this);        mButton4.setOnClickListener(this);        mButton5.setOnClickListener(this);    }    @Override    public void onClick(View v) {        /**         * 在Android进行通知处理,首先需要从系统那里获得通知管理器NotificationManager,它是一个系统Service         * */        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);        switch (v.getId()) {            /**             *默认通知,已经废弃,但是通用             *             * **/            case R.id.btn1:                /**                 *                 * 创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条触发的activity,                 * 所以采用的是PendingIntent,即点击Notification跳转启动到那个Activity                 */                PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,                        new Intent(this, MainActivity.class), 0);                /**                 *                 * 下面需兼容Android 2.x版本时的处理方式:                 * Notification notify1 =                 * new Notification(R.drawable.message,TickerText:" + "您有新短消息,请注意查收!", System.currentTimeMillis());                 */                Notification notify1 = new Notification();                notify1.icon = R.mipmap.ic_launcher;                notify1.tickerText = "TickerText:您有新短消息,请注意查收!";                notify1.when = System.currentTimeMillis();                /**                 * compileSdkVersion <=22时可用,compileSdkVersion>=23时此方法被remove                 * */                notify1.setLatestEventInfo(this, "Notification Title",                        "This is the notification message", pendingIntent);                /**                 *设置右下角角标数字                 * */                notify1.number = 1;                /**                 * FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。                 * */                notify1.flags |= Notification.FLAG_AUTO_CANCEL;                /**                 * 通过通知管理器来发起通知。如果id不同,则每click,在statu那里增加一个提示                 * */                manager.notify(NOTIFICATION_FLAG, notify1);                break;            /**             * 默认通知 API11级之后可用             * */            case R.id.btn2:                PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 0,                        new Intent(this, MainActivity.class), 0);                /**                 * 通过Notification.Builder来创建通知,注意API Level API11之后才支持                 * **/                Notification notify2 = new Notification.Builder(this)                        /**                         * 设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,                         * 如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap/icon)                         * */                        .setSmallIcon(R.mipmap.ic_launcher)                        /**                         * 设置在statusbar上显示的提示文字                         *                         * **/                        .setTicker("TickerText:" + "您有新短消息,请注意查收!")//                        /**                         *                         * 设置在下拉statusbar后Activity,本例子中的NotififyMessage的TextView中显示的标题                         * */                        .setContentTitle("Notification Title")                        /**                         * TextView中显示的详细内容                         * */                        .setContentText("This is the notification message")                        /**                         * 关联PendingIntent                         * */                        .setContentIntent(pendingIntent2)                        /**                         * 在TextView的右方显示的数字,可放大图片看,在最右侧。                         * 这个number同时也起到一个序列号的作用,如果多个触发多个通知(同一ID),可以指定显示哪一个。                         * */                        .setNumber(1)                        /**                         * 需要注意build()是在API level                         * 16级之后增加的,在API11中可以使用getNotificatin()来代替                         * **/                        .getNotification();                notify2.flags |= Notification.FLAG_AUTO_CANCEL;                manager.notify(NOTIFICATION_FLAG, notify2);                break;            /**             * 默认通知 API16级之后可用             * */            case R.id.btn3:                PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 0,                        new Intent(this, MainActivity.class), 0);                /**                 * 通过Notification.Builder来创建通知,注意API Level API16之后才支持                 * **/                Notification notify3 = new Notification.Builder(this)                        .setSmallIcon(R.mipmap.ic_launcher)                        .setTicker("TickerText:" + "您有新短消息,请注意查收!")                        .setContentTitle("Notification Title")                        .setContentText("This is the notification message")                        /**                         * 需要注意build()是在API level16及之后增加的,API11可以使用getNotificatin()来替代                         * **/                        .setContentIntent(pendingIntent3).setNumber(1).build();                /**                 * FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。                 * **/                notify3.flags |= Notification.FLAG_AUTO_CANCEL;                /**                 * 步骤4:通过通知管理器来发起通知。如果id不同,则每click,在status状态栏那里增加一个提示                 * **/                manager.notify(NOTIFICATION_FLAG, notify3);                break;            /**             * 自定义通知             * **/            case R.id.btn4:                /**                 *                 * Notification myNotify = new Notification(R.drawable.message,                 * "自定义通知:您有新短信息了,请注意查收!", System.currentTimeMillis());                 * **/                Notification myNotify = new Notification();                myNotify.icon = R.mipmap.ic_launcher;                myNotify.tickerText = "TickerText:您有新短消息,请注意查收!";                myNotify.when = System.currentTimeMillis();                /**                 * 不能够自动清除                 * */                myNotify.flags = Notification.FLAG_NO_CLEAR;                RemoteViews rv = new RemoteViews(getPackageName(),                        R.layout.my_notification);                rv.setTextViewText(R.id.text_content, "hello wrold!");                myNotify.contentView = rv;                Intent intent = new Intent(Intent.ACTION_MAIN);                PendingIntent contentIntent = PendingIntent.getActivity(this, 1,                        intent, PendingIntent.FLAG_ONE_SHOT);                myNotify.contentIntent = contentIntent;                manager.notify(NOTIFICATION_FLAG, myNotify);                break;            /**             *             * 清除通知             * **/            case R.id.btn5:                /**                 *                 * 清除id为NOTIFICATION_FLAG的通知                 * */                manager.cancel(NOTIFICATION_FLAG);                /**                 * 清除所有的通知                 * */                //manager.cancelAll();                break;            default:                break;        }    }}

其中主布局中为线性布局,包含5个按钮,自定义通知的布局仅为测试使用,也比较简单,为线性布局中包含一个TextView
自定义通知布局为my_notification.xml,根据实际情况自行拓展即可
<?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="wrap_content"              android:background="#ffffff"              android:orientation="vertical" >    <TextView        android:id="@+id/text_content"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="20sp" /></LinearLayout>

3.参考

参考博文http://blog.csdn.net/loongggdroid/article/details/17616509
并修正和完善了部分注释,使得阅读起来更加流畅。


原创粉丝点击