通知栏launcher看视频说插件没反应点击没有反应

冷空气一路南下,大伙要注意防寒保暖,记得多喝热水哟。
今年的 MacBook Pro 内存大小不太让人满意,好不容易来了一次大更,却又留了些缺憾。...
尽管VR游戏和智能移动游戏是不同的领域,有不同的发展轨迹,但现在却无法避免地发生了“...
这一次的审核速度还是比较快的,你会买吗?
苹果表面上是在解决 OLED 的供货问题,但实际上是为了 iPhone 分出更多档次,争取分化...
外媒曝料,充电功率被标注为 18W 的谷歌 Pixel 手机实际上充电功率峰值只有 15W。
Touch Bar 不止是替代了功能键的作用这么简单,而是让宏应用变得更加“亲民”,可能会...
这个用户也是蛮尴尬的,他又该怎么样去证明他不是那个萨达姆呢?
移动资讯时代本身已经将信息高度碎片化,如果连保存信息的方式都这么碎片,那么断然不...
众所周知,空气质量与我们的生活息息相关,而随着近几年我国大气问题的逐渐加剧,很多...
《野蛮金色英雄》是一款轻松休闲的弹珠类游戏,动画版的画风以及简单的剧情设计都让这...
通过不断的努力这个游戏系列已经成为了如今移动平台上最出色的恐怖游戏之一。
在智能设备与修图工具共同发力的今天,面对着各路早已免疫了多种滤镜、磨皮、美颜的用...
iOS 端上出色的 PDF 编辑器实在不多,在小编心目中,最强者还是老牌开发商 Readdle 旗...
这是一款再复古不过的手游,不仅 BGM 充满复古味道,就连画面也复古的变成了黑白色。
并非所有的移动电源都需要配有多个充电端口,才能同时给多台设备进行充电。
虽然 AirPods 没有在 10 月份如期到来,但是这款产品也不会像某些媒体报道的那样拖到...
这是一款支持快速充电技术的配件产品,能够让 iPhone 7 或者 Android 手机在最短的时...
奢侈品就是奢侈品,随便出个东西都让你肾疼。
Xenon Flash Shell 这是一款专为 iPhone 设计的外置氙气闪光灯,其效果比 LED 等要出...
又一条产品线将和我们告别,苹果不制造独立显示屏了。
Griffin公司推出了售价$ 34.99的BreakSafe,带来了MagSafe的安全功能。
配备Thunderbolt 3(Type-C)接口的 MacBook Pro 一经发布,贝尔金也推出了一个 Thund...
136045阅读
神器Launcher的简单使用教程!!!!新手必看...
注册时间 最后登录
在线时间311 小时 UID
主题帖子人气
白苹果, 积分 1029, 距离下一级还需 471 积分
本帖最后由 k 于
13:30 编辑
由于iOS8对外开放插件这一项功能之后...现在有很多软件可以在不越狱的情况下直接在下拉栏安装插件或Launcher等快捷方式插件...下面给大家介绍一款最近比较火..上手简单易用的Launcher...非常的不错...可以自定义很多软件和快捷方式....
关于 iOS 系统功能的 URL 汇总列表:蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_ID*** — prefs:root=General&path=Network/***Wi-Fi:prefs:root=WIFI定位服务:prefs:root=LOCATION_SERVICES个人热点:prefs:root=INTERNET_TETHERING关于本机:prefs:root=General&path=About辅助功能:prefs:root=General&path=ACCESSIBILITY飞行模式:prefs:root=AIRPLANE_MODE锁定:prefs:root=General&path=AUTOLOCK亮度:prefs:root=Brightness蓝牙:prefs:root=General&path=Bluetooth时间设置:prefs:root=General&path=DATE_AND_TIMEFaceTime:prefs:root=FACETIME设置:prefs:root=General键盘设置:prefs:root=General&path=KeyboardiCloud:prefs:root=CASTLEiCloud备份:prefs:root=CASTLE&path=STORAGE_AND_BACKUP语言:prefs:root=General&path=INTERNATIONAL定位:prefs:root=LOCATION_SERVICES音乐:prefs:root=MUSICMusic Equalizer — prefs:root=MUSIC&path=EQMusic Volume Limit — prefs:root=MUSIC&path=VolumeLimitNetwork — prefs:root=General&path=NetworkNike + iPod — prefs:root=NIKE_PLUS_IPODNotes — prefs:root=NOTESNotification — prefs:root=NOTIFICATIONS_IDPhone — prefs:root=PhonePhotos — prefs:root=PhotosProfile — prefs:root=General&path=ManagedConfigurationListReset — prefs:root=General&path=ResetSafari — prefs:root=SafariSiri — prefs:root=General&path=AssistantSounds — prefs:root=SoundsSoftware Update — prefs:root=General&path=SOFTWARE_UPDATE_LINKStore — prefs:root=STORETwitter — prefs:root=TWITTERUsage — prefs:root=General&path=USAGEWallpaper — prefs:root=Wallpaper
下面是软件链接...请确定自己系统是iOS8.0以上....如果不是的话请无视此贴.....神器已经重新上架了...需要的朋友可以去App Store下载..只不过Pro内购变成了25...
/cn/app/launcher-dai-tong-zhi-zhong/id?mt=8&ign-mpt=uo4
Apple decided to disallow widgets with our functionality
苹果并不允许我们做这样的插件...这是下架之后官方的解释..
已经下载到在手机上的朋友可以用iTools或PP助手之类备份Launcher...记得备份软件+数据即可..保存在电脑上..
这里是我已经试验过的软件URL代码...会不定期更新...如果大家有可能用的代码欢迎补充...已经修正部分软件URL代码...
电话 mobilephone://
备忘录 mobilenotes://墨客 com.moke.moke-1://
名片全能王&&camcard://
扫描全能王&&camscanner://
TuneIn Radio&&tunein:// 或 tuneinpro://
OfficeSuite&&mobisystemsofficesuite://
WPS Office&&KingsoftOfficeApp://
Line&&line://
1Password&&onepassword://
Clear(著名的Todo应用) clearapp://
Chrome谷歌浏览器&&googlechrome://
Calendars 5&&calendars://
GoodReader 4&&com.goodreader.sendtogr://
PDF Expert 5&&pdfexpert5presence://
Documents 5&&rdocs://
nPlayer nplayer-http://
GPlayer gplayer://
AVPlayer HD AVPlayerHD://
AVPlayer AVPlayer://
Ace Player aceplayer://
12306订票助手 trainassist://
金山词霸 com.kingsoft.powerword.6://
节奏大师 tencentrm://
赶集生活 **://
凤凰新闻 comIfeng3GifengNews://
高铁管家 gtgj://
飞信 fetion://
豆瓣FM doubanradio://
大智慧 dzhiphone://
布卡漫画 buka://
爱奇艺PPS ppstream://
哔哩哔哩动画 bilibili://
56视频 com.56Video://
<font color="#ff日历 rili365://
58同城 wbmain://
遇见 iaround://
陌陌 momochat://
旺旺卖家版 wangwangseller://
有道词典 yddict://
优酷 youku://
掌阅iReader iReader://
艺龙旅行 elongIPhone://
迅雷+迅雷云播 thunder://
熊猫公交 wb://
携程无线 CtripWireless://
无线苏州 SuZhouTV://
唯品会 vipshop://
微视 weishiiosscheme://
微拍 wpweipai://
旺信 wangxin://
网易公开课 ntesopen://
网易将军令 netease-mkey://
万年历 youloft.://
土豆视频 tudou://
同花顺 amihexin://
天涯社区 tianya://
天气通Pro sinaweatherpro://
天气通 sinaweather://
墨迹天气 rmMojiWeather://
腾讯新闻 qqnews://
腾讯微云 weiyun://
腾讯地图 sosomap://
淘宝旅行 taobaotravel://
人人 renrenios://
蜻蜓FM qtfmp://
浦发银行 wx1cb534bb13ba3dbd://
招商银行 cmbmobilebank://
支付宝 alipay://
建设银行 wxa468://
工商银行 com.icbc.iphoneclient://
酷我音乐 com.kuwo.kwmusic.kwmusicForKwsing://
酷狗音乐 kugouURL://
京东 openApp.jdMobile://
今日头条 snssdk141://
QQ音乐 qqmusic://
QQ*** tencent382://
QQ浏览器 mttbrowser://
QQ安全中心 qmtoken://
QQ国际版&&mqqiapi://
PPTV pptv://
爱奇艺视频 qiyi-iphone://
暴风影音 com.baofeng.play://
保卫萝卜2 wb://
保卫萝卜 wb://
百度音乐 baidumusic://
百度视频 baiduvideoiphone:// 或 bdviphapp://
百度糯米 bainuo://
百度魔图 photowonder://
百度魔拍 wondercamera://
百度地图 baidumap://
百度导航 bdNavi://
百度 baiduboxapp:// 或 BaiduSSO://
搜狗输入法 com.sogou.sogouinput://
搜狐视频 sohuvideo-iphone:// 或 sohuvideo://
搜狐新闻 sohunews://
随手记 FDMoney://
腾讯企业邮箱 qqbizmailDistribute2://
腾讯手机管家 mqqsecure://
腾讯视频 tenvideo:// 或 tenvideo2:// 或 tenvideo3://
腾讯微博 TencentWeibo://
天猫 tmall://
天天星连萌 tencent://
天天爱消除 tencent://
天天酷跑 tencent://
天天飞车 tencent://
天天动听 ttpod://
挖财记账 wacai://
威锋网 com.weiphone.forum://
新浪微博 weibo:// 或 sinaweibo://
网易邮箱 neteasemail://
高德导航 Autonavi://
百度输入法 BaiduIMShop://
百度贴吧 com.baidu.tieba://
淘宝 taobao://
微信 wechat:// 或 weixin://
百度云 baiduyun://
网易新闻 newsapp://
设置 prefs:root=SETTING
定位服务 prefs:root=LOCATION_SERVICES
UC浏览器 ucbrowser://
E-Mail MESSAGE://
软件本体为免费.....内购的Pro版是18块RMB...但是免费的7个栏位基本够用了...强迫症患者除外.....
5S区另一位高手发的URL深入技术贴...大家有什么不懂的地方可以去那边请教一下...
首先在App Store搜索Launcher...之后点击红色的烟花图标那个就是了..或者直接点我上面的链接下载也行....
下载完之后下拉通知栏...找到编辑...点+号....把Launcher这个插件添加进去
在这里可以看到右上角有一个小笔的图标...就是编辑按钮了...之后我们点小笔编辑..
之后点击下面绿色的Add New..
点击Add New之后就可以看到四个选项的界面了...
Contact Launcher---联系人链接..
Web Launcher---网页链接..
App Launcher---应用链接..
Custom Launcher---自定义链接..
点击下面任意一项就可以添加对应的链接了...
我们可以从App Launcher应用链接开始..
点击App Launcher之后...到了App List---应用菜单这个界面....
可以看到下面System表示系统自带的程序在下面..可以直接点击添加进快捷方式里面..
添加完成之后就可以看到添加的应用程序图标了...
如果上面没有的应用程序图标...是要自己手动添加URL的...
如果你在System自带的应用里面找不到你想要的...
你可以在Installed里面找已经安装的第三方程序直接加入进快捷方式...
而不需要自己手动去添加应用程序的URL....
除非软件上面实在找不到的程序才要手动去添加URL...
下面是我自己手机上安装的软件和游戏...都是直接可以添加进快捷方式的...
这上面的所以显示的安装程序都可以直接添加进快捷方式...不需要另外再添加URL..
像下面这种排行榜的软件...比如Facebook..Twitter..Dropbox..Chrome...印象笔记之类的知名软件也都是有快捷方式的...
上面是介绍软件的添加方法...
下面就是设置里面快捷方式的添加方法了...
其实很多人问比如个人热点...WIFI...蜂窝数据..定位服务等快捷方式的URL代码是多少..
这个软件其实已经全部自带了...我们同样进去软件点Add New...再点App Launcher..
翻到下面的Setting那里有一个向右箭头....点击进去里面就可以看到设置里面的许多选项了..\
比如关于手机...辅助功能..自动锁屏时间..等等快捷方式都有的...
然后我们点击Accessibility-辅助功能..再在右上角打勾...
这样辅助功能就添加到快捷方式里面了...如下图...
当然....上面的英文是可以改的..你也可以改成辅助功能...图标也可以换掉...换成你喜欢的任何图标...
下面是设置里面的所有快捷方式翻译
About--关于手机
Accessibility--辅助功能
Autolock--自动锁屏时间
Bluetooth-蓝牙(用得比较少)
Cellular/Mobile--蜂窝数据网络(这个我想大部分人都要添加的)
Compass--指南针设置
Control Center--控制中心
Date/Time--时期和时间
Display/Brightness--显示与亮度
Do not disturb--勿扰模式
Facebook--Facebook设置
Facetime--Facetime设置
Game Center--游戏中心
General--通用
iCloud--iCloud登录与设置
iCloud Storage--iCloud容量查看与设置
Internationnal--语言与地区设置
iTunes & App Store--iTunes与App Store账号设置
Keyboard--键盘设置
Location Services--定位服务设置
Mail,Contacts,Calendar--邮件,通讯录,日历设置
Map--地图设置
Music--音乐设置
Music EQ--音效设置
Notes--备忘录设置
Notifications--通知中心设置
Passcode--密码设置
Personal Hotspot--个人热点(打开这项的前提是蜂窝数据已经打开)
Phone--电话设置
Photos--相册设置
Privacy--证书设置
Profiles--隐私设置
Reminders--提醒事项设置
Reset--还原设置
Ringtone--铃声设置
Safari--Safari设置
Sounds--声音设置
Software Update--软件更新
Touch ID &Passcode--Touch ID与密码设置
Twitter--Twitter账号与设置
Usage--用量
Videos--视频设置
V P N--V P N设置
Wallpaper--壁纸设置
WiFi--WiFi设置
好了...以上全部翻译完了...大家可以按自己的需要添加想要的快捷方式...
不过电话拨号和信息的快捷方式我还没有搞定...不知道有没有高手可以找到URL代码...
麻烦请回个贴..谢谢.....
半夜手动打字很累的...........大家帮顶一下.........
<p id="rate_04906" onmouseover="showTip(this)" tip="不错&人气 + 5
" class="mtn mbn">
<p id="rate_64470" onmouseover="showTip(this)" tip="威锋有你更精彩:)&人气 + 5
" class="mtn mbn">
<p id="rate_30749" onmouseover="showTip(this)" tip="&a
href=&forum.php?mod=redirect&goto=findpost&ptid=8334813&pid=&fromuid=1&&&span &感谢分享^_^&/span&&/a&&人气 + 1
" class="mtn mbn">
<p id="rate_14256" onmouseover="showTip(this)" tip="留名&人气 + 3
" class="mtn mbn">
<p id="rate_70327" onmouseover="showTip(this)" tip="&a
href=&forum.php?mod=redirect&goto=findpost&ptid=8334813&pid=&fromuid=1&&&span &感谢分享^_^&/span&&/a&&人气 + 3
" class="mtn mbn">
<p id="rate_5271" onmouseover="showTip(this)" tip="威锋有你更精彩:)&人气 + 7
" class="mtn mbn">
<p id="rate_91886" onmouseover="showTip(this)" tip="感谢分享^_^&人气 + 7
" class="mtn mbn">
<p id="rate_22355" onmouseover="showTip(this)" tip="&a
href=&forum.php?mod=redirect&goto=findpost&ptid=8334813&pid=&fromuid=1&&&span &感谢分享^_^&/span&&/a&&人气 + 5
" class="mtn mbn">
<p id="rate_87709" onmouseover="showTip(this)" tip="威锋有你更精彩:)&人气 + 1
" class="mtn mbn">
<p id="rate_65015" onmouseover="showTip(this)" tip="精品文章^_^&人气 + 1
" class="mtn mbn">
<p id="rate_47748" onmouseover="showTip(this)" tip="感谢分享^_^&人气 + 5
" class="mtn mbn">
<p id="rate_46084" onmouseover="showTip(this)" tip="感谢分享^_^&人气 + 1
" class="mtn mbn">
<p id="rate_37055" onmouseover="showTip(this)" tip="感谢分享^_^&人气 + 1
" class="mtn mbn">
<p id="rate_23532" onmouseover="showTip(this)" tip="&a
href=&forum.php?mod=redirect&goto=findpost&ptid=8334813&pid=&fromuid=1&&&span &威锋有你更精彩:)&/span&&/a&&人气 + 5
" class="mtn mbn">
<p id="rate_42504" onmouseover="showTip(this)" tip="感谢分享^_^&人气 + 1
" class="mtn mbn">
<p id="rate_59177" onmouseover="showTip(this)" tip="我很赞同^_^&人气 + 1
" class="mtn mbn">
评分次数70
威锋有你更精彩:)
威锋有你更精彩:)
感谢分享^_^
威锋有你更精彩:)
精品文章^_^
感谢分享^_^
感谢分享^_^
感谢分享^_^
感谢分享^_^
我很赞同^_^
感谢分享^_^
助人为乐^_^
加分,收藏了慢慢看
威锋有你更精彩:)
感谢分享^_^
威锋有你更精彩:)
感谢分享^_^
不明觉厉。楼主666
注册时间 最后登录
在线时间311 小时 UID
主题帖子人气
这排版太乱了...我草..明天上班再弄吧..睡觉先..............
注册时间 最后登录
在线时间109 小时 UID
主题帖子人气
注册时间 最后登录
在线时间879 小时 UID
主题帖子人气
费劲,懒得鼓捣
<p id="rate_22661" onmouseover="showTip(this)" tip="&a
href=&forum.php?mod=redirect&goto=findpost&ptid=8334813&pid=&fromuid=1&&&span &我很赞同^_^&/span&&/a&&人气 + 2
" class="mtn mbn">
注册时间 最后登录
在线时间302 小时 UID
主题帖子人气
注册时间 最后登录
在线时间73 小时 UID
主题帖子人气
辛苦了。不知道会不会很费电或者卡?
注册时间 最后登录
在线时间67 小时 UID
主题帖子人气
注册时间 最后登录
在线时间29 小时 UID
主题帖子人气
LZ的是内购的才有那个settings选项,没有内购的可以无视了!
注册时间 最后登录
在线时间81 小时 UID
主题帖子人气
话说手机客户端看为什么没图片
注册时间 最后登录
在线时间249 小时 UID
主题帖子人气
不错,图片看不到
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!Android的Notification是android系统中很重要的一个机制, 产品人员常常利用通知栏的方式,跟用户进行弱沟通。拥有推送通知的app要比没有此类功能的app活跃率要高很多。另外类似于墨迹天气,清理大师等 app,也会将通知栏常驻,利用自定义的布局,方便用户及时快捷的查看所需的信息和使用快捷的功能。所以Notification的使用,也在开发当中, 使用的越来越频繁。今天我就来跟大家分享一下Notification的常用事项。
我不了解大家平时怎么使用Notification,我常常看到有些人的代码是这样写的:
Notification&notification=new&Notification(notificationIcon,&notificationTitle,&when);&&&&
&&&&&&&&&&&&
&&&&&&&&notification.defaults=Notification.DEFAULT_ALL;&&&&
&&&&&&&&&&&&
&&&&&&&&Intent&intent=new&Intent(MainActivity.this,SecondActivity.class);&&&&
&&&&&&&&PendingIntent&pendingIntent=PendingIntent.getActivity(MainActivity.this,&0,&intent,&0);&&&&
&&&&&&&&notification.setLatestEventInfo(this,"测试展开title",&"测试展开内容",pendingIntent);&&&
。。。。。。。。。。。。。&&
具体的代码我就不贴全了,因为大家如果注意IDE的提示的话,就会发现,其实这是一种不推荐
的用法,API的支持已经过时了。最新的Notification的用法,是推荐使用V4包下的NotificationCompat.Builder,
利用它,进行各种设置,具体的用法先别着急,我们慢慢道来。
NotificationCompat.Builder&notifyBuilder&=&new&NotificationCompat.Builder(&&
&&&&&&&&this);&&
首先,我们需要先初始化一个notifyBuilder,然后利用它的各种set方法,进行相关设置,具体的设置,我们参考下图:
图示中的序号1,叫做
notifyBuilder.setContentTitle("This&is&My&Notification");&&
图示中的序号3,叫做
notifyBuilder.setContentText("Hello&World");&&
图示中的需要5,叫做利用下面的方法来设置:
这三个参数的设定是必须的,每次调用Notification,必须得设定这三个参数。除去这三个以外,另外的2,4,6区域,分别是Large Icon,Content Info,Time,设置方法如下所示:
Bitmap&bitmap&=&BitmapFactory.decodeResource(getResources(),R.drawable.bigicon);&&
notifyBuilder.setLargeIcon(bitmap);&&
notifyBuilder.setNumber(10);&&
notifyBuilder.setWhen(System.currentTimeMillis());&&
以上就是关于Notification的基本设置,下面,我们继续看看其它方面的设置,直接上代码:
&&&&&&&&notifyBuilder.setAutoCancel(true);&&
&&&&&&&&notifyBuilder.setPriority(NotificationCompat.PRIORITY_MAX);&&
&&&&&&&&notifyBuilder.setTicker("Hi,Notification&is&here");&&
&&&&&&&&&&
&&&&&&&&NotificationManager&mNotificationManager&=&(NotificationManager)&getSystemService(Context.NOTIFICATION_SERVICE);&&
&&&&&&&&mNotificationManager.notify(NOTIFY_ID,&notifyBuilder.build());&&
如上面的注释所示,如果你想点击完notification后,该通知自动消失,那么你就需要调用setAutoCancel(boolean b)这个方法,并且将其设为true,如果你想让你的通知栏常驻,用户无法滑动删除,也不能通过手机的清除键 删除,类似于墨迹天气等app的通知栏,那么你可以设置setOngoing方法,也设为true,这样,通知栏只能通过代码调用cancel方法才能消失,很霸道地,有木有!另外,从Android4.1时代开始,系统允许设置Notification的优先级,对于优先级高的通知,会排在
通知栏的前面,并在会在手机最上端的Status Bar显示一个图标,如果优先级设定的较低,那么就会被系统显示在通知栏的后面,并且Status Bar不再显示相应的图标,设置优先级的方法,就是调用setPriority(int p)。另外,当启动通知栏的时候,我们常常可以在手机最上端的Status Bar上面,会闪现一段提示语,用来提醒用户,这段提示语具体显示的文字,就是靠setTicker()
这个方法来实现的。除此之外,我们还可以设置,推送通知时的铃声、震动效果,闪光灯效果等等,具体的我就不一一列举了,参考上面的示例代码即可,需要注意
一点的是,设置通知的铃声,除去调用系统自带的外,还有两种方式,分别是调用SD卡中的声音文件和项目工程自带的声音文件,这两种方式都需要用到Uri的
地址,具体如何获取这两种的Uri,我已经在上面的代码中,写的很详细了,大家可以参考上面的代码,在自己的项目中实验一下。
说了这么多,还有最重要的一点没有讲,那就是在你设置完notification的各
种属性后,你需要启动这个notification,否则就前功尽弃了,启动的方法,如上面的示例代码所示,你需要先获取一个
NotificationManager的实例,然后调用notify的方法,notifyBuilder.build()这个方法,可以实例化一个
notification的实例,另外,你还需要为这个notification分配一个独一无二的的id号,将来notification的更新和删
除,都是依靠这个id号来做索引对应的。
有时候,我们会涉及到这么一个需求,那就是,产品设计,希望我们能够监听
notification的销毁,意思就是说,当用户手动滑动通知将其删除或者通过手机的删除按钮将其清空时,我们希望可以捕获到这一信息,并作出相应的
处理。比如说,我们在通知栏发送了一个通知,用来更新一个资源的下载进度,当用户删除这个通知后,我们希望可以监听到这一变化,作出相应的处理,比如取消
下载,比如重新下载等等,那么,应该如何监听取消的行为呢?请看代码:
Intent&deleteIntent&=&new&Intent(this,&DeleteService.class);&&
int&deleteCode&=&(int)&SystemClock.uptimeMillis();&&
PendingIntent&deletePendingIntent&=&PendingIntent.getService(this,&&
&&&&&&&&deleteCode,&deleteIntent,&PendingIntent.FLAG_UPDATE_CURRENT);&&
notifyBuilder.setDeleteIntent(deletePendingIntent);&&
们给notifyBuilder设置一个DeleteIntent,这里指向了一个service,当删除的行为发生后,系统就会启动这个
service,我们就可以在这个service中,做相应的逻辑处理了,当然,这里我只是举了一个例子,用来启动service,大家也可以将
Intent指向一个Activity或者一个广播,不过PendingIntent.getService()这个方法,就需要换成
PendingIntent.getActivity()或者PendingIntent.getBroadCast()这两个方法。
上面的内容,我们大概了解了如何给notification设定显示的内容,和如何监
听销毁的行为。但是常常,我们会发现,除了以上功能外,我们经常遇见的情形时,当我们点击了一个notification后,就会自动打开一个页面,展示
出信息来源的具体页面,接下来,我们就针对这种情况,来看看代码是如何控制的。
刚刚提到的自动跳转页面的功能,看似很简单的一个逻辑,其实也包含了各种逻辑处理情况,其中最主要的是有两种:
一:当我们处在手机桌面主屏的时候,突然来了一条邮箱的信息,来了一
封新邮件,我们点击通知栏,系统会为我们打开最新收到的邮件,当我们看完邮件后,按返回键,我们并不会马上回到手机桌面的主屏上,而是先返回到收件箱界
面,然后再返回到邮件APP的主界面,然后再返回到手机桌面的主屏上,它是按照邮件APP的页面队列返回的。
二:还是举刚才那个例子,当我们收到新邮件的通知后,我们点击打开新收到的邮件,当我们阅读完之后,我们想要点击返回键,立刻返回到我们刚刚所处的界面,继续进行刚才还在进行的任务。
这两种情况,在产品设计中,常常出现,所以我们也要想办法去实现,那么如何去实现这两种情况呢,我们一个一个来看。
首先请看第一种情况的代码:
Intent&notifyIntent&=&new&Intent(this,&NotifyRegularActivity.class);&&
TaskStackBuilder&stackBuilder&=&TaskStackBuilder.create(this);&&
stackBuilder.addParentStack(NotifyRegularActivity.class);&&
stackBuilder.addNextIntent(notifyIntent);&&
int&requestCode&=&(int)&SystemClock.uptimeMillis();&&
PendingIntent&resultPendingIntent&=&stackBuilder.getPendingIntent(&&
&&&&&&&&requestCode,&PendingIntent.FLAG_UPDATE_CURRENT);&&
notifyBuilder.setContentIntent(resultPendingIntent);&&
我们继续贴上AndroidManist.xml的配置代码:
&&&&&&&&&&&&android:name="com.example.notificationtest.MainActivity"&&
&&&&&&&&&&&&android:label="@string/app_name"&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&android:name="com.example.notificationtest.OtherActivity"&&
&&&&&&&&&&&&android:label="OtherActivity"&&
&&&&&&&&&&&&android:parentActivityName="com.example.notificationtest.MainActivity"&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&android:name="android.support.PARENT_ACTIVITY"&&
&&&&&&&&&&&&&&&&android:value="com.example.notificationtest.MainActivity"&
&&&&&&&&&&&&android:name="com.example.notificationtest.NotifyRegularActivity"&&
&&&&&&&&&&&&android:label="NotifyRegularActivity"&&
&&&&&&&&&&&&android:parentActivityName="com.example.notificationtest.OtherActivity"&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&android:name="android.support.PARENT_ACTIVITY"&&
&&&&&&&&&&&&&&&&android:value="com.example.notificationtest.OtherActivity"&
好,我们来分析一下上面的代码。首先我们设置了一个Intent,将其指向 NotifyRegularActivity,然后我们用到了TaskStackBuilder,它可以用来控制界面返回的导航堆栈。
TaskStackBuilder&stackBuilder&=&TaskStackBuilder.create(this);&&
stackBuilder.addParentStack(NotifyRegularActivity.class);&&
stackBuilder.addNextIntent(notifyIntent);&&
我们利用这段代码,首先实例化了一个TaskStackBuilder,然后调用addParentStack()和addNextIntent(),
设置它的返回堆栈和跳转页面,跳转页面的Intent很好理解,跟大家平时的设置方式是一样的,那么它的返回堆栈是如何控制的呢?这就需要上面xml配置
文件的配置了,大家请看,在上面的配置文件中,一共有三个Activity,分别是MainActivity,OtherActivity,和
NotifyRegularActivity,其中NotifyRegularActivity就是我们点击通知栏后,要自动跳转的界面。在配置文件当
我们给后面两个Activity,设置了这么一个属性android:parentActivityName,它指的就是该activity的返回路径,因为刚刚我们在调用addParentStack()这个方法的时候,设置的参数是NotifyRegularActivity.class所以根据上面配置文件的配置内容,那么它的返回堆栈的顺序就是:
需要注意的是,为了向下兼容版本,我们在设置android:parentActivityName这个属性的时候,还需要在配置文件中,为每个Activity进行如下设置:
&&&&android:name="android.support.PARENT_ACTIVITY"&&
&&&&android:value="com.example.notificationtest.MainActivity"&
具体的value的指向,就需要你自己设定了,总之,它指向了该activity的返回页面。对TaskStackBuilder设置完成之后,我们再通过下面的代码获取PendingIntent,,然后赋值给notifyBuilder即可:
int&requestCode&=&(int)&SystemClock.uptimeMillis();&&
PendingIntent&resultPendingIntent&=&stackBuilder.getPendingIntent(&&
&&&&&&&&requestCode,&PendingIntent.FLAG_UPDATE_CURRENT);&&
notifyBuilder.setContentIntent(resultPendingIntent);&&
这里有两点需要注意一下:
1:PendingIntent.FLAG_UPDATE_CURRENT这个参数一般有四种选择分别是:
FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。
FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。
FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。
FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,那么系统将不会重复创建,只是把之前不同的传值替换掉。
如果没有特殊要求的话,我们常常会使用FLAG_UPDATE_CURRENT这个参数来构造PendingIntent,但是这样常常会引发第二个问题,什么问题呢?呵呵~
2:如上所述我们使用
FLAG_UPDATE_CURRENT这个参数后,常常会发现,我们点击通知栏后,系统没有响应,时灵时不灵的,很是忧郁,这是为什么呢?原来使用
FLAG_UPDATE_CURRENT这个参数后,系统不会重新创建新的PendingIntent,这样一来,如果你传递的Intent的
extra参数没有变化的话,那么系统就会认为你没有发送新的PendingIntent,这样就不会重新响应你的点击事件。一般情况下,为了能够区分每
次的PendingIntent不一样,我们常常会在构造Intent的时候,设置不同的Action或者Extra值,这样一来,及时是使用
FLAG_UPDATE_CURRENT这个参数,系统也会因为传值参数的变化而去响应每次的点击跳转事件。不过这种解决方法还是有些麻烦,有时候,我们
根本不需要传递额外的Aciton或者参数值,这该怎么办呢?哈哈,解决代码已经在上面的代码中写出来了,在stackBuilder.getPendingIntent(requestCode,
PendingIntent.FLAG_UPDATE_CURRENT)这个方法中,我们注意到第一个参数,这里,我们只要为这个参数设置一个独一无二的标识,那么刚刚提到的点击无响应的问题就迎刃而解了,我平时的设置办法就是利用这段代码:
int&requestCode&=&(int)&SystemClock.uptimeMillis();&&
获取发布通知时的时间,将它作为requestCode,这样就可以避免这些问题了。不过如果你要是使用FLAG_CANCEL_CURRENT这个参数的话,就会每次都创建一个新的,那么刚刚提到的这两个问题,也都不存在了,具体怎么用,看你实际的业务要求了。
上面的讲解,我们就可以解决刚刚讨论的第一种情形了,下面我们来说一下,第二种情形,也就是点击返回键后,直接返回刚刚任务所处的界面,看看这个如何实现。来,看代码:
Intent&notifyIntent&=&new&Intent(this,&NotifySpecialActivity.class);&&
&&&&&&&&notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK&&
&&&&&&&&&&&&&&&&|&Intent.FLAG_ACTIVITY_CLEAR_TASK);&&
&&&&&&&&int&requestCode&=&(int)&SystemClock.uptimeMillis();&&
&&&&&&&&PendingIntent&pendIntent&=&PendingIntent.getActivity(this,&requestCode,&&
&&&&&&&&&&&&&&&&notifyIntent,&PendingIntent.FLAG_UPDATE_CURRENT);&&
&&&&&&&&notifyBuilder.setContentIntent(pendIntent);&&
继续看配置文件的设置:
&&&&android:name="com.example.notificationtest.NotifySpecialActivity"&&
&&&&android:excludeFromRecents="true"&&
&&&&android:label="NotifySpecialActivity"&&
&&&&android:launchMode="singleTask"&&
&&&&android:taskAffinity=""&
在代码中,我们设置NotifySpecialActivity为我们要跳转的界面,然后在xml的配置文件中,我们重点设置了这三个属性:android:excludeFromRecents="true",android:launchMode="singleTask",android:taskAffinity="",第一个属性的设置,是将该界面从最近任务栏当中移除,防止用户通过最近任务栏而进入到该界面,这样一来,只能通过通知来的点击来进入。第二种属性的设置就很常见了,是为了防止该界面存在的情况下,重复创建该Activity,第三属性是为了配置代码中的这段来设置的:
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK&&
&&&&&&&&|&Intent.FLAG_ACTIVITY_CLEAR_TASK);&&
这样的作用是为此次跳转界面的行为重新分配一个任务堆栈,而不从属于其它的任务堆栈,这样的话,当我们点击返回键后,就可以直接返回到刚刚用户所处的任务界面了。由于这里我们不再使用TaskStackBuilder,所以最后需要调用PendingIntent.getActivity(this, requestCode,notifyIntent,PendingIntent.FLAG_UPDATE_CURRENT)这个方法来构造一个PendingIntent,然后赋值给notifyBuilder。这样,刚刚讨论过的第二种情形,我们就可以解决了,相比较第一种来说,这种解决方式更为简洁,不过处理的业务逻辑也不一样,大家斟酌而定。
Notificaton在平时的产品设计中,常常用来显示跟网络交互的进度,我们常常的做法是在通知栏上面,显示一个进度条,用来更新交互的进度,这个的实现方式很简单,主要依赖于mBuilder.setProgress()这个方法,具体的做法可以参考下面的代码:
&&&&final&NotificationManager&mNotifyManager&=&(NotificationManager)&getSystemService(Context.NOTIFICATION_SERVICE);&&
&&&&final&NotificationCompat.Builder&mBuilder&=&new&NotificationCompat.Builder(&&
&&&&&&&&&&&&this);&&
&&&&mBuilder.setContentTitle("Picture&Download")&&
&&&&&&&&&&&&.setContentText("Download&in&progress")&&
&&&&&&&&&&&&.setSmallIcon(R.drawable.small);&&
&&&&new&Thread(new&Runnable()&{&&
&&&&&&&&@Override&&
&&&&&&&&public&void&run()&{&&
&&&&&&&&&&&&int&&&
&&&&&&&&&&&&for&(incr&=&0;&incr&&=&100;&incr&+=&5)&{&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&mBuilder.setProgress(0,&0,&true);&&
&&&&&&&&&&&&&&&&mNotifyManager.notify(NOTIFY_ID,&mBuilder.build());&&
&&&&&&&&&&&&&&&&try&{&&
&&&&&&&&&&&&&&&&&&&&Thread.sleep(1&*&1000);&&
&&&&&&&&&&&&&&&&}&catch&(InterruptedException&e)&{&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&mBuilder.setContentText("Download&complete").setProgress(0,&0,&&
&&&&&&&&&&&&&&&&&&&&false);&&
&&&&&&&&&&&&mNotifyManager.notify(NOTIFY_ID,&mBuilder.build());&&
&&&&&&&&}&&
&&&&).start();&&
在代码中,我们开启了一个线程,里面进行20次for循环,每次循环都会调用setProgress这个方法,因为每次调用的NOTIFY_ID都是相同的,所以系统会根据这个ID来更新notification的进度而不会重新创建一个新的Notification。setProgress这个方法一共有两种方法,一种是这样的:
mBuilder.setProgress(100,&incr,&false);&&
第一个参数指的的是进度的总长度,第二个参数是目前进行的长度,然后将第三个参数设为false,我们可以看到的效果就如下图:
我们可以看见进度条的确切位置和进度情况。还有一种使用方法是这样的:
mBuilder.setProgress(0,&0,&true);&&
将前两个参数都设为0,然后将最后这个参数设为true,这样的进度条效果是一种连续模糊的,适合进行时间不确定的网络连接,效果图如下:
最后,当我们的任务完成后,我们需要取消进度条的显示,这时候我们需要调用如下方法:
mBuilder.setContentText("Download&complete").setProgress(0,&0,&&
&&&&&&&&false);&&
设置一个任务完成后的文本描述,然后将setProgress的前两个参数都设为0,最后一个参数设为false,这样进度条就不会在通知栏上面显示了,效果图:
Notification的进度条的使用方法就是这些,如果大家平时用的不多,最好还是根据上面贴出的源代码,自己联系一遍,稍候我也会把本次工程的源代码打包,上传到CSDN的资源库中,供大家参考。
上面跟大家介绍的,都是Notification的一种常规样式,自从Android4.1之后,谷歌引入了一种新的样式,叫做Big View,效果就是相对于传统的Notification,它的显示区域更大,显示的内容也更多一些。关于Big View,谷歌支持了三种模式,分别是:
text style 还有&new&NotificationCompat.Builder(&&
&&&&&&&&this).setSmallIcon(R.drawable.small)&&
&&&&&&&&.setContentTitle("Picture&tracker")&&
&&&&&&&&.setContentText("Picture&received");&&
NotificationCompat.BigPictureStyle&picStyle&=&new&NotificationCompat.BigPictureStyle();&&
Bitmap&bitmap&=&BitmapFactory.decodeResource(getResources(),&R.drawable.bigpic);&&
picStyle.bigPicture(bitmap);&&
mBuilder.setStyle(picStyle);&&
NotificationManager&mNotifyManager&=&(NotificationManager)&getSystemService(Context.NOTIFICATION_SERVICE);&&
mNotifyManager.notify(NOTIFY_ID,&mBuilder.build());&&
首先我们实例化一个NotificationCompat.BigPictureStyle,然后读取要展示的图片资源,调用picStyle.bigPicture(bitmap)这个方法设置图片,最后调用notifyBuilder的mBuilder.setStyle(picStyle)方法,设置好BIG VIEW的样式,就OK了,代码简单的令人发指,我就不多解释了,大家参考上面的示例代码即可。
接下来,我们再看看Inbox style这种样式是如何设置的:
NotificationCompat.Builder&mBuilder&=&new&NotificationCompat.Builder(&&
&&&&&&&&this).setSmallIcon(R.drawable.small)&&
&&&&&&&&.setContentTitle("Inbox&tracker")&&
&&&&&&&&.setContentText("Inbox&received");&&
NotificationCompat.InboxStyle&inboxStyle&=&new&NotificationCompat.InboxStyle();&&
String[]&events&=&new&String[6];&&
events[0]&=&"Hello&my&one&world";&&
events[1]&=&"Hello&my&two&world";&&
events[2]&=&"Hello&my&three&world";&&
events[3]&=&"Hello&my&four&world";&&
events[4]&=&"Hello&my&five&world";&&
events[5]&=&"Hello&my&six&world";&&
inboxStyle.setBigContentTitle("Inbox&tracker&details:");&&
for&(int&i&=&0;&i&&&events.&i++)&{&&
&&&&inboxStyle.addLine(events[i]);&&
inboxStyle.setBigContentTitle("Thers&are&six&messages");&&
inboxStyle.setSummaryText("It's&so&easy,right?");&&
mBuilder.setStyle(inboxStyle);&&
NotificationManager&mNotifyManager&=&(NotificationManager)&getSystemService(Context.NOTIFICATION_SERVICE);&&
mNotifyManager.notify(NOTIFY_ID,&mBuilder.build());&&
唉,代码是不是再简单不过了,我都不好意思班门弄斧的介绍这段代码了。主要声明一下三个方法的使用吧,inboxStyle.addLine(),这个方法是用来设置下图中黄色区域的文字,inboxStyle.setBigContentTitle("Thers are six messages")这个方法是用来设置红色区域的文字内容,inboxStyle.setSummaryText("It's
so easy,right?")是用来设置绿色区域的内容显示,其他的基本设置在之前的内容中,都已经介绍了很多了,我就不重复介绍了。
通过上面的学习,想必大家已经对Notification有了一个比较全面的了解了,最后,
我再给大家介绍一种自定义 Notification布局的用法。自定义Notification布局的app有很多,比如像墨迹天气,Clean
Master等等,利用自定义布局,将用户所需信息和快捷功能,多样化的展示在通知栏上面,给大家看一下Clean Master的截图:
其实要是实现这种自定义布局的Notification,非常简单,我们这就给大家展示代码设置和布局配置:
先看看java代码:
NotificationCompat.Builder&mBuilder&=&new&NotificationCompat.Builder(this);&&
RemoteViews&remoteView&=&new&RemoteViews(getPackageName(),R.layout.remote);&&
remoteView.setTextViewText(R.id.text,&"Custom&Text");&&
remoteView.setTextViewText(R.id.btn,&"Custom&Button");&&
remoteView.setImageViewResource(R.id.image,&R.drawable.ic_launcher);&&
Intent&notifyIntent&=&new&Intent(this,&NotifySpecialActivity.class);&&
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK&&
&&&&&&&&|&Intent.FLAG_ACTIVITY_CLEAR_TASK);&&
int&requestCode&=&(int)&SystemClock.uptimeMillis();&&
PendingIntent&pendIntent&=&PendingIntent.getActivity(this,&requestCode,&&
&&&&&&&&notifyIntent,&PendingIntent.FLAG_UPDATE_CURRENT);&&
remoteView.setOnClickPendingIntent(R.id.btn,&pendIntent);&&
mBuilder.setSmallIcon(R.drawable.small);&&
mBuilder.setContent(remoteView);&&
NotificationManager&mNotifyManager&=&(NotificationManager)&getSystemService(Context.NOTIFICATION_SERVICE);&&
mNotifyManager.notify(NOTIFY_ID,&mBuilder.build());&&
再来看看xml布局文件是什么样的:
&&&&android:layout_width="match_parent"&&
&&&&android:layout_height="64dp"&
&&&&&&&&android:id="@+id/image"&&
&&&&&&&&android:layout_width="wrap_content"&&
&&&&&&&&android:layout_height="match_parent"&&
&&&&&&&&android:layout_alignParentLeft="true"&&
&&&&&&&&android:gravity="center"&
&&&&&&&&android:id="@+id/text"&&
&&&&&&&&android:layout_width="wrap_content"&&
&&&&&&&&android:layout_height="match_parent"&&
&&&&&&&&android:layout_centerInParent="true"&&
&&&&&&&&android:gravity="center"&
&&&&&&&&android:id="@+id/btn"&&
&&&&&&&&android:layout_width="wrap_content"&&
&&&&&&&&android:layout_height="wrap_content"&&
&&&&&&&&android:layout_alignParentRight="true"&&
&&&&&&&&android:gravity="center"&
我们首先利用下面这行代码去解析上面的布局文件
RemoteViews&remoteView&=&new&RemoteViews(getPackageName(),R.layout.remote);&&
然后根据每个控件的id号进行资源设置:
remoteView.setTextViewText(R.id.text,&"Custom&Text");&&
remoteView.setTextViewText(R.id.btn,&"Custom&Button");&&
remoteView.setImageViewResource(R.id.image,&R.drawable.ic_launcher);&&
我们也可以为这些控件单独设置点击事件,比如设置Button的点击事件:
remoteView.setOnClickPendingIntent(R.id.btn,&pendIntent);&&
上面第二个参数pendingIntent的获取,在之前的讲解中,已经介绍了好几种方式了,这里我们随便选择一种来实现了:
Intent&notifyIntent&=&new&Intent(this,&NotifySpecialActivity.class);&&
&&&&&&&&notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK&&
&&&&&&&&&&&&&&&&|&Intent.FLAG_ACTIVITY_CLEAR_TASK);&&
&&&&&&&&int&requestCode&=&(int)&SystemClock.uptimeMillis();&&
&&&&&&&&PendingIntent&pendIntent&=&PendingIntent.getActivity(this,&requestCode,&&
&&&&&&&&&&&&&&&&notifyIntent,&PendingIntent.FLAG_UPDATE_CURRENT);&&
最后,我们要调用下面这段代码,将自定义的RemoteView设置给notifyBuilder,然后调用发送通知的方法就OK了。
mBuilder.setContent(remoteView);&&
最后的最后,需要再给大家介绍两个方法,那就是通过代码来取消Notification,咱不能只管杀不管埋啊,哈哈~
NotificationManager&cancelNotificationManager&=&(NotificationManager)&getSystemService(Context.NOTIFICATION_SERVICE);&&
cancelNotificationManager.cancel(NOTIFY_ID);&&
cancelNotificationManager.cancelAll();&&
cancelNotificationManager.cancel(NOTIFY_ID)这个方法是根据之前发布通知时,分配的ID号,来取消对应的通知栏。
cancelNotificationManager.cancelAll()这个方法是取消所有之前发布过的通知栏,比较暴力一点哈。
阅读(...) 评论()

我要回帖

更多关于 鼠标点击任务栏没反应 的文章

 

随机推荐