Android应用开发学习之状态栏通知

作者:刘昊昱 

博客:http://blog.csdn.net/liuhaoyutz

 

状态栏通知涉及到两个类,一是Notification,它代表一个通知;另一个是NotificationManager,它是用于发送Notification的系统服务。

使用状态栏通知一般有4个步骤:

1、  通过getSystemService()方法获取NotificationManager服务。

2、  创建一个Notification对象,并为其设置各种属性。

3、  Notification对象设置事件信息。

4、  通过NotificationManager类的notify()方法将通知发送到状态栏。

下面我们来看一个例子,其运行效果如下所示:

主布局文件main.xml只是放置两个按钮,其内容如下所示:

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

    <Button
        android:id="@+id/button1"
        android:text="发送消息"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button2"
        android:text="清空消息"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>


下面看主Activity文件,其内容如下所示:

package com.liuhaoyu;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	final int NOTIFYID_1 = 123;	//第一个通知的ID
	final int NOTIFYID_2 = 124;	//第二个通知的ID
	
	
    /** Called when the activity is first created. */	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        
        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {

				Notification notify = new Notification();
				notify.icon = R.drawable.image01;
				notify.tickerText = "有新通知啦!";
				notify.when = System.currentTimeMillis();
				notify.defaults = Notification.DEFAULT_ALL;
				notify.setLatestEventInfo(MainActivity.this, "通知1", "周六下午5点打篮球", null);
				notificationManager.notify(NOTIFYID_1, notify);

				Notification notify1 = new Notification(R.drawable.image01,	"哈哈,又有新通知了", System.currentTimeMillis());
				notify1.flags|=Notification.FLAG_AUTO_CANCEL;
				Intent intent=new Intent(MainActivity.this,ContentActivity.class);
				PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
				notify1.setLatestEventInfo(MainActivity.this, "通知2",
						"点击查看详情", pendingIntent);
				notificationManager.notify(NOTIFYID_2, notify1);
			}
		});
        
        Button button2 = (Button) findViewById(R.id.button2);
		button2.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
//				notificationManager.cancel(NOTIFYID_1);	//清除ID号为常量NOTIFYID_1的通知
				notificationManager.cancelAll();	//清除全部通知

			}
		});
    }
}


当点击第一个按钮时,发送两个通知,第一个直接显示通知内容,第二个通过启动另外一个Activity ContentActivity来显示通知内容。

当点击第二个按钮时,清空所有通知,也可以删除指定ID号的通知。

因为第一个通知设置使用默认声音、默认振动及默认闪光灯,即程序需要访问系统闪光灯资源和振动器,所以我们需要在AndroidManifest.xml文件中声明使用权限,加上如下语句:

    <uses-permission android:name="android.permission.FLASHLIGHT"/>
    <uses-permission android:name="android.permission.VIBRATE"/>


因为第二个通知要启动另外一个Activity来显示通知内容,所以我们也要在AndroidManifest.xml文件中声明这个Activity,加入如下语句:

        <activity
            android:label="通知"
            android:name=".ContentActivity"
            android:theme="@android:style/Theme.Dialog" />


通知2调用的活动ContentActivity比较简单,仅仅是显示一条通知,但注意我们通过在AndroidManifest.xml中的android:theme="@android:style/Theme.Dialog"指定它为对话框的形式。该活动实现如下:

package com.liuhaoyu;

import android.app.Activity;
import android.os.Bundle;

public class ContentActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.content);
	}

}


其布局文件内容如下:

<?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="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="周日下午5点打羽毛球"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>


原文地址:https://www.cnblogs.com/riskyer/p/3241391.html