Notification使用说明

参考

        http://www.cnblogs.com/plokmju/p/android_Notification.html

        http://www.2cto.com/kf/201401/274525.html

通过Builder创建:

        与AlertDialog的创建一样,notification也可以通过内部类Builder来创建并设置其中的一些信息。但Notification必须通过系统服务NotificationManager来发送或者取消。如:

manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		Button gv_list = (Button) findViewById(R.id.btn_notify);
		gv_list.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Notification.Builder builder = new Notification.Builder(
						MainActivity.this);
				builder.setAutoCancel(true);
				// 接收后在状态栏上显示的内部(不下拉时显示的内部),如果内部过长,会自动进行翻滚播放
				builder.setTicker("你有一条未读通知");
				builder.setContentTitle("contentTitle").setContentText("contentText");
				builder.setSmallIcon(R.drawable.emoji_1f601);// 有两个用处:未下拉时显示的图标,下拉后显示的小图标
				builder.setLargeIcon(BitmapFactory.decodeResource(
						getResources(), R.drawable.ic_launcher));
				builder.setContentInfo("contentInfo");
				builder.setNumber(2);//设置该通知的个数。
				builder.setWhen(System.currentTimeMillis()-1000*60*10);//设置通知的时间
				//设置点击通知时要执行的Activity,此处是打开系统图库
				Intent in = new Intent();
				in.setAction(Intent.ACTION_PICK);
				in.setType("image/*");
				PendingIntent intent = PendingIntent.getActivity(
						getApplicationContext(), 0, in,
						PendingIntent.FLAG_UPDATE_CURRENT);
				builder.setContentIntent(intent);
				Notification build = builder.build();
				manager.notify(0, build);//发送通知
			}

        注意:必须要调用的三个方法是:setSmallIcon(),setContentTitle()与setContentText()

带进度条

       只需要调用builder.setProgress()即可。如:

new Thread(new Runnable() {
					@Override
					public void run() {
						int incr;
						for (incr = 0; incr <= 100; incr += 5) {
							builder.setProgress(100, incr, false);
							manager.notify(0, builder.build());
							try {
								Thread.sleep(300);
							} catch (InterruptedException e) {
							}
						}
						builder.setContentText("完成")
								.setProgress(0, 0, false);
						manager.notify(0, builder.build());//把notification的id设置成一样的,这样就可以进行更新
					}
				}).start();

        上面使用的是系统自带的带进度条的notification,也可以自定义一个,代码如下:

final RemoteViews views = new RemoteViews(getPackageName(), R.layout.second);
				builder.setContent(views);//设置通知的显示view
				new Thread(new Runnable() {
					public void run() {
						int incr;
						for (incr = 0; incr <= 100; incr += 5) {
							views.setProgressBar(R.id.progressbar, 100, incr, false);
							manager.notify(0, builder.build());//一定要调用这个方法,不然不会出现进度条更新
							try {
								Thread.sleep(300);
							} catch (InterruptedException e) {
							}
						}
						views.setTextViewText(R.id.tv, "下载完成");
						manager.notify(0, builder.build());
					}
				}).start();

直接通过notification设置

            通过Builder设置的话,需要的版本比较高。如果要兼容低版本就需要通过Notification自身的一些属性进行设置。如:

				Notification n = new Notification();
				n.icon = R.drawable.ic_launcher;//状态栏上的图标
				n.tickerText = "您有新的反馈信息";//状态栏上的提示文字
				n.when = SystemClock.elapsedRealtime();//发送通知的时间
				n.flags = Notification.FLAG_AUTO_CANCEL;
				//下拉后显示的样子
				RemoteViews view = new RemoteViews(getPackageName(),
						R.layout.main);
				view.setTextViewText(R.id.tv1, "这是test");//为布局中的textview设置文字
				//为布局中的iamgeview设置图片
				view.setImageViewResource(R.id.iv, R.drawable.ic_launcher);
				n.contentView = view;
				//点击通知时调用的intent
				Intent intent = new Intent(MainActivity.this,
						SecondActivity.class);
				intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
				intent.putExtra("id", ++i);
				//加上action是为了区别不能的intent,从而可以使不同的通知打开同一个界面
				intent.setAction("action"+i);
				PendingIntent pIntent = PendingIntent.getActivity(
						MainActivity.this, 200, intent,
						PendingIntent.FLAG_ONE_SHOT);
				n.contentIntent = pIntent;
				nm.notify(i, n);
			
       上述是一些基本的设置,还可以设置声音、振动以及呼吸灯等。

声音

        使用默认声音时只需要设置

n.defaults = Notification.DEFAULT_SOUND;
         使用自定义声音:
n.sound = Uri.fromFile(tipFile);//使用项目中指定的声音
        当然也可以使用系统本身就带有的:
n.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "1");
        默认时,通知的声音播放一遍就结束。如果让声音循环播放,需要为flags参数加上FLAG_INSISTENT。这样声音会到用户响应才结束。

振动

        默认的:

n.defaults = Notification.DEFAULT_VIBRATE;
        自定义的:
long[] vibrate = {0,200,100,400};
				n.vibrate = vibrate ;

呼吸灯

        使用灯的时候,flags必须有Notification.FLAG_SHOW_LIGHTS.

       默认的:

n.defaults = Notification.DEFAULT_LIGHTS;
      自定义:
n.ledARGB = 0x0afaade9;
				n.ledOffMS = 100;
				n.ledOnMS = 100;

点击

        处于状态栏中的notification是可以处理点击事件的。只要调用RemoteViews.setOnClickPendingIntent()即可。如:

Intent ci = new Intent(MainActivity.this, TestService.class);
PendingIntent cpi = PendingIntent.getService(MainActivity.this,
		0, ci, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.mid_left, cpi);//第1个参数指的是点击的view的id,第二个参数指点击时的操作
        由于点击时要指定一个PendingIntent,因为可以通过启动一个Service或者Activity来完成点击事件。




你可能感兴趣的:(Notification使用说明)