Android使用IntentService进行apk更新示例代码

通常在使用service更新应用时最常出现的问题就是Notification进度的更新问题、service在什么时间关闭以及需要我们自己在Service中创建新的线程处理耗时操作,当然这种也是可以实现的但是会显得略微繁琐

经过对比发现可以使用IntentService已经实现了对耗时操作的包装出来,我们只需要实现IntentService中的onHandleIntent方法就可以在其中进行耗时操作的处理,在处理下载问题时发现在使用intentservice时暂时没有发现可以优雅的进行进度回调的实现方法,所以我这边使用了本地广播的形式来进行进度刷新。

添加了当前状态判断,当应用处于前台状态时直接进行安装,当应用处于后台时弹出notification弹窗点击后安装,示例如下图:

先创建广播

public static class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      switch (intent.getAction()) {
        case ACTION_TYPE_PREPARE:
          if (downloadCallback != null) {
            downloadCallback.onPrepare();
          }
          break;
        case ACTION_TYPE_PROGRESS:
          int progress = intent.getIntExtra("progress", 0);
//          Log.d("progress", "|- " + progress + " -|");
          if (downloadCallback != null) {
            downloadCallback.onProgress(progress);
          }
          break;
        case ACTION_TYPE_COMPLETE:
          String file_path = intent.getStringExtra("file_path");
          if (!TextUtils.isEmpty(file_path)) {
            File file = new File(file_path);
            if (file.exists()) {
              if (downloadCallback != null) {
                downloadCallback.onComplete(file);
              }
            }
          }
          break;
        case ACTION_TYPE_FAIL:
          String error = intent.getStringExtra("error");
          if (downloadCallback != null) {
            downloadCallback.onFail(error + "");
          }
          break;
      }
    }

然后在IntentService中初始化本地广播并发送信息

@Override
  public void onCreate() {
    super.onCreate();
    mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
  }

  // 在下载进度刷新的地方进行回调
  private void progress(int progress) {
    Intent intent = new Intent(FileDownloaderManager.ACTION_TYPE_PROGRESS);
    intent.putExtra("progress", progress);
    mLocalBroadcastManager.sendBroadcast(intent);
  }

  private void downApk(String url) {
  .....
  .....
   progress(progress);
  .....
  .....
  }

在activity中使用

mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
mBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_TYPE_PREPARE);
intentFilter.addAction(ACTION_TYPE_PROGRESS);
intentFilter.addAction(ACTION_TYPE_COMPLETE);
intentFilter.addAction(ACTION_TYPE_FAIL);
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);
// ondestory时调用
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);

以上源码已进行封装,方便使用具体操作步骤如下:

|- 初始化及注册回调

//初始化文件下载管理类
FileDownloaderManager.init(context)
// 注册下载进度监听,并开启广播接收
FileDownloaderManager.registerDownload(object : FileDownloaderManager.DownloadCallback {
      override fun onComplete(file: File) = mainView.downloadSucc(file)

      override fun onFail(msg: String?) = Unit

      override fun onProgress(progress: Int) = mainView.onProgress(progress)

      override fun onPrepare() = Unit

    })
//开始下载
FileDownloaderManager.download(url)

|- 在下载完成后进行资源重置

FileDownloaderManager.unbinder()

源码地址:源码地址

文档地址:文档地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android实现检查并下载APK更新、安装APK及获取网络信息的方法
(0)

相关推荐

  • Android实现检查并下载APK更新、安装APK及获取网络信息的方法

    本文所述实例为一个天气预报中的android代码,主要包括了下载和安装APK.检查Apk更新.显示'已经是最新'或者'无法获取版本信息'对话框.获取当前客户端版本信息.显示版本更新通知对话框.显示下载对话框.判断是否挂载了SD卡.显示文件大小格式:2个小数点显示等.具体实现代码如下: import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.I

  • Android使用IntentService进行apk更新示例代码

    通常在使用service更新应用时最常出现的问题就是Notification进度的更新问题.service在什么时间关闭以及需要我们自己在Service中创建新的线程处理耗时操作,当然这种也是可以实现的但是会显得略微繁琐 经过对比发现可以使用IntentService已经实现了对耗时操作的包装出来,我们只需要实现IntentService中的onHandleIntent方法就可以在其中进行耗时操作的处理,在处理下载问题时发现在使用intentservice时暂时没有发现可以优雅的进行进度回调的实

  • Android 基于IntentService的文件下载的示例代码

    文件下载这种事情是很耗时的.之前使用AsyncTask这样的异步类来做下载,然后切到后台就被干掉.所以打算试试Service.(不过按目前那些系统的尿性,其实Service也分分钟被干掉) 不过,这里并不是直接使用Service类,而是使用的是继承自Service的IntentService. 这个东西有三大好处: 1.他有个任务队列: 2.任务队列执行完后会自动停止: 3.他会起一个独立的线程,耗时操作不会影响你app的主线程. 这么自动化的东西简直省心. 话不多说,开始撸代码. 首先,要建个

  • Android自定义滑动验证条的示例代码

    本文介绍了Android自定义滑动验证条的示例代码,分享给大家,具体如下: *注:不知道为什么,h5的标签在这里没用了,所以我也只能用Markdown的语法来写了 项目地址:https://github.com/994866755/handsomeYe.seekbar.github.io 需求: 在我们的某些应用中需要滑动验证.比如说这个样子的: 刚开始我也很懵逼要怎么去弄,结果我去看了一些人的代码,有人是用自定义viewgroup去做,就是viewgroup包含滑动块和滑动条.但我觉得太麻烦,

  • Android自定义控件之翻转按钮的示例代码

    本文介绍了Android自定义控件之翻转按钮的示例代码,分享给大家,具体如下: 先看一下效果 一.先定义控件的基本结构 这里我们定义一个容器,所以是在ViewGroup的基础上扩展. 简单起见,直接使用扩展自ViewGroup的LinearLayout,并将我们的控件扩展自LinearLayout. 1.按钮的基本布局如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr

  • Android视频悬浮窗口实现的示例代码

    前言 本文例子实现了点击显示悬浮窗口,同时窗口可播放视频,拖动位置,点击关闭及返回 APP 页面,通过例子来讲述悬浮窗口实现原理及细节处理,效果图如下所示: 悬浮窗口.gif 原理 WindowManager 对 View 视图进行添加.移除.更新处理: WindowManager.LayoutParams 对窗口参数进行一系列设置. 实现 首先,需要添加相对应悬浮窗权限: <uses-permission android:name="android.permission.SYSTEM_A

  • Android实现强制下线功能的示例代码

    一.回顾 上次连载写了两个类,一个类ActivityCollector.java用于管理所有的活动:一个类是BaseActivity.java作为所有活动的父类: 还有一个放在layout目录中的登录界面login.xml 二.登录页面的活动 接下来写一个登录页面的活动,继承自BaseActivity.java package com.example.broadcastbestpractice; import android.content.Intent; import android.os.B

  • Android输入框实时模糊搜索效果的示例代码

    Android输入框实时模糊搜索 很多开发场景会用到搜索框实时模糊搜索来帮助用户输入内容,如图 思路是在EditText 字符变动的时候 弹出ListPopupwindow并更新列表,这样的做法google已经封装为AutoCompleteTextView 用法 mAutoCompleteTextView.setAdapter(adapter); mAutoCompleteTextView.setFocusable(true); mAutoCompleteTextView.setOnItemCl

  • Android实现用文字生成图片的示例代码

    本文介绍了Android实现用文字生成图片的示例代码,分享给大家,具体如下: 效果图 我们先来看看效果图,可以看到下图由各种颜色的"美"字拼接而成,形成了一张不一样的图片. 原理 生成这种图片的原理很简单,但是当时看开源项目时愣是看不懂,因为没学过Python,但是仔细研究,终于能慢慢的理解该开源项目源码,并把它改写成Android平台的源代码.下面把这个算法的主要内容讲给大家,该算法大致原理如下: 1.根据原图片的大小和字体的大小创建一张空白图片 2.把原图片按字体的大小分成若干块,

  • Android 给图片加上水印的示例代码(支持logo+文字)

    本文介绍了Android 给图片加上水印的示例代码(支持logo+文字),分享给大家,具体如下: 现在我们想要往图片上打上水印,该水印应符合这样的需求的: 支持logo+文字: 文字信息支持多行展示: 用户可以选择水印在图片上的生成位置(左上.右上.右下和左下). 粗略的结构图低配版大概就长这样... 水印结构图.png 现在提供这样的一种思路去实现这一个需求,我们可以通过自定义一个view,view的布局中包含logo.公司名称和相关信息,这个view就是我们要打上图片的水印. 这样的一个vi

  • Android TextView实现词组高亮的示例代码

    本文介绍了Android TextView实现词组高亮的示例代码,分享给大家,具体如下: HighlightTextView Android文本高亮控件,基于View实现. 特点 文本高亮 单词自动换行 高亮词组保持在同一行显示 效果如下: 主要逻辑: 两个 Paint 负责绘制不同的文字 在每次绘制之前计算将要绘制的文本是否会超出屏幕宽度,如果超出则换行 protected void onDraw(Canvas canvas) { super.onDraw(canvas); float x_d

随机推荐