Broadcast Receiver组件并没有提供可视化界面来显示广播信息,而Notifaction和NotifactionManager可以实现可视化的信息显示,通过它们可以显示广播信息的内容以及图标和震动等信息(在状态栏上)
NotificationManager:是状态栏通知的管理类,负责发通知、清楚通知等。
NotificationManager是一个系统Service,必须通过getSystemService()方法来获取。
NotificationManager nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification:是具体的状态栏通知对象,可以设置icon、文字、提示声音、振动等等参数。
1 package com.example.day21_01notification; 2 3 import android.app.Activity; 4 import android.app.Notification; 5 import android.app.NotificationManager; 6 import android.app.PendingIntent; 7 import android.content.Intent; 8 import android.os.Bundle; 9 import android.view.View; 10 11 public class MainActivity extends Activity { 12 13 private NotificationManager nm; 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 } 19 20 public void show_notification(View v){ 21 nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 22 //构建一个通知 23 Notification notification = new Notification( 24 R.drawable.ic_launcher, // 通知栏的图标 25 "新天气预报到来", // 通知的内容 tickerText 显示在状态栏 26 System.currentTimeMillis()); // 通知的时间 27 28 Intent intent = new Intent(); 29 intent.setAction("com.cskaoyan.moji"); 30 31 PendingIntent pendingIntent = PendingIntent.getActivity(this, 100, intent, Notification.FLAG_AUTO_CANCEL); 32 33 //注意,不设置setLatestEventInfo就直接调用notify系统会报错,因为很多参数都没有初始化。 34 notification.setLatestEventInfo(this, 35 "暴雨警报", //显示在下拉的状态栏里面 (通知的上面) 36 "今天14:00深圳市发布暴雨红色预警,建议学校停课,工厂停工。", //显示在下拉的状态栏里面 (通知的正文) 37 pendingIntent); 38 39 //可以设置是否有声音 是否震动 是否闪灯 40 notification.defaults=Notification.DEFAULT_SOUND; 41 42 //用户无法手动清除,可以使用代码在你的应用内清除 43 //notification.flags = Notification.FLAG_NO_CLEAR; 44 notification.flags = Notification.FLAG_FOREGROUND_SERVICE; 45 nm.notify(10, notification); //使用nm来显示通知 46 47 } 48 49 public void cancle_notification(View v){ 50 nm.cancel(10); //清除你的通知 51 } 52 53 /** 54 * 新版GOOGle建议的notification使用方式 55 * @param v 56 */ 57 public void show_notification2(View v){ 58 nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 59 Intent intent = new Intent(); 60 intent.setAction("com.cskaoyan.moji"); 61 PendingIntent pendingIntent = PendingIntent.getActivity(this, 100, intent, Notification.FLAG_AUTO_CANCEL); 62 63 Notification noti = new Notification.Builder(this) 64 .setContentTitle("凤姐" ) 65 .setContentText("今晚一起吃饭?") 66 .setSmallIcon(R.drawable.qq) 67 .setTicker("你有新消息") 68 .setContentIntent(pendingIntent) 69 .build(); 70 nm.notify(11, noti); 71 } 72 73 public void cancle_notification2(View v){ 74 nm.cancel(11); 75 //清除你的通知 76 } 77 }
1 package com.example.day21_01notification; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.TextView; 6 7 public class SecondActivity extends Activity { 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 // TODO Auto-generated method stub 12 super.onCreate(savedInstanceState); 13 TextView tv = new TextView(this); 14 tv.setText("我是墨迹天气的页面。欢迎过来看天气!"); 15 setContentView(tv); 16 } 17 }
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.day21_01notification" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="16" 9 android:targetSdkVersion="21" /> 10 11 <application 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity 17 android:name=".MainActivity" 18 android:label="@string/app_name" > 19 <intent-filter> 20 <action android:name="android.intent.action.MAIN" /> 21 22 <category android:name="android.intent.category.LAUNCHER" /> 23 </intent-filter> 24 </activity> 25 <activity android:name=".SecondActivity"> 26 <intent-filter > 27 <action android:name="com.cskaoyan.moji"/> 28 <category android:name="android.intent.category.DEFAULT"/> 29 </intent-filter> 30 31 </activity> 32 </application> 33 34 </manifest>
AndroidManifest中注册SecondActivity
1 <activity android:name=".SecondActivity"> 2 <intent-filter > 3 <action android:name="com.cskaoyan.moji"/> 4 <category android:name="android.intent.category.DEFAULT"/> 5 </intent-filter> 6 7 </activity>
当点击“显示通知2”,状态栏会有“你有新消息”提醒,如下图:
点击“显示通知”和“显示通知2”后,在下拉菜单可以看到2条通知。
点击任意一个通知,页面变跳转到如下界面。