`
Rainbow702
  • 浏览: 1076897 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类

App自动更新之自定义进度视图和内部存储(转)

阅读更多

原文地址: 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);

 效果图如下:
   如果你喜欢的话,请推荐一下,谢谢大家的支持!

分享到:
评论

相关推荐

    自定义带进度的圆形progressBar

    5. **XML布局**:在布局文件中,我们可以像使用其他Android控件一样引入自定义视图,并通过`app:`属性设置自定义属性,如进度颜色、背景色、进度宽度等。 6. **资源文件**:为了存储颜色、尺寸等常量,可以在`res/...

    android 后台更新app demo

    更新进度通常会通过Notification的进度条或者自定义视图来展示。在创建通知时,我们需要指定通知ID、频道ID(Android O及以上版本)以及内容标题、内容文本等信息,同时设置进度条的最小值、最大值和当前值。 接着...

    Android自定义带动画圆环进度条

    在Android开发中,自定义视图是提升用户体验和...这个自定义组件可以根据百分比和节点数目自动更新,为Android应用添加独特的视觉体验。在实际项目中,还可以根据需求进一步扩展功能,比如添加文字指示、支持渐变色等。

    ios-Objective-C高仿app下载进度图标.zip

    10. **MVVM(Model-View-ViewModel)**: 虽然这个项目没有明确提及,但现代iOS开发趋势是采用MVVM架构,其中ViewModel负责处理数据和业务逻辑,包括下载进度的计算和更新,而View则只负责展示。 通过上述知识点的...

    app版本更新

    在IT行业中,应用程序(App)的版本更新是保持软件稳定性和功能完善的重要环节。本文将深入探讨"app版本更新"这一主题,以及如何通过一个Activity和一个Service来实现这一过程,同时提供在通知栏手动取消下载的功能...

    andriod自定义view 小案例(带进度的圆形进度条)源码下载

    同时,你还能了解如何监听进度改变事件并更新视图,这可能涉及到`setProgress()`方法和`invalidate()`调用来重新绘制View。 总的来说,这个案例提供了实战经验,让你深入理解Android自定义View的原理和实现步骤,有...

    自定义View环形Progress

    继承`View`可以提供更大的灵活性,但需要手动处理进度更新和绘制;而继承`AppCompatProgressBar`则可以直接利用已有的进度更新机制,只需专注于自定义绘制部分。 ```java public class RingProgressView extends ...

    微软UWP开发教程_2263页.pdf

    存储和检索笔划墨迹 添加 InkToolbar 触摸 鼠标 Keyboard 访问键 键盘加速键 键盘事件 适用于键盘、手柄、遥控器和辅助功能工具的焦点导航 编程焦点导航 响应触摸键盘的存在 使用输入范围更改触摸键盘 文本输入 ...

    Android应用源码之安卓应用市场app商店源码.zip

    在本压缩包中,我们拥有一个名为"Android应用源码之安卓应用市场app商店源码"的项目,它是一个Android应用程序的源代码,用于构建一个类似应用商店的平台。这个项目可以帮助开发者理解如何实现一个完整的应用分发...

    手机APP,一般上传,和评论

    在开发手机应用程序(APP)时,"上传"和"评论"功能是常见的用户交互核心,尤其对于社交、媒体分享和电子商务类应用来说至关重要。这里我们将深入探讨如何在Android平台上实现这些功能,因为从标签和提供的文件名...

    IOS_漫画app_demo

    一个典型的iOS应用由多个组件构成,包括ViewController(视图控制器)、Model(模型)、View(视图)和Storyboard(故事板)。在这个漫画App的Demo中,我们可能看到多个ViewController,用于展示不同的页面,如首页...

    Android-一个易于集成和扩展的阅读App

    Android的TextView组件可以用于显示文本,但高级功能如动态高亮、注释和搜索可能需要自定义视图或者第三方库的支持。 数据存储是另一个关键方面。阅读进度、书签和用户偏好通常需要持久化存储。Android提供SQLite...

    Android 带文字的ProgressBar Demo源码.rar

    在Android开发中,ProgressBar是一个非常常见的组件,它...通过这个Demo,开发者可以学习到如何在Android中实现自定义视图,以及如何结合Java和XML进行交互。这对于提高Android UI设计和编程能力具有很好的实践价值。

    Offline-MapBox-App-master_map_

    "Offline-MapBox-App-master"中的代码展示了如何使用MapBox的离线地图API来实现这一过程,包括指定区域、设置下载任务、监听下载进度和状态等。 四、存储与管理离线地图 下载的离线地图数据会被存储在设备的特定...

    安卓应用-电子图书-趣小说app v6.1.0.06.zip

    设计师需要了解XML布局文件的编写,以及自定义视图的实现。 3. **图书资源管理**:App内含大量电子书,这意味着有复杂的数据库管理和数据存储机制。可能采用了SQLite数据库来存储书籍信息,包括作者、类别、简介等...

    android安卓app 斗地主源码.游戏

    【Android安卓APP斗地主源码】是一款基于Android平台开发的桌面卡牌游戏,它提供了完整的源代码,供开发者学习和研究。斗地主游戏在中国非常流行,它是一种三人玩的扑克游戏,由两个农民联合对抗地主。通过分析这款...

    境界吧App源码

    在描述中提到的“布局”和“图文混排”都涉及到Cocoa Touch的视图(UIView)和控制器(UIViewController)的概念。 4. **UI设计与布局**:在iOS开发中,界面设计通常使用Storyboard或XIB文件进行,通过Auto Layout...

    下载进度条

    在iOS开发中,为了提供更好的用户体验,我们常常需要自定义UI控件来满足特定的设计需求。...无论是在App Store的海量应用中脱颖而出,还是满足设计师的独特需求,掌握自定义控件的技巧都是iOS开发者的必备技能之一。

    App Inventor零基础Android移动应用开发-浙江大学城市学院

    1. **App Inventor界面介绍**:学习如何使用App Inventor的工作区,包括设计视图、逻辑编辑器(积木块)和手机模拟器。 2. **基本组件使用**:掌握如按钮、文本输入框、标签等基本UI组件的添加、配置和事件处理。 ...

    安卓Android精品课程在线学习系统app设计毕业源码案例设计.zip

    2. **用户界面(UI)设计**:设计一个吸引人的并易于导航的用户界面是关键,可能涉及到布局管理器如LinearLayout, ConstraintLayout等,以及自定义视图和动画。 3. **网络编程**:在线学习系统需要与服务器交互,...

Global site tag (gtag.js) - Google Analytics