当前位置: 首页 > news >正文

网站图片上传代码论坛前端模板

网站图片上传代码,论坛前端模板,如何接单做网站,个人nas做网站flutter开发实战-应用更新apk下载、安装apk、启动应用实现 在开发过程中#xff0c;经常遇到需要更新下载新版本的apk文件#xff0c;之后进行应用更新apk下载、安装apk、启动应用。我们在flutter工程中实现下载apk#xff0c;判断当前版本与需要更新安装的版本进行比对判断…flutter开发实战-应用更新apk下载、安装apk、启动应用实现 在开发过程中经常遇到需要更新下载新版本的apk文件之后进行应用更新apk下载、安装apk、启动应用。我们在flutter工程中实现下载apk判断当前版本与需要更新安装的版本进行比对判断通过判断VersionCode来确定下载新版版APK 一、应用更新apk下载 当应用需要更新的时候我们需要判断版本号在flutter工程中versionCode是工程中的pubspec.yaml中的version确定的。 如version: 1.0.01 version为1.0.0versionCode为1 需要我们获取接口需要判断的就是versionCode确定是否需要下载apk。 1.1、获取新版本地址接口 获取新版本的接口使用的是Dio库。dio 是一个强大的 Dart HTTP 请求库支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时以及自定义适配器等。 这里的请求为GET请求 Response? response await dio.get(requestUrl,queryParameters: params,options: Options(contentType: Headers.jsonContentType));我这里就不写请求的逻辑了。 根据请求获取到了 // 获取检查版本 Futurevoid checkVersion() async {var params {};ApiRepository.checkVersion(params: params,success: (response) {// {version:2,url:http://wwww.laileshuo.com/download/myapp_v1.0.0_release.apk}var object response.object;if (object ! null (object is Map) object.isNotEmpty) {String? versionCode object[versionCode];String? url object[url];// 判断是否需要下载更新String versionCodeStr ;if (version ! null) {versionCodeStr ${versionCode};}checkAppVersionUpdate(versionCodeStr: versionCodeStr, apkUrl: url);}print(checkVersion params${params}, object${object.toString()});},failure: (error) {print(checkVersion params${params}, error${error.toString()});});}通过检查新版本接口获取到了url及versionCode这里的versionCode和pubspec.yaml的进行比较看是否需要下载apk。 判断下载apk Futurevoid checkAppVersionUpdate({String? versionCodeStr, String? apkUrl}) async {try {if (versionCodeStr ! null apkUrl ! null versionCodeStr.isNotEmpty apkUrl.isNotEmpty) {String curVersionCodeStr await PlatformUtils.getBuildNum();int versionCode int.parse(versionCodeStr);int curVersionCode int.parse(curVersionCodeStr);if (versionCode curVersionCode) {// 需要更新的版本code大于当前的版本才更新}}} catch (e) {print(appVersionUpdate apkUrl:${apkUrl}, version${version}, exception${e.toString()});}}1.2、下载Apk 在判断需要更新的时候我们需要下载新版本的apk。下载的库我们使用的也是Dio。 下载的代码可参考https://blog.csdn.net/gloryFlow/article/details/131658621 当获取到新版的下载地址url时候需要下载apk void downApk(String url, String saveDestPath) {HttpApi().doDownload(url, saveDestPath, cancelToken: CancelToken(),progress: (int received, int total) {// 下载进度setState(() {_downloadRatio (received / total);if (_downloadRatio 1) {_downloading false;}_downloadIndicator (_downloadRatio * 100).toStringAsFixed(2) %;});}, completion: () {// 下载成功FlutterLoadingHud.showToast(message: \下载完成\);}, failure: (error) {// 下载出错FlutterLoadingHud.showToast(message: error.message);}); }下载完成后可以执行安装并且启动操作了。 二、APK安装及启动 APK安装及启动需要原生插件来实现。 2.1、创建原生插件flutter_package_manager 创建flutter plugin我使用的工具是Android studio。 配置如下内容 Project nameProject locationDescriptionProject type PluginAndroid languageiOS languagePlatforms 如图所示 我们需要实现installThenStart /// An implementation of [FlutterPackageManagerPlatform] that uses method channels. class MethodChannelFlutterPackageManager extends FlutterPackageManagerPlatform {/// The method channel used to interact with the native platform.visibleForTestingfinal methodChannel const MethodChannel(flutter_package_manager);overrideFutureString? getPlatformVersion() async {final version await methodChannel.invokeMethodString(getPlatformVersion);return version;}overrideFuturevoid installThenStart(String apkFilePath, String activity) async {final result await methodChannel.invokeMethodvoid(installThenStart);return result;} }可以看到定义了installThenStart需要apkFilePath与activity作为参数。 在Android端实现由于我这边需要静默安装apk在后台安装不出现安装界面的提示 public class FlutterPackageManager implements MethodCallHandler {private static final String TAG FlutterPackageManager;private final Registrar registrar;/*** Plugin registration.*/public static void registerWith(Registrar registrar) {final MethodChannel channel new MethodChannel(registrar.messenger(), flutter_package_manager);channel.setMethodCallHandler(new FlutterPackageManager(registrar));}private FlutterPackageManager(Registrar registrar) {this.registrar registrar;}Overridepublic void onMethodCall(MethodCall call, Result result) {if (call.method.equals(getPlatformVersion)) {result.success(android.os.Build.VERSION.RELEASE);} else if (call.method.equals(installThenStart)) {String path call.arguments[filePath];String activity call.arguments[activity];installApk(path, activity);} else {result.notImplemented();}}void installApk(String path, String activity) {// root权限静默安装实现 实现实际使用的是su pm install -r filePath命令。Process process null; OutputStream out null; InputStream in null; try { // 请求root process Runtime.getRuntime().exec(su); out process.getOutputStream(); // 调用安装 out.write((pm install -r path \n).getBytes()); in process.getInputStream(); int len 0; byte[] bs new byte[256]; while (-1 ! (len in.read(bs))) { String state new String(bs, 0, len); if (state.equals(Success\n)) { //安装成功后的操作 startActivity(activity);} } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (out ! null) { out.flush(); out.close(); } if (in ! null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } } }void startActivity(String activity) {// activity格式为com.laileshuo.app/com.laileshuo.app.MainActivityIntent mIntent new Intent(); val componentName ComponentName(this, activity)val intent Intent().setComponent(componentName)startActivity(intent)} }当然工程中的AndroidManifest.xml也需要做相应的调整如下 manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolspackagecom.laileshuo.appapplicationtools:replaceandroid:labelandroid:label我的应用android:name${applicationName}android:iconmipmap/ic_launcheractivityandroid:namecom.laileshuo.app.MainActivityandroid:exportedtrueandroid:launchModesingleTopandroid:themestyle/LaunchThemeandroid:configChangesorientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiModeandroid:hardwareAcceleratedtrueandroid:windowSoftInputModeadjustResize!-- Specifies an Android theme to apply to this Activity as soon asthe Android process has started. This theme is visible to the userwhile the Flutter UI initializes. After that, this theme continuesto determine the Window background behind the Flutter UI. --meta-dataandroid:nameio.flutter.embedding.android.NormalThemeandroid:resourcestyle/NormalTheme/intent-filteraction android:nameandroid.intent.action.MAIN/category android:nameandroid.intent.category.LAUNCHER//intent-filter/activity!-- Dont delete the meta-data below.This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --meta-dataandroid:nameflutterEmbeddingandroid:value2 //application /manifest2.2、如果非root环境安装可以使用open_file插件 需要在pubspec.yaml引入插件 dependencies:open_file: ^3.3.2在可以直接使用代码安装apk import package:open_file/open_file.dart;OpenFile.open(apkFilePath);当与关于FileProvider的其他插件发生冲突时需要配置AndroidManifest.xml manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolspackagexxx.xxx.xxxxxapplication...providerandroid:nameandroidx.core.content.FileProviderandroid:authorities${applicationId}.fileProviderandroid:exportedfalseandroid:grantUriPermissionstruetools:replaceandroid:authoritiesmeta-dataandroid:nameandroid.support.FILE_PROVIDER_PATHSandroid:resourcexml/filepathstools:replaceandroid:resource //provider/application /manifest三、小结 flutter开发实战-应用更新apk下载、安装apk、启动应用实现。在开发过程中经常遇到需要更新下载新版本的apk文件之后进行应用更新apk下载、安装apk、启动应用。我们在flutter工程中实现下载apk判断当前版本与需要更新安装的版本进行比对判断通过判断VersionCode来确定下载新版版APK。内容较多描述可能不准确请见谅。 https://blog.csdn.net/gloryFlow/article/details/133440529 学习记录每天不停进步。
http://www.w-s-a.com/news/252023/

相关文章:

  • 网站 商城 app 建设建设银行江苏省行网站
  • 广州网站开发建设西安广告公司联系方式
  • 怎么用腾讯云服务器做网站个人网站开发视频
  • 网站建设技术代码坦洲网站建设公司哪家好
  • 阿里云对象存储做静态网站怎样做网站性能优化
  • 怎样做理财投资网站装修平面图用什么软件简单
  • 建手机wap网站大概多少钱苏州网站设计公司有哪些
  • 网站建设需求文件学校网站建设方案及报价
  • 网站开发一般多少钱wordpress打赏赞插件
  • 做中国o2o网站领导唐山网站制作软件
  • 门户网站简介做网站一天能接多少单
  • 论坛类网站建设遵义网站制作外包
  • vps服务器购买网站小视频做网站怎么赚钱
  • 网站用图片wordpress同步发布
  • 织梦图片自适应网站源码网页美工的设计要点
  • 渝快办官方网站wordpress产品图片怎么改
  • 高端网站特色深圳建网站哪
  • 宝塔搭建网站软文小故事200字
  • 公司网站设计免费虚拟主机网站源码
  • 怎样做好网站用户体验申请网站空间
  • 网站建设优化公司招聘福州网站建设思企
  • 设计网站会员wordpress rss聚合
  • 网站建设过程中的收获html5官方网站开发流程
  • 网站建设-信科网络h5美食制作网站模板下载
  • 聊城九洲建设有限公司网站师大暨大网站建设
  • 烟台网站建设学校潍坊市建设监理协会网站
  • 大良营销网站建设资讯建设厅网站总经济师是干什么的
  • 网站优化推广软件网站制作公司dedecms
  • 在哪一个网站做社保申报百度小程序开发平台
  • 东莞网站建设_东莞网页设计网站色调代号