Android DownloadManager 系统下载器实现APP升级功能

一、下载路径的设置和获取。

   (1)request.setDestinationInExternalFilesDir(context, dirType, subPath);

   (2)request.setDestinationInExternalPublicDir(dirType, subPath)

 方式(1)是设置下载文件路径到存储的外部路径,context.getExternalFilesDir(dirType)获取到文件路径

具体路径:/storage/emulated/0/Android/data/(应用包名)

方式(2)设置下载文件路径到外部存储的公共目录,其实也就是SD卡的根目录,Environment.getExternalStorageDirectory().getAbsolutePath()/文件路径名/文件名。

注:1、两种方式容易误解成(1)是存储到系统/data/tata 路径下面。

       2、如果用外部公共存储路径,需要判断路径是否存在,否则路劲不存在会抛异常

    File folder = Environment.getExternalStoragePublicDirectory(DOWNLOAD_FOLDER_NAME);

        if (!folder.exists() || !folder.isDirectory()) {

            folder.mkdirs();

        }

二、系统下载器禁用

   由于Android系统的开源性,用户可以在系统设置-应用-找到系统下载器,禁用系统下载器,如果系统下载器禁用代码不做处理的话,

downloadManager.enqueue(request) 会抛系统异常。

解决方案:跳转到系统设置页,让用户开启下载器。

//判断系统下载管理器是否开启

   int state = getPackageManager().getApplicationEnabledSetting(“com.android.providers.downloads”);

       if(state==PackageManager.COMPONENT_ENABLED_STATE_DISABLED||

         state==PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER

         ||state==PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED){//不可用

         

         }else{

         

         }

但是在实际的测试过程中,用户打开下载器需要重启才能生效,不然会卡在downloadManager.enqueue(request),暂时没有找到问题的原因。

三、下载完成广播接收处理

建议使用静态注册方式注册广播接收器。

动态注册:开始下载的时候注册,下载完成注册。下载过程中可能会因为某些原因导致下载不成功,这个时候广播接收器就不会去注册,

这样会导致广播接收器重复注册。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容