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

作者:刘昊昱 

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

 

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

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

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

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

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

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

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

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

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

 

主布局文件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>


 

你可能感兴趣的:(android)