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

下载完成,点击可以安装:

//点击安装PendingIntentUri 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);

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

更多相关文章

  1. 数据存储有几种方式?分别是什么?
  2. 优秀的Android文件管理器
  3. 新浪微博Android客户端学习记录一:完成Logo界面
  4. Android(安卓)UI布局
  5. 浅析Android.jar文件中的包
  6. init进程详细分析--基于android 10
  7. android 2.2 的新功能 ndk-gdb调试.
  8. android上解析.plist配置文件的xml解析器
  9. Android中DVM和java中的JVM区别

随机推荐

  1. asynchttpclient的post方法发送json格式
  2. Android 获取当前activity所在类SimpleNa
  3. Android指纹识别
  4. Android简单的调用系统相机和相册
  5. Android 打开office文档
  6. 用Java 在 KSOAP中序列化复杂对象数组实
  7. 小Demo小知识-android:foreground与andro
  8. Ubuntu开发软件:jdk,android studio,android
  9. 如何修改原有的Android应用和添加应用
  10. Android 焦点调试