Flutter实现android应用内版本更新功能

#插件
1.package_info:获取应用版本信息
2.flutter_downloader :从服务器下载apk文件
配置:

provider
     android:name="androidx.work.impl.WorkManagerInitializer"
     android:authorities="${applicationId}.workmanager-init"
     android:enabled="false"
     android:exported="false" />

 <provider
     android:name="vn.hunghd.flutterdownloader.FlutterDownloaderInitializer"
     android:authorities="${applicationId}.flutter-downloader-init"
     android:exported="false">
     <!-- changes this number to configure the maximum number of concurrent tasks -->
     <meta-data
         android:name="vn.hunghd.flutterdownloader.MAX_CONCURRENT_TASKS"
         android:value="5" />
 </provider>

添加安装文件权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /

3.open_file:打开下载的apk文件,并自动安装
#代码
##获取应用版本信息

PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
      var currentVersionCode = packageInfo.buildNumber;
      print("version:" + currentVersionCode + ",net:" + _serviceVersionCode);
      //_serviceVersionCode为从服务器获取的升级最新的版本号
      if (int.parse(_serviceVersionCode) > int.parse(currentVersionCode)) {
        _showNewVersionAppDialog(packageInfo); //弹出“版本更新”的对话框
      }
    });

##下载apk文件
先对FlutterDownloader进行初始化

WidgetsFlutterBinding.ensureInitialized();
await FlutterDownloader.initialize();

创建下载任务
先获取安装地址

 Future<String> _apkLocalPath() async {
    final directory = await getExternalStorageDirectory();
    _localPath = directory.path.toString();
    return _localPath;
  }

创建存储文件

final path = (await _apkLocalPath()) + '/Download';
    final saveDir = Directory(path);
    bool hasExisted = await saveDir.exists();
    if (!hasExisted) {
      saveDir.create();
    }

下载

 //下载
    final tastId = await FlutterDownloader.enqueue(
        url: downloadUrl,
        fileName: "apkname.apk",
        savedDir: path,
        showNotification: true,
        openFileFromNotification: true);

下载监听

 FlutterDownloader.registerCallback(downloadCallback);
 static void downloadCallback(
      String id, DownloadTaskStatus status, int progress) {
    //当下载完成时,调用安装
    String dir;
    if (status == DownloadTaskStatus.complete) {
      FlutterDownloader.initialize().then((onValue){
        FlutterDownloader.loadTasks().then((onValue){
          DownloadTask downloadTask = onValue[0];
          dir = downloadTask.savedDir;
          OpenFile.open(dir);
          FlutterDownloader.open(taskId: id);
        });
      });



    }
  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值