- 浏览: 270443 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
androidios2014:
运行有滚没有把分组选项置顶,楼主帮忙给个源码学习7196628 ...
【so easy~】完全仿QQ好友列表,自定义ExpandableListView! -
hnu_hgc:
求代码,3243544018@qq.com
Android释放内存(结束进程) -
hnu_hgc:
求代码工程
Android释放内存(结束进程) -
l657757077:
楼主给个源码学习学习。邮箱:657757077@qq.com
【so easy~】完全仿QQ好友列表,自定义ExpandableListView! -
hao_yh:
楼主,修改后的代码能发我一份吗?感谢。感觉现在是只要界面创建就 ...
【so easy~】完全仿QQ好友列表,自定义ExpandableListView!
用惯了Android的人在刚拿到iPhone的时候,总是会习惯性的用手指从状态栏往下拖一下,这都是给Notification闹的。
不过Notification也确实是1个不错的提示工具,不干扰正常的操作,事后还可以再翻看详细的内容,点击后还可以进入相关的画面查看更具体的内容。
今天我就以代码为主的形式来介绍Notification的使用,包括基本用法,自定义的View,以及更多的控制方法。
另一种Android中常用到的提示方法Toast的用法请参见《教程:在Android中使用Toast进行提示》
我们先看下Notification的几个主要组成部分:
Icon:不解释
Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动
Content Title:Notification展开后的标题
Content Text:Notification展开后的内容
Notification的一般用法
取得NotificationManager
1 2 3 |
private NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); |
创建Notification并且显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Notification的滚动提示 String tickerText = "My notification, It's a long text! Hello World desiyo?"; //Notification的图标,一般不要用彩色的 int icon = R.drawable.icon_02241_3; //contentTitle和contentText都是标准的Notification View的内容 //Notification的内容标题,拖下来后看到的标题 String contentTitle="My notification"; //Notification的内容 String contentText="Hello World!"; //Notification的Intent,即点击后转向的Activity Intent notificationIntent = new Intent(this, this.getClass()); notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); //创建Notifcation Notification notification = new Notification(icon, tickerText, System.currentTimeMillis()); //设定Notification出现时的声音,一般不建议自定义 notification.defaults |= Notification.DEFAULT_SOUND; //设定如何振动 notification.defaults |= Notification.DEFAULT_VIBRATE; //指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身 //这符合一般的Notification的运作规范 notification.flags|=Notification.FLAG_AUTO_CANCEL; notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent); //显示这个notification mNotificationManager.notify(HELLO_ID, notification); |
这是最基本的应用,可以说除了找个合适的图标以外,其它都很简单。
使用自定义View的Notification
同Toast一样,我们也可以自已指定1个View来作为Notification展开后的显示内容,比如说在Android Market中下载的时候,Notification中会显示当前下载的进度,那么我们也来模拟1个这样的效果吧。
首先给出View的定义文件:notification_view_sample.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="3dp" > <ImageView android:id="@+id/notificationImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/stat_sys_download" /> <TextView android:id="@+id/notificationTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/notificationImage" android:layout_alignParentRight="true" android:paddingLeft="6dp" android:textColor="#FF000000" /> <TextView android:id="@+id/notificationPercent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/notificationImage" android:paddingTop="2dp" android:textColor="#FF000000" /> <ProgressBar android:id="@+id/notificationProgress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/notificationTitle" android:layout_alignLeft="@id/notificationTitle" android:layout_alignParentRight="true" android:layout_alignTop="@id/notificationPercent" android:paddingLeft="6dp" android:paddingRight="3dp" android:paddingTop="2dp" style="?android:attr/progressBarStyleHorizontal" /> </RelativeLayout> |
RelativeLayout的使用,可以参考:《教程:Android各种Layout特性和使用汇总(一)》
接下来是Java代码片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//Notification的滚动提示 String tickerText1 = "Custom view for download notification"; //Notification的图标,一般不要用彩色的 int icon1 = android.R.drawable.stat_sys_download; //Notification的Intent,即点击后转向的Activity Intent notificationIntent1 = new Intent(this, this.getClass()); notificationIntent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent contentIntent1 = PendingIntent.getActivity(this, 0, notificationIntent1, 0); //创建Notifcation Notification notification1 = new Notification(icon1, tickerText1, System.currentTimeMillis()); //设定Notification出现时的声音,一般不建议自定义 notification1.defaults |= Notification.DEFAULT_SOUND; //设定是否振动 notification1.defaults |= Notification.DEFAULT_VIBRATE; //notification.number=numbers++; //指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身 //这符合一般的Notification的运作规范 notification1.flags|=Notification.FLAG_ONGOING_EVENT; //创建RemoteViews用在Notification中 RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_view_sample); contentView.setTextViewText(R.id.notificationTitle, "Download:Facebook for android"); contentView.setTextViewText(R.id.notificationPercent, "35%"); contentView.setProgressBar(R.id.notificationProgress, 100, 35, false); notification1.contentView = contentView; notification1.contentIntent=contentIntent1; //显示这个notification mNotificationManager.notify(CUSTOM_VIEW_ID, notification1); |
注意以上代码中使用的是RemoteViews,而不是普通的View,另外使用的是PendingIntent而不是普通的Intent,这都说明了Notification是1个“远程”的东西,其中能够使用的控件是受限制的,比如说TableLayout就不能使用。看下效果图,是不是和Market中的界面很接近呢?
更好的控制Notification
动画图标怎么做?
和selector类似,定义1个XML文件放在drawable下,下面是之前用到的stat_sys_download的定义:
1 2 3 4 5 6 7 8 9 10 |
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/stat_sys_download_anim0" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim1" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim2" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim3" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim4" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim5" android:duration="200" /> </animation-list> |
如何更新Notification?
注意到前面的代码中用到的CUSTOM_VIEW_ID,这是Notification的ID,如果2次弹出的Notification的ID相同,那么Notification就只会更新而不会再次滚动提醒。之前给出的ProgressBar是不会动的,利用这个方法就可以让它动起来(或者也可以直接调用RemoteView的set方法来直接更新?未试验)
如何自定义提示的声音和振动?
//自定义提示音 notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3"); //自定义振动方式 long[] vibrate = {0,100,200,300}; notification.vibrate = vibrate;
请注意:如果使用了DEFAULT_SOUND或DEFAULT_VIBRATE,则自定义的提示音和振动无效。
在类似于短消息的应用中如何提示数量?
使用Notification的number属性,默认为0,如果是1或更大的数字,则会在图标上覆盖显示这个数字。
notification.number=notificationNumber;
Flag的使用
notification有1个flag属性,除了DEFAULT_SOUND之外,还有几个很有用的属性。
FLAG_AUTO_CANCEL:自动清除Notification,前面的例子中有用到
FLAG_INSISTENT:提示音一直不停,直至用户响应(很吵吧!)
FLAG_ONGOING_EVENT:表示这是1个正在进行的任务,不可以清除,第2个例子中有用到
FLAG_NO_CLEAR:不可以清除
© 2011, Bing. 版权所有。 所有转载请以链接方式进行。
发表评论
-
【so easy】Android手动打包流程,完全详细版!
2012-08-09 12:19 5238由于是先写的word文档,所以排版不好,看不清的朋友可以直 ... -
转:Bitmap造成OOM的讨论与解决方案
2012-07-26 16:08 11243android BitmapFactory的OutOfM ... -
【so easy~】自定义上下menu菜单
2012-06-25 18:14 2431最近做了自定义菜单,许多阅读器的样子,都是点击屏幕中央弹 ... -
【so easy】Tabhost每个tab中放入多个Activity!
2012-04-25 18:14 5108最近做完了一个客户端项目 外面是个tabhost(用于底部t ... -
【so easy~】完全退出
2012-03-08 16:52 1742String packagename = getPac ... -
【BUG解决】WebView cookies清理
2012-03-05 15:21 12110今天在项目中发现一个BUG 在使用新浪微博账户登录应用时,w ... -
Project has no default.properties file! Edit the project properties to set one.
2012-02-20 14:02 1871导入新项目 有时会:Project has no def ... -
【so easy~】完全仿QQ好友列表,自定义ExpandableListView!
2012-01-10 16:14 25080最近,需要做一个可展开的listview,不禁想起了Expan ... -
Android释放内存(结束进程)
2011-12-30 15:45 10209这两天在搞个内存清理小插件,网上很少这方面资料,之前找过清 ... -
【so easy~】 Gallery 模仿Flash广告栏~!附源码
2011-12-19 16:24 5659先上个效果图~ http://androiddada.i ... -
android 获得手机信息
2011-12-02 14:22 1375Android中与电话功能相关的类是 Telephony ... -
【so easy~】 Webview离线功能(优先cache缓存+cache缓存管理)!
2011-11-28 17:05 39711在做Webview显示服务器的html功能时 需要加入离线功能 ... -
转!SQL:char、varchar、text和nchar、nvarchar、ntext的区别
2011-11-21 16:07 1773SQL:char、varchar、text和nchar、n ... -
【so easy~】 底部菜单可移动焦点~!(仿网易新闻等应用)
2011-11-18 10:51 3664最近比较懒惰,也没有更新博客。今天就把刚刚实现的一个小效果分享 ... -
转:shape 渐变!描边!圆角!漂亮的自定义背景
2011-11-09 09:47 3977在实现背景渐变的帖子里 http://androi ... -
ListView item渐变背景(ListView必备!)
2011-11-07 15:32 7198在看他人的代码学习时,无意中发现的。很多应用中的ListVi ... -
Android之系统自带的文字外观设置及实际显示效果图
2011-11-07 14:50 1326Android之系统自带的文字外观设置及实际显示效果图 ... -
【so easy~】 Intent实现 <分享>功能!~
2011-10-31 15:06 1535http://androiddada.iteye.com/ ... -
【so easy~】 GPS的那点儿事儿~!
2011-10-28 14:27 2048http://androiddada.iteye.com/ ... -
Service使用总结 与sdk部分翻译
2011-10-27 15:12 17271. Service SDK翻译 ...
相关推荐
这就是“Service下载apk通过notification显示下载进度”的核心实现。在实际项目中,还需要处理错误、断点续传、多线程下载等复杂情况,但上述内容已经涵盖了基本的逻辑。通过实践这些知识点,你可以创建一个能够优雅...
在Android开发中,服务(Service)和通知(Notification)是两个关键组件,它们共同作用于后台任务执行,如实现断点续传的文件下载。断点续传是一种允许用户在中断下载后从上次停止的位置继续下载的技术,尤其适用于...
这就是一个简单的Service后台下载并显示Notification进度的实现。需要注意的是,Android O及以上版本对后台服务有更严格的限制,可能需要使用`JobScheduler`或`WorkManager`来调度Service。此外,为了保持通知的可见...
3. **通知(Notification)**:在下载过程中,应用通过Notification来与用户交互,显示下载进度。这是Android系统推荐的用户反馈方式,确保用户知道后台有活动正在进行。 4. **下载管理器(DownloadManager)**:...
"Android下载Notification通知栏显示"这个问题主要涉及到在Android 2.3版本(API Level 9)上,如何正确设置并显示下载进度的Notification,以及实现断点续传功能。下面将详细解释这些知识点。 1. **Notification的...
本示例将介绍如何利用Service来实现文件下载,并通过Notification实时显示下载进度,为用户提供更好的交互体验。 首先,我们创建一个MainActivity,它仅仅负责启动下载服务。在`onCreate`方法中,我们设置了一个...
首先,Android的通知系统是实现"通知栏显示下载进度"的基础。在Android中,开发者可以使用Notification类来创建和管理通知。创建一个通知通常需要设置其内容标题、内容文本、图标等基本信息,同时还可以添加额外的元...
在Android开发中,实现“自定义dialog选择下载,通知栏显示进度、service后台下载”的功能是常见的需求。这个过程涉及到用户界面(UI)的设计、服务(Service)的使用以及文件下载的管理。以下是对这些知识点的详细...
- 要在通知栏显示下载进度,需利用`Builder`的`setProgress()`方法,它接受三个参数:最大值、当前值和是否 indeterminate(不确定)。这里,最大值通常是文件总大小,当前值则是已下载大小。 - 当下载进度改变时...
通过以上步骤,你就可以在Android应用中实现一个通过Notification显示下载进度的功能。这个功能对于提供良好的用户体验非常关键,尤其是在用户可能不再直接与应用交互时。记住,始终考虑优化通知的可见性和可操作性...
本文将详细讲解如何实现一个Android应用,它能在后台执行文件下载任务,并在状态栏显示下载进度,下载完成后自动提示用户安装。这个功能的实现主要涉及以下几个关键知识点: 1. **IntentService**: - ...
本话题主要关注如何在Android平台上实现一个带有下载进度显示的通知来提示用户进行版本更新。下面将详细讨论这个过程。 首先,当APP检测到版本更新时,它需要与服务器进行通信。这一过程通常涉及到以下几个步骤: ...
要将下载进度显示在状态栏,你需要创建一个Notification,并在`onProgress()`回调中更新通知: ```java NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_...
本项目“Service下载图片用通知显示进度”正是利用了Service来实现图片的后台下载,并通过Notification在通知栏展示下载进度,提升用户体验。 首先,我们来看Service的基本用法。在Android中,创建一个Service需要...
总结来说,这个项目通过`Notification`、`Service`和`BroadcastReceiver`实现了后台文件下载并实时通知用户的功能。`Notification`提供用户界面反馈,`Service`负责文件下载,`BroadcastReceiver`监听并处理下载状态...
在Android平台上,实现通知栏下载进度的功能需要使用Notification类和NotificationManager服务。首先,创建一个NotificationChannel来定义通知的类别和行为,这在Android Oreo(8.0)及更高版本中是必需的。接着,...
在下载过程中,我们通过`Notification`向用户显示进度。`Notification`是Android系统提供的一种在状态栏显示消息的方式。我们可以创建一个`NotificationCompat.Builder`,设置通知的标题、内容、图标等属性,并利用...
在Android中,我们可以通过Notification API来实现在通知栏显示下载进度,同时可以在Activity中同步更新这一信息。 首先,我们需要创建一个Service,这个Service负责实际的下载操作。在Service中,我们可以使用...
"Android Notification"这一主题聚焦于如何创建和管理用于显示音乐下载进度的通知。在描述中提到的"Notification显示音乐下载的界面",意味着我们将讨论如何构建一个能够实时更新下载进度的定制通知。 首先,要创建...