- 浏览: 1076874 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (202)
- Android (31)
- Eclipse 使用 (14)
- 笔记 (5)
- 杂七杂八 (3)
- Java (18)
- 数据库 (6)
- web (21)
- JavaScript (24)
- Http (1)
- 杂谈 (1)
- JSP & Servlet (5)
- log4j (1)
- Linux (13)
- MS Office (3)
- postgresql (7)
- Tomcat (5)
- windows (4)
- tmp (1)
- Perl (1)
- Struts2 (17)
- JQuery (5)
- HTML5 (3)
- JSLint (2)
- iphone (1)
- ant (2)
- IE (1)
- tcp (1)
- JBoss (4)
- 正则表达式 (2)
- jmeter (1)
- CI (1)
- sonarqube (1)
- junit (1)
- chrome (1)
- mybatis (2)
- mysql (3)
- spring (2)
- maven (1)
最新评论
-
天使建站:
看这里:jquery里和操作数组的相关的:$.merg ...
JQuery 数组 -
lgywindows:
我照你的方法实现了在java中取国际化。谢谢提供!
spring mvc中,如何在 Java 代码里,获取 国际化 内容 -
ylhkaixin:
请教下大神,我转换报告的时候报错:report: [x ...
通过ant来批量执行jmeter脚本,并生成报告(附: 生成报告时报“Content is not allowed in prolog”这个错误的解决方案) -
lemon_yt:
正在找
spring mvc中,如何在 Java 代码里,获取 国际化 内容 -
Rainbow702:
alike222 写道Rainbow702 写道MyDream ...
通过ant来批量执行jmeter脚本,并生成报告(附: 生成报告时报“Content is not allowed in prolog”这个错误的解决方案)
原文地址: http://www.cnblogs.com/qianxudetianxia/archive/2011/04/26/2010930.html
友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏。
这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用。
这一篇是对上一篇《Android学习系列(2)--App自动更新之通知栏下载》的补充,因此只是以点为要,点到为止。
1.内部存储
出于考虑到用户可能禁掉了SDCard或者电脑暂时插在电脑上且为磁盘连接状态等等,对于这么个情况下,我们应该也要保证我们的程序也是能正常的运行。所以我们要考虑内部存储。
我暂时把内部存储定在/data/data/xxxxxappxxxx/files目录,核心代码如下:
//创建目录和文件 if(android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState())){ updateDir = new File(Environment.getExternalStorageDirectory(),Global.downloadDir); }else{ //files目录 updateDir = getFilesDir(); } updateFile = new File(updateDir.getPath(),getResources().getString(titleId)+".apk");
2.内部存储的权限
一起都运行的正常,但是当我们帮下下来的apk文件执行运行操作的时候,确提示如下,
"解析包错误"??其实你下载的文件并不一定就是坏的或者错误的,也可能是android系统的权限在作怪。在你执行之前,加上如下核心代码:
String cmd = "chmod +x " +updateFile.getPath(); try { Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); }
3.通知栏显示进度条组件的一个bug。
在通知栏设置进度条的可见性,会无缘无故的崩溃。
//下面一句是没有语法错误的,但是会导致程序出错 //为了解决这个问题,后面我们会再progressView外面包裹一层LinearLayout来控制可见性 updateNotification.contentView.setViewVisibility(progressViewID, View.GONE);
4.自定义进度条显示视图。
布局文件updata_nitification.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:layout_weight="2" android:paddingLeft="5dip"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="left|center_vertical" android:orientation="horizontal" android:layout_weight="1"> <ImageView android:src="@drawable/icon" android:layout_width="24dip" android:layout_height="fill_parent" android:scaleType="fitCenter"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" android:textColor="#000000" android:paddingLeft="5dip" android:textSize="16dip"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="left" android:orientation="horizontal" android:layout_weight="1"> <TextView android:id="@+id/update_notification_progresstext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#8F8F8F" android:textSize="14dip"/> <LinearLayout android:id="@+id/update_notification_progressblock" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ProgressBar android:id="@+id/update_notification_progressbar" android:layout_width="fill_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal"/> </LinearLayout> </LinearLayout> </LinearLayout>
开始下载:
updateNotification.contentIntent = updatePendingIntent; updateNotification.contentView.setProgressBar(com.cnblogs.tianxia.subway.R.id.update_notification_progressbar, 100, 0, false); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, "0%");
正在下载,显示下载进度条:
updateNotification.contentView.setProgressBar(com.cnblogs.tianxia.subway.R.id.update_notification_progressbar, 100, (int)(totalSize*100/updateTotalSize), false); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, (int)(totalSize*100/updateTotalSize)+"%"); updateNotificationManager.notify(0, updateNotification);
下载完成,点击可以安装:
//点击安装PendingIntent Uri uri = Uri.fromFile(updateFile); Intent installIntent = new Intent(Intent.ACTION_VIEW); installIntent.setDataAndType(uri, "application/vnd.android.package-archive"); updatePendingIntent = PendingIntent.getActivity(UpdateService.this, 0, installIntent, 0); updateNotification.defaults = Notification.DEFAULT_SOUND;//铃声提醒 updateNotification.contentIntent = updatePendingIntent;//安装界面 updateNotification.contentView.setViewVisibility(com.cnblogs.tianxia.subway.R.id.update_notification_progressblock, View.GONE); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, "下载完成,点击安装!"); updateNotificationManager.notify(0, updateNotification);
效果图如下:
如果你喜欢的话,请推荐一下,谢谢大家的支持!
发表评论
-
动态更新APK
2011-09-08 12:29 4338开发了一个APK后,往往后续需要进行更新升级。那么,当用户选择 ... -
Android数据保存之PreferenceActivity
2011-09-07 15:49 5745看到很多书中都没有对PreferenceActivit ... -
AsyncTask 的使用
2011-08-22 13:39 6022在开发Android应用时必须遵守单线程模型的原则: ... -
Android Service 之三(Bind Service,使用 AIDL)
2011-08-15 17:57 12131前面写了 Bind Service 的两种实现方式,接下来转一 ... -
Android Service 之三(Bind Service,使用 Messenger)
2011-08-15 17:26 10022上次讲了第一种 Bind Service 的实现方式,今天讲 ... -
Android NOtification 使用
2011-08-12 17:12 4999一、 Notification 简介 在 andro ... -
如何快速启动 Android 模拟器
2011-08-12 11:04 2493一直不知道在创建 AVD 时,那个 "enable ... -
Android 模拟器启动失败(SDL_app:emulator.exe )解决方法
2011-08-12 10:45 3530今天新建了一个AVD,给它划分了512MB的空间,然后启动之, ... -
Android Service 之三(Bind Service, 继承自 Binder 类)
2011-08-10 13:08 29961之前提及过,启动Service有两种方式:startServ ... -
android service 之二(IntentService)
2011-08-09 11:13 31664不管是何种Service,它默认都是在应用程序的主线程(亦即U ... -
android service 之一 (start service)
2011-08-08 15:45 13915我们有两种方式(start与bind)启动一个Service ... -
写Service Demo的时候遇到的一个问题小结一下
2011-08-08 14:29 8517我写了一个 Service 的Demo,但是将启动Servi ... -
百度Android工程师面试题
2011-07-28 09:49 2219百度Android工程师面试题 -
Android中UI主线程与子线程
2011-07-26 14:10 2098在一个Android 程序开始运行的时候,会单独启动一个Pro ... -
Android线程模型(Painless Threading)
2011-07-26 14:07 1558当第一次启动一个Android ... -
Android 之 传感器 应用
2011-07-26 10:42 5268传感器的使用 1.传感器类型: 方向、加速度(重力)、 ... -
Logcat出错:Could not create the view: For input string:
2011-07-22 13:39 2530使用eclipse开发android应用已经一年多了,但今 ... -
Goolge Map API 源码
2011-07-14 14:16 3855由于做GOOGLE MAP 的项目,所以就上网想找它的源码。结 ... -
如何用metersToEquatorPixels实现任意纬度的米到像素的转换
2011-07-14 13:40 4731今天又是神奇的发现:我希望在MapView的Overlay子类 ... -
申请 android google map API key(转)
2011-07-10 14:07 18411.首先要得到你的debug keystore位置: ...
相关推荐
5. **XML布局**:在布局文件中,我们可以像使用其他Android控件一样引入自定义视图,并通过`app:`属性设置自定义属性,如进度颜色、背景色、进度宽度等。 6. **资源文件**:为了存储颜色、尺寸等常量,可以在`res/...
更新进度通常会通过Notification的进度条或者自定义视图来展示。在创建通知时,我们需要指定通知ID、频道ID(Android O及以上版本)以及内容标题、内容文本等信息,同时设置进度条的最小值、最大值和当前值。 接着...
在Android开发中,自定义视图是提升用户体验和...这个自定义组件可以根据百分比和节点数目自动更新,为Android应用添加独特的视觉体验。在实际项目中,还可以根据需求进一步扩展功能,比如添加文字指示、支持渐变色等。
10. **MVVM(Model-View-ViewModel)**: 虽然这个项目没有明确提及,但现代iOS开发趋势是采用MVVM架构,其中ViewModel负责处理数据和业务逻辑,包括下载进度的计算和更新,而View则只负责展示。 通过上述知识点的...
在IT行业中,应用程序(App)的版本更新是保持软件稳定性和功能完善的重要环节。本文将深入探讨"app版本更新"这一主题,以及如何通过一个Activity和一个Service来实现这一过程,同时提供在通知栏手动取消下载的功能...
同时,你还能了解如何监听进度改变事件并更新视图,这可能涉及到`setProgress()`方法和`invalidate()`调用来重新绘制View。 总的来说,这个案例提供了实战经验,让你深入理解Android自定义View的原理和实现步骤,有...
继承`View`可以提供更大的灵活性,但需要手动处理进度更新和绘制;而继承`AppCompatProgressBar`则可以直接利用已有的进度更新机制,只需专注于自定义绘制部分。 ```java public class RingProgressView extends ...
存储和检索笔划墨迹 添加 InkToolbar 触摸 鼠标 Keyboard 访问键 键盘加速键 键盘事件 适用于键盘、手柄、遥控器和辅助功能工具的焦点导航 编程焦点导航 响应触摸键盘的存在 使用输入范围更改触摸键盘 文本输入 ...
在本压缩包中,我们拥有一个名为"Android应用源码之安卓应用市场app商店源码"的项目,它是一个Android应用程序的源代码,用于构建一个类似应用商店的平台。这个项目可以帮助开发者理解如何实现一个完整的应用分发...
在开发手机应用程序(APP)时,"上传"和"评论"功能是常见的用户交互核心,尤其对于社交、媒体分享和电子商务类应用来说至关重要。这里我们将深入探讨如何在Android平台上实现这些功能,因为从标签和提供的文件名...
一个典型的iOS应用由多个组件构成,包括ViewController(视图控制器)、Model(模型)、View(视图)和Storyboard(故事板)。在这个漫画App的Demo中,我们可能看到多个ViewController,用于展示不同的页面,如首页...
Android的TextView组件可以用于显示文本,但高级功能如动态高亮、注释和搜索可能需要自定义视图或者第三方库的支持。 数据存储是另一个关键方面。阅读进度、书签和用户偏好通常需要持久化存储。Android提供SQLite...
在Android开发中,ProgressBar是一个非常常见的组件,它...通过这个Demo,开发者可以学习到如何在Android中实现自定义视图,以及如何结合Java和XML进行交互。这对于提高Android UI设计和编程能力具有很好的实践价值。
"Offline-MapBox-App-master"中的代码展示了如何使用MapBox的离线地图API来实现这一过程,包括指定区域、设置下载任务、监听下载进度和状态等。 四、存储与管理离线地图 下载的离线地图数据会被存储在设备的特定...
设计师需要了解XML布局文件的编写,以及自定义视图的实现。 3. **图书资源管理**:App内含大量电子书,这意味着有复杂的数据库管理和数据存储机制。可能采用了SQLite数据库来存储书籍信息,包括作者、类别、简介等...
【Android安卓APP斗地主源码】是一款基于Android平台开发的桌面卡牌游戏,它提供了完整的源代码,供开发者学习和研究。斗地主游戏在中国非常流行,它是一种三人玩的扑克游戏,由两个农民联合对抗地主。通过分析这款...
在描述中提到的“布局”和“图文混排”都涉及到Cocoa Touch的视图(UIView)和控制器(UIViewController)的概念。 4. **UI设计与布局**:在iOS开发中,界面设计通常使用Storyboard或XIB文件进行,通过Auto Layout...
在iOS开发中,为了提供更好的用户体验,我们常常需要自定义UI控件来满足特定的设计需求。...无论是在App Store的海量应用中脱颖而出,还是满足设计师的独特需求,掌握自定义控件的技巧都是iOS开发者的必备技能之一。
1. **App Inventor界面介绍**:学习如何使用App Inventor的工作区,包括设计视图、逻辑编辑器(积木块)和手机模拟器。 2. **基本组件使用**:掌握如按钮、文本输入框、标签等基本UI组件的添加、配置和事件处理。 ...
2. **用户界面(UI)设计**:设计一个吸引人的并易于导航的用户界面是关键,可能涉及到布局管理器如LinearLayout, ConstraintLayout等,以及自定义视图和动画。 3. **网络编程**:在线学习系统需要与服务器交互,...