Notification和NotificationManager操作相对比较简单,一般获取系统级的服务NotificationManager,然后实例化Notification,设置它的属性,通过NotificationManager发出通知就可以了。基本步骤如下:
1.获取NotificationManager
String service = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager =(NotificationManager)getSystemService(service);
2.实例化Notification对象
- //实例化Notification
- Notification notification = new Notification();
3.设置Notification的属性
- // 设置显示图标,该图标会在状态栏显示
- int icon = notification.icon = R.drawable.happy;
- // 设置显示提示信息,该信息也在状态栏显示
- String tickerText = "测试Notification";
- // 显示时间
- long when = System.currentTimeMillis(); notification.icon = icon;
- notification.tickerText = tickerText;
- notification.when = when;
- //也可以这样设置
- Notification notification_2=new Notification(icon,tickerText,when)
调用setLatestEventInfo()方法在视图中设置图标和时间。
- // 实例化Intent
- Intent intent = new Intent(MainActivity.this, MainActivity.class);
- // 获得PendingIntent
- PendingIntent pIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
- // 设置事件信息
- notification.setLatestEventInfo(MainActivity.this, " Title", "Content", pIntent);
4.发出通知
- //Notification标示ID
- private static final int ID = 1;
- //发出通知
- mNotificationManager.notify(ID, n);
下面是具体的例子,在这个例子里定义了一个MainActivity发出广播通知,定义一个MyReceiver类继承Broadcasts接受通知,当接收完通知之后,启动一个SecondActivity,在SecondActivity类中通过Notification和NotificationManager来可视化显示广播通知。具体的步骤如下:
MainActivity.java
- package com.android.notification;
- import android.app.Activity;
- 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 {
- // 声明Button
- private Button btn;
- // 定义Broadcast Receiver action
- private static final String MY_ACTION = "com.android.notification.MY_ACTION";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // 设置当前布局视图
- setContentView(R.layout.main);
- // 实例化Button
- btn = (Button)findViewById(R.id.Button1);
- // 添加事件监听器
- btn.setOnClickListener(listener);
- }
- // 创建事件监听器
- private OnClickListener listener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- // 实例化Intent
- Intent intent = new Intent();
- // 设置Intent action属性
- intent.setAction(MY_ACTION);
- // 发起广播
- sendBroadcast(intent);
- }
- };
- }
MyReceiver.java
- package com.android.notification;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- public class MyReceiver extends BroadcastReceiver{
- @Override
- public void onReceive(Context context, Intent intent) {
- // 实例化Intent
- Intent i = new Intent();
- // 在新的任务中启动Activity
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- // 设置Intent启动的组件名称
- i.setClass(context, SecondActivity.class);
- // 启动Activity显示通知
- context.startActivity(i);
- }
- }
SecondActivity.java
- package com.android.notification;
- 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 SecondActivity extends Activity {
- // 声明按钮
- private Button cancelBtn;
- // 声明Notification
- private Notification notification ;
- // 声明NotificationManager
- private NotificationManager mNotification;
- // Notification标示ID
- private static final int ID = 1;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.second);
- // 实例化按钮
- cancelBtn = (Button)findViewById(R.id.cancelButton2);
- // 获得NotificationManager实例
- String service = NOTIFICATION_SERVICE;
- mNotification = (NotificationManager)getSystemService(service);
- // 实例化Notification
- notification = new Notification();
- // 设置显示图标,该图标会在状态栏显示
- int icon = notification.icon = android.R.drawable.stat_notify_chat;
- // 设置显示提示信息,该信息也会在状态栏显示
- String tickerText = "Test Notification";
- // 显示时间
- long when = System.currentTimeMillis();
- notification.icon = icon;
- notification.tickerText = tickerText;
- notification.when = when;
- // 实例化Intent
- Intent intent = new Intent(this, MainActivity.class);
- // 获得PendingIntent
- PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
- // 设置事件信息
- notification.setLatestEventInfo(this, "消息", "Hello Android", pi);
- // 发出通知
- mNotification.notify(ID, notification);
- // 为按钮添加监听器
- cancelBtn.setOnClickListener(cancelListener);
- }
- // 取消通知监听器
- private OnClickListener cancelListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- // 取消通知
- mNotification.cancel(ID);
- }
- };
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:text="发出广播通知"
- android:id="@+id/Button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
second.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:text="显示通知界面"
- android:id="@+id/TextView1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- <Button
- android:text="取消通知"
- android:id="@+id/cancelButton2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
在AndroidManifest.xml文件中16~21加入对receiver,SecondActivity的声明
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.notification"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="10" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name="MyReceiver">
- <intent-filter>
- <action android:name="com.android.notification.MY_ACTION"/>
- </intent-filter>
- </receiver>
- <activity android:name="SecondActivity"/>
- </application>
- </manifest>
效果图:
Notification丰富的提示方式:
声音提醒
·使用默认声音
notification.defaults |= Notification.DEFAULT_SOUND;
·使用自定义声音
notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
·注:如果定义了默认声音,那么自定义声音将被覆盖
振动提醒
·使用默认振动
notification.defaults |= Notification.DEFAULT_VIBRATE;
·使用自定义振动
long[] vibrate = {0,100,200,300};
notification.vibrate = vibrate;
·注:如果定义了默认振动,那么自定义振动将被覆盖
灯光闪烁提醒
·使用默认闪烁
notification.defaults |= Notification.DEFAULT_LIGHTS;
·使用自定义闪烁
notification.ledARGB = 0xff00ff00; // LED灯的颜色,绿灯
notification.ledOnMS = 300; // LED灯显示的毫秒数,300毫秒
notification.ledOffMS = 1000; // LED灯关闭的毫秒数,1000毫秒
notification.flags |= Notification.FLAG_SHOW_LIGHTS; // 必须加上这个标志