目录
public void sendNotification(Context ctx, String message) { // get the notification manager String str = Context.NOTIFICATION_SERVICE; NotificationManager nm = (NotificationManager) ctx.getSystemService(str);
// create notification object includes icon ,text ,the time to send int icon = R.drawable.ic_launcher; CharSequence tickerText = "hello"; long when = System.currentTimeMillis();// return the system current time // in milliseconds since 1970
Notification notification = new Notification(icon, tickerText, when);
// set contextView by using setLastestEventInfo Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("")); PendingIntent pi = PendingIntent.getActivity(ctx, 0, intent, 0);// explain // it // below notification.setLatestEventInfo(ctx, "title", "text", pi);
// send notification nm.notify(1, notification);// 通知加入状态栏,标记为id=1 }// above all is how to use Notification
个人水平有限,接触到的暂时是这么多,因此当我系统了解完了之后会对此做一个补充
Notification 的使用需要以上四个步骤。
简单的说PendingIntent.getActivity()就是即将发生的intent.
PendingIntent.getActivity(ctx,o,intent,o)官方文档是这样解释的:
public static getActivity ( context, int requestCode, intent, int flags)
Retrieve a PendingIntent that will start a new activity, like calling . Note that the activity will be started outside of the context of an existing activity, so you must use the
launch flag in the Intent.
Parameters
context | The Context in which this PendingIntent should start the activity. |
---|---|
requestCode | Private request code for the sender (currently not used). 现在不使用了 |
intent | Intent of the activity to be launched. |
flags | May be , , , , or any of the flags as supported by to control which unspecified parts of the intent that can be supplied when the actual send happens. |
Returns
- Returns an existing or new PendingIntent matching the given parameters. May return null only if
has been supplied.
一下摘自一个人的博客,只是比官方文档好理解点:
下面来谈谈notification,这个notification一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个快讯,这时手从上方滑动状态栏就可以展开并处理这个快讯。发现这个功能特别好用,所以我就根据我的理解来谈谈。摘自帮助文档 : notification类表示一个持久的通知,将提交给用户使用NotificationManager。已添加的Notification.Builder,使其更容易构建通知。notification是一种让你的应用程序在没有开启情况下或在后台运行警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。
先来区分以下状态栏和状态条的区别:
1、状态条就是手机屏幕最上方的一个条形状的区域;
在状态条有好多信息量:比如usb连接图标,手机信号图标,电池电量图标,时间图标等等;
2、状态栏就是手从状态条滑下来的可以伸缩的view;
在状态栏中一般有两类(使用FLAG_标记):
(1)正在进行的程序;
(2)是通知事件;
大概来描述创建一个Notification传送的信息有:
1、一个状态条图标;
2、在拉伸的状态栏窗口中显示带有大标题,小标题,图标的信息,并且有处理该点击事件:比如调用该程序的入口类;
3、闪光,LED,或者震动;
快速创建一个Notification的步骤简单可以分为以下四步:
第一步:通过getSystemService()方法得到NotificationManager对象;
第二步:对Notification的一些属性进行设置比如:内容,图标,标题,相应notification的动作进行处理等等;
第三步:通过NotificationManager对象的notify()方法来执行一个notification的快讯;
第四步:通过NotificationManager对象的cancel()方法来取消一个notificatioin的快讯;
下面对Notification类中的一些常量,字段,方法简单介绍一下:
常量:
DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等等
DEFAULT_LIGHTS 使用默认闪光提示
DEFAULT_SOUNDS 使用默认提示声音
DEFAULT_VIBRATE 使用默认手机震动
【说明】:加入手机震动,一定要在manifest.xml中加入权限:
<uses-permission android:name="android.permission.VIBRATE" />
以上的效果常量可以叠加,即通过
mNotifaction.defaults =DEFAULT_SOUND | DEFAULT_VIBRATE ;
或mNotifaction.defaults |=DEFAULT_SOUND (最好在真机上测试,震动效果模拟器上没有)
//设置flag位
FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
FLAG_NO_CLEAR 该通知能被状态栏的清除按钮给清除掉
FLAG_ONGOING_EVENT 通知放置在正在运行
FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应
常用字段:
contentIntent 设置PendingIntent对象,点击时发送该Intent
defaults 添加默认效果
flags 设置flag位,例如FLAG_NO_CLEAR等
icon 设置图标
sound 设置声音
tickerText 显示在状态栏中的文字
when 发送此通知的时间戳
Notification.build构造Notification方法介绍:
void setLatestEventInfo(Context context , CharSequencecontentTitle,CharSequence contentText,PendingIntent contentIntent)
功能: 显示在拉伸状态栏中的Notification属性,点击后将发送PendingIntent对象
参数: context 上下文环境
contentTitle 状态栏中的大标题
contentText 状态栏中的小标题
contentIntent 点击后将发送PendingIntent对象
说明:要是在Notification中加入图标,在状态栏和状态条中显示图标一定要用这个方法,否则报错!
最后说一下NotificationManager类的常用方法:
通过获取系统服务来获取该对象:
NotificationManager mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE) ;
NotificationManager常用方法介绍:
public void cancelAll() 移除所有通知 (只是针对当前Context下的Notification)
public void cancel(int id) 移除标记为id的通知 (只是针对当前Context下的所有Notification)
public voidnotify(String tag ,int id, Notification notification) 将通知加入状态栏, 标签为tag,标记为id
public void notify(int id, Notification notification) 将通知加入状态栏,,标记为id
首先,我感觉在实现中PendingIntent感觉就是Intent的包装。
它的三个实例化方法:
getActivity(Context, int, Intent, int)
getService(Context, int, Intent, int)
getBroadcast(Context, int, Intent, int)
感觉是保存当前的Activity的Context,然后在外部启动Intent动作。类似于代码Context.startActivity(*, *);
常和Notification和Alarm一起使用。
代码例子:
public class BannerActivity extends Activity {
private Button button;
private NotificationManager mNotificationManager;
private Intent intent;
private PendingIntent mPendingIntent;
private Notification mNotification;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
button = (Button)this.findViewById(R.id.b);
intent = new Intent(BannerActivity.this, BaseActivity.class);
mPendingIntent = PendingIntent.getActivity(BannerActivity.this, 0, intent, Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
mNotification = new Notification();
button.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mNotification.icon = R.drawable.ic_launcher;
mNotification.tickerText = "通知!"; //通知在通知栏出现的时候的标题
mNotification.defaults = Notification.DEFAULT_SOUND;
// 第二个参数是打开通知栏后的标题, 第三个参数是通知内容
mNotification.setLatestEventInfo(BannerActivity.this, "通知?", "通知内容!", mPendingIntent);
mNotificationManager.notify(0, mNotification);
}
});
}
}