Notification通知是在状态栏里显示的信息
一、Notification的实现:三步实现通知
1、定义通知:
Notification mNotification = new Notification(R.drawable.logo,"后台搜索中...",System.currentTimeMillis());
第一个参数代表图标、第二个参数代表提示的内容、第三个参数是指要显示的时间,一般是当即显示,故填入系统当前时间
2、从系统服务中获取通知管理器:
NotificationManager mNF = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
3、发送通知:
mNF.notify(R.string.app_name, mNotification);
第一个参数为通知的ID,第二个参数为要发送的通知
4、取消通知:一般在onDestroy()函数里取消
mNF.cancel(R.string.app_name);//根据通知的ID取消
二、复杂点的通知,可在通知里操作,发送广播:
1、定义通知:同上
2、定义一个要广播出去的意图intent:
Intent intent = new Intent(FILE_NOTIFICATION);//这个意图的action为FILE_NOTIFICATION
3、意图传递的参数
intent.putExtra("notification", "当通知还存在,说明搜索未完成,可以在这里触发一个事件,当点击通知回到Activity之后,可以弹出一个框,提示是否取消搜索!");
4、设置这个intent需要通过广播方式发送出去
PendingIntent mPI = PendingIntent.getBroadcast(this,0,intent,0);
5、设置通知列表里的显示情况,以及点击后将发送PendingIntent对象
mNotification.setLatestEventInfo(this, "在"+SearchBroadCast.mServiceSearchPath+"下搜索", "搜索关键字为"+SearchBroadCast.mServiceKeyword+"【点击可取消搜索】", mPI);
第一个参数:上下文;第二个参数:标题;第三个参数内容;第四个参数:点击后将发送的PendingIntent对象。】
6、发送通知:同上
通知里点击后的操作:
1、注册一个广播接收器:
IntentFilter mFilter = new IntentFilter();
mFilter.addAction(FileService.FILE_NOTIFICATION);//呵呵:这个同通知里的意图Intent的action是不是一致
FileBroadcast mFileBroadcast = new FileBroadcast();
this.registerReceiver(mFileBroadcast, mFilter);
2、在广播接收器里处理:
class FileBroadcast extends BroadcastReceiver
{
//该方法用于实现接收到广播的具体处理,其中参数intent:为接受到的intent
@Override
public void onReceive(Context context, Intent intent)
{
//获取意图的动作
mAction = intent.getAction();
if(FileService.FILE_NOTIFICATION.equals(mAction))
{//点击通知回到当前Activity,读取其中信息
String mNotification = intent.getStringExtra("notification");
//通过Toast把通知intent里的参数显示出来
Toast.makeText(MainActivity.this, mNotification, Toast.LENGTH_LONG).show();
//进行响应的处理
searchCompletedDialog("你确定要取消搜索吗?");
}
}
}
三、广播接收器可以动态注册如上,也可以在manifest注册文件里注册
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="ELITOR_CLOCK" />
</intent-filter>
</receiver>