前一篇中,使用Notification和NotificationManager来显示通知,
这里,是用Notification和NotificationManager BroadCast Receiver
定义一个MainActivity发出广播,定义一个MyReceiver接收广播,当接收到广播后启动另一个DisplayActivity,该类中通过Notification和NotificationManager来可视化显示广播通知
MainActivity.java
- private Button btn_send;
- //定义Broadcast Receiver action
- private static final String MY_ACTION="com.ex.action.MY_ACTION";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn_send=(Button)findViewById(R.id.btnsend);
- btn_send.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Intent intent = new Intent();
- intent.setAction(MY_ACTION);
- sendBroadcast(intent);
- }
- });
- }
main.xml
- <Button
- android:id="@+id/btnsend"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="发出广播"
- />
MyReceiver.java
- package com.ex;
- 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) {
- // TODO Auto-generated method stub
- Intent i = new Intent();
- //在新的任务中启动Activity
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- //设置Intent组件的名称
- i.setClass(context,DisplayActivity.class);
- //启动Activity显示通知
- context.startActivity(i);
- }
- }
DisplayActivity.java
- package com.ex;
- 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 DisplayActivity extends Activity {
- private Button btn_cancel;
- private Notification n;//声明Notification
- private NotificationManager nm;//声明NotificationManager
- private static final int ID=1;//Notification标识ID
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main2);
- //获得NotificationManager实例
- nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
- //实例化Notification
- // n = new Notification();
- //设置显示图标,该图标会在状态栏显示
- int icon = R.drawable.notification;
- //设置显示提示信息,也会在状态栏显示
- String tickerText = "Text Notification";
- //显示时间
- long when = System.currentTimeMillis();
- /*n.icon=icon;
- n.tickerText=tickerText;
- n.when = when;*/
- n = new Notification(icon,tickerText,when);//这句是设置了显示图标,提示信息,时间
- Intent intent = new Intent(this,MainActivity.class);
- PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
- n.setLatestEventInfo(this, "My Title", "My Content", pi);//设置事件信息
- nm.notify(ID,n);//发出通知
- btn_cancel = (Button)findViewById(R.id.btncancel);
- btn_cancel.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- nm.cancel(ID);
- }
- });
- }
- }
main2.xml
- <Button
- android:id="@+id/btncancel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="取消通知"
- />
AndroidManifest.xml
- <activity android:name=".DisplayActivity"
- android:label="@string/app_name">
- <intent-filter>
- </intent-filter>
- </activity>
- <service android:name="MYReceiver">
- <intent-filter>
- <action android:name="com.ex.action.MY_ACTION" />
- </intent-filter>
- </service>
总结:
对获得通知的过程
首先,//获得NotificationManager实例
nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
其次,对状态栏的属性设置,即发出通知的一些属性,可以有两种方式,
一种是
- //实例化Notification
- n = new Notification();
- //设置显示图标,该图标会在状态栏显示
- int icon = n.icon=R.drawable.notification;
- //设置显示提示信息,也会在状态栏显示
- String tickerText = "Text Notification";
- //显示时间
- long when = System.currentTimeMillis();
- n.icon=icon;
- n.tickerText=tickerText;
- n.when = when;
第二种是
- //设置显示图标,该图标会在状态栏显示
- int icon =R.drawable.notification;
- //设置显示提示信息,也会在状态栏显示
- String tickerText = "Text Notification";
- //显示时间
- long when = System.currentTimeMillis(); n = new Notification(icon,tickerText,when);//这句是设置了显示图标,提示信息,时间
最后,
- Intent intent = new Intent(this,MainActivity.class);
- PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
- n.setLatestEventInfo(this, "My Title", "My Content", pi);//设置事件信息
- nm.notify(ID,n);//发出通知