我们已有的应用,都将Android通知栏作为“传统的通知”用途,比如短信,微信,QQ都在这样使用。不过,同样的区域,也有创新的使用方式,比如最早的音乐播放控制,现在的360智键,百度搜索都开始占领通知栏,作为其应用的快捷入口,见附后图。
从移动应用的成功程度评价,“占领手机的前三屏”,到现在安装了大量应用App后,其实除了常用的几个,其余都在沉睡冰藏,很难主动想起去“找到-点击”的使用过程。
不过,Android3.0以后,有了Ongoing(运行中),可以从技术角度占领用户手机的最快捷入口,实现“0号首页”。作为娱乐工具型应用,SoLoMo的签到(Checkin),LBS类查询,个人记账,还可以提供“富功能方式”的通知提醒和通知提醒的后向操作,一些快捷工具操作。作为企业应用,工单提醒和快捷操作,考勤签到等。
当然,使用这种“占领并强滞留”的方式,首先要保证自己的应用“可用、好用”,或者是工作/企业应用的“必须使用”,否则被人讨厌的流氓类应用去占领就适得其反,让人更快速下载了。
技术实现
Android在新版的通知提醒服务中,增加了Ongoing选项,Notification.FLAG_ONGOING_EVENT,实现“在运行”的通知提醒,也就是可以常驻在通知栏,实现“永远的通知”,并在通知上附加其它操作。
关于“其它操作”,作为信息系统常用的按钮、文本、图片、列表等都可以添加展示。使用RemoteViews机制在“0号首页”区域实现自定义的视图。
Notification的自定义布局是RemoteViews,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件,不支持这些类的子类或Android提供的其他控件。
同时,Notification可以组合使用声音、三色灯、振动和屏幕提醒,实现更好的用户体验。
一个参考样例,代码:
public void addOngoingNotify(){NotificationCompat.Builder mBuilder = new Builder(this);RemoteViews mRemoteViews = new RemoteViews(getPackageName(), R.layout.view_notify);
mRemoteViews.setImageViewResource(R.id.notify_ongoing_icon_1, R.drawable.notify_ongoing_icon_2); mRemoteViews.setTextViewText(R.id.txt_label, “远图未来”); mRemoteViews.setViewVisibility(R.id._notify_button, View.VISIBLE); mRemoteViews.setImageViewResource(R.id.btn_notify_1, R.drawable.btn_notify_2); //按钮动作处理 Intent buttonIntent = new Intent(ACTION_BUTTON); buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PREV_ID); PendingIntent intent_prev = PendingIntent.getBroadcast(this, 1, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT); mRemoteViews.setOnClickPendingIntent(R.id.btn_notify_1, intent_prev); mBuilder.setContent(mRemoteViews) .setContentIntent(getDefalutIntent(Notification.FLAG_ONGOING_EVENT)) .setSmallIcon(R.drawable.notify_ongoing_icon_2) .setPriority(Notification.PRIORITY_DEFAULT) .setWhen(System.currentTimeMillis()) .setTicker(“常驻通知@蓄丰实验舱”) .setOngoing(true); Notification notify = mBuilder.build(); notify.flags = Notification.FLAG_ONGOING_EVENT; mNotificationManager.notify(notifyId, notify); } |
设置振动:setVibrate(long[] pattern)
设置三色灯:setLights(intledARGB ,intledOnMS ,intledOffMS )
设置声音:setSound(Uri sound)
技术支持是基础的,应用场景是充满无限想象力的。从现有的技术解决方案,创新和设计出新的产品或应用方式,是我们最幸福的事。
本文地址,http://blog.xufun.cn/?p=660