android通过service实现更新并显示下载进度条,最后自动安装实例

首先是service:

service 自定义返回的IBinder:

 /**
     * DownloadBinder中定义了一些实用的方法
     */ 
    public class DownloadBinder extends Binder
    {
        public void start()
        { 
            new Thread()
            { 
                public void run()
                { 
                    createNotification(NOTIFY_ID);  //创建通知  
                    startDownload(); //下载  
                }; 
            }.start();
        } 
 
        /**
         * 获取进度
         * @return 进度
         */ 
        public int getProgress()
        { 
            return progress; 
        } 
       
        /**
         * 设置版本信息对象
         * @param vi 版本信息对象
         */
        public void setVersionInfo(VersionInfo vi){
         versionInfo = vi;
        }
    }

其中activity通过获取到的IBinder操作这个service的两个耗时但最重要的方法:

/**
  * 创建通知
  * @param notifyId 通知的ID
  */
 private void createNotification(int notifyId) {
  int icon = R.drawable.ic_launcher;
  CharSequence tickerText = "开始下载";
  long when = System.currentTimeMillis();
  notification = new Notification(icon, tickerText, when);

  // 放置在"正在运行"栏目中
  notification.flags = Notification.FLAG_ONGOING_EVENT;

  RemoteViews contentView = new RemoteViews(mContext.getPackageName(),
    R.layout.downotice);
  contentView.setTextViewText(R.id.fileName, "正在下载:" + versionInfo.getApkName());//TODO 文件名

  // 指定个性化视图
  notification.contentView = contentView;

  Intent intent = new Intent(this, LoginActivity.class);
  PendingIntent contentIntent = PendingIntent.getActivity(mContext, 0,
    intent, PendingIntent.FLAG_UPDATE_CURRENT);
  // 指定内容意图
  notification.contentIntent = contentIntent;
  // 最后别忘了通知一下,否则不会更新
  notificationManager.notify(notifyId, notification);
 }
   /**
  * 下载
  */
    public void startDownload(){
     
     InputStream is = null;
  FileOutputStream fos = null;
  try {
   
   //初始化数据
      fileSize = 0;
      readSize = 0;
      downSize = 0;
      progress = 0;
      
   HttpClient client = new DefaultHttpClient();
   String apkUrl = getApkUrl(versionInfo);
   HttpGet get = new HttpGet(apkUrl);

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值