Flutter实现app自动升级

 

话不多说,有过开发过移动应用的人都应该自动升级流程,首先获取本地应用版本,然后从服务器获取线上移动应用版本号作比较是否升级。

第一步获取版本信息

API:https://pub.dev/packages/package_info

/**
 *  获取应用版本号
 * */
_getVersion() async {
  PackageInfo packageInfo = await PackageInfo.fromPlatform();
  setState(() {
    _version = packageInfo.version;
  });
}

第二步获取文件存储路径

API:https://pub.dev/packages/path_provider

/**
 *  获取文件存储路径
 * */
_getSavePath() async {
  var directory = await getExternalStorageDirectory();
  String storageDirectory = directory.path;
  _savePath = storageDirectory;
  print("StorageDirectory:${_savePath}");
}

第三步获检查应用的存储权限

API:https://pub.dev/packages/permission_handler

/**
 *  检测存储权限
 * */
Future _checkPermission() async {
  if (Theme
      .of(context)
      .platform == TargetPlatform.android) {
    final status = await Permission.storage.status;
    if (status != PermissionStatus.granted) {
      final result = await Permission.storage.request();
      if (result == PermissionStatus.granted) {
        return true;
      } else {
        return false;
      }
    } else {
      return true;
    }
  }
  return false;
}

第四步下载需要升级的应用地址

API: https://pub.dev/packages/dio

/**
 *  下载应用
 * */
_download() async {
  _checkPermission();
  String appName = "bby.apk";
  String downPath = "$_savePath/$appName";
  String apkUrl = "https://xxxxxx.apk";//远程应用地址
  Dio dio = new Dio();
  await dio.download(
      apkUrl, downPath, onReceiveProgress: (int count, int total) {
    print("${(count / total * 100).toStringAsFixed(0)}%");

    setState(() {
      _value = double.tryParse((count / total).toStringAsFixed(1));
    });
  });
  print("$downPath");
  await OpenFile.open(
      downPath, type: "application/vnd.android.package-archive");
}

第五步打开下载文件

API:https://pub.dev/packages/open_file

由于是.apk文件打开方式为

{".apk",    "application/vnd.android.package-archive"},

await OpenFile.open( downPath, type: "application/vnd.android.package-archive");

另外要配置 ,不然安装的时候可能会找不到文件


    
        ...
        
            
        
    
filepaths.xml文件


    
        
        
        
    

不要忘了Android需要添加权限




你可能感兴趣的:(移动开发,flutter)