Notification使用说明

来源:互联网 发布:修正主义 知乎 编辑:程序博客网 时间:2024/06/03 15:56

参考

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

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

各属性对应的位置

        下面的截图是在6.0的模拟器上运行的结果

        其中左边大图为largeIcon,其右下角的灰块中显示的是smallIcon。

通过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() {@Overridepublic 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);//设置通知的显示viewnew 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;//点击通知时调用的intentIntent 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来完成点击事件。

常见问题

        1,有些时候smallIcon无效,可能原因是图片太大,换成32*32的就可以了。但魅族除外。

        2,在5.0以上的系统中,smallIcon会被系统转换成白色,无论是什么颜色。因此,为防止成为一个白色方块,在设计smallIcon时,应该使用白色和透明。




0 0
原创粉丝点击