tms sparkle实现apk下载安装。

2023-11-10

缘起:

     存放在pc端的apk,如何下载到手机端并安装,一种是通过IM通讯工具,或是复制到u盘上,或是ftp下载,还有就是通过云盘安装。但是以上方法都不是非常方便。

思路:

下面介绍一种思路:将apk文件存放在pc端的某一路径下,然后生成html文件的链接并发布,在手机端使用百度浏览器旁的扫码工具扫描并下载。

实现:

1)编写生成文件夹遍历并生成网页文件列表以及发布application的程序(参看tms sparkle的D:\riocomponents\TMS Sparkle v3.6.1\Demos\HttpFileServer样例)

2)在上一步的基础上实现二维码生成功能。

uses
GY_RestClient, WaitBox;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ahost := 'http://122.228.166.158:101'; 
  appid := 'G001'; 
  appkey := 'h3476kjhl';
end;


var
  Getstr, URL, method, uri, SaveToFile: string;
  aStrlist: Tstringlist;
  i: integer;
  vs: TStringStream;
begin

  TThread.CreateAnonymousThread( 
    procedure
    begin
      try
        SaveToFile :=self.edBaseDir.Text  + '/tempewm.jpg';      //GetHuanCunPath('temp')

        aStrlist := Tstringlist.Create;
        aStrlist.Add('str=http://'+self.IdIPWatch1.LocalIP+':2001/tms/business/sparkle/filelisting/'); 
          method := 'POST'; // GET OR POST
        uri := ServeAPIName + '/GetErWeiMaImage'; // 调用服务端的哪个函数通过这里指定
        GetURLandaStrlist(URL, method, uri, appkey, ahost, appid, aStrlist); // 组装url和参数串并完成签名验证

        vs := TStringStream.Create('', TEncoding.UTF8);
        PostHTTPClient(URL, aStrlist, vs);

        TThread.Synchronize(nil,
          procedure 
          begin
          
            if vs = nil then
           
            if vs.Size < 40 then
       
            else
            begin
              vs.SaveToFile(SaveToFile);
            
              Image04.Picture.LoadFromFile(SaveToFile);

            end;
          end);

      finally
        aStrlist.Free;
        vs.Free;
        TThread.Synchronize(nil,
          procedure 
          begin
     
          end);
      end;
    end).Start;

将生成的二维码链接到网页上。 

procedure TFileListingModule.ProcessDir(C: THttpServerContext; const Dir: string);
var
  Writer: TStreamWriter;
  RelativePath: string;
  ParentPath: string;
  FileName: string;
  DisplayFileName: string;
  SearchRec: TSearchRec;
begin
  // this function provides an html listing all files in the directory
  C.Response.StatusCode := 200;
  C.Response.ContentType := 'text/html;charset=UTF8';
  RelativePath := BuildRelativePath(GetRelativeSegments(C.Request.Uri));
  ParentPath := BuildRelativePath(GetRelativeSegments(C.Request.Uri), 1);

  // build the html response
  Writer := TStreamWriter.Create(C.Response.Content, TEncoding.UTF8);
  try
    // html header with directory name
    Writer.Write(Format('<html><head><title>Index of %s</title></head><body><h1>Index of %s</h1><img src="tempewm.jpg"  alt="上海鲜花港 - 郁金香" />',//这里写入二维码的image链接
      [RelativePath, RelativePath]));

    Writer.Write('<pre>      Name<hr>');

    if FindFirst(TPath.Combine(Dir, '*'), faAnyFile, SearchRec) = 0 then
    try
      repeat
        Filename := SearchRec.Name;
        if FileName = '.' then Continue;
        if (FileName = '..') and (RelativePath = '/') then Continue;

        {$WARNINGS OFF}
        if (SearchRec.Attr and faSymLink) <> 0 then Continue;
        {$WARNINGS ON}

        DisplayFileName := FileName;
        if (SearchRec.Attr and faDirectory) <> 0 then
        begin
          Writer.Write('[DIR] ');
          FileName := FileName + '/';
        end
        else
          Writer.Write('      ');
        Writer.Write(Format('<a href="%s">%s</a>'#13#10, [FileName, DisplayFileName]));
      until FindNext(SearchRec) <> 0;
    finally
      FindClose(SearchRec);
    end;

    Writer.Write('<hr></pre><I>TMS Sparkle - FileListingServer demo</I></body></html>');
  finally
    Writer.Free;
  end;
end;

3)发布程序到指定服务器上。

4)打开网页,使用手机端浏览器上的扫描工具扫码,并点选相关的apk文件名称。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tms sparkle实现apk下载安装。 的相关文章

  • 如何测试 Android 库项目

    我正在编写一个基于 Android Bitmap 类 称为 AndroindLib 的 Android 库项目 其中仅包含实用程序类 无活动 我尝试使用Android JUnit测试它 但它一直抱怨找不到AnroidLib apk 对 An
  • 拥有.apk可以提取其源代码。 Android 应用程序安全吗? [复制]

    这个问题在这里已经有答案了 我开发 Android 应用程序 其中一些代码非常私密和机密 我将加密算法放入我的代码中以提高安全性 但最近我读到 当人们拥有 apk 文件时 他们可以 100 正确地提取 java 源代码Source http
  • React Native Android生成apk时出现重复文件错误

    当我尝试使用生成 android apk 时 gradlew installRelease 我在控制台中收到此错误 React Native mockingbird android app build intermediates res m
  • 更新应用程序而不安装新的APK

    我正在尝试查看是否可以远程更新用户手机上的应用程序无需下载 apk文件 这是我的 老板 的信息收集请求 他认为这在 iOS 上是可能的 所以他希望我在 Android 上检查一下 本质上 我试图让我的应用程序偶尔从我们的网络服务器中提取版本
  • -keep class 和 -dontwarn 有什么区别

    嘿 我是 proGuard 的新手 我用它来保护我的代码免受逆向工程的影响 但是当我构建我的签名apk时 当我启用 proGuard 时 我遇到了很多错误 我在谷歌上搜索了我的问题 我找到了答案 说对错误消息中显示的类使用 dontwarn
  • Google Play 中具有相同名称但包名称不同的新应用

    我想上传另一个 apk 其应用程序标题与我已有的应用程序标题相同 尚未发布 我收到 您需要为您的应用选择不同的标题 这个已经是 com foo bar 的标题 我以为只要包名不同就可以上传新的apk 有没有办法做到这一点 或者我必须创建另一
  • 验证 apk 是否为付费副本(避免应用程序盗版)

    我对 Android Play 商店完全陌生 我正在开发一个即将完成并准备发布的应用程序 但我注意到您可以将 apk 文件 购买后 复制到另一个位置 例如 SD 卡 并将其安装在另一台设备上 这是我想避免的事情 我的问题是 Google P
  • APK 安装失败:[INSTALL_FAILED_VERIFICATION_FAILURE]

    我正在尝试在运行 Jelly Bean 4 2 AOSP 版本的设备上安装 APK 当我 adb install my apk 时 出现错误 安装 失败 验证 失败 我尝试使用 testsign jar 来 签名 apk 但它不会改变结果
  • 您上传了可调试的 APK。出于安全原因,您需要先禁用调试,然后才能在 Google Play 中发布 - 将 apk 上传到 google play

    我想将我的 apk 上传到 google play store 但它显示这样的错误 You uploaded a debuggable APK For security reasons you need to disable debuggi
  • Android APK 文件的内容是什么

    APK 文件的组成部分是什么 它只是一堆可执行文件吗 组件的名称是什么 APK 文件是一个存档 通常包含以下文件夹 META INF目录 MANIFEST MF 清单文件 CERT RSA 应用程序的证书 CERT SF 对应的资源列表和S
  • 无法从 Play 商店生产区域停用 Android 分阶段推出应用程序

    我们将一款 Android 应用上传到 Play 商店 分阶段向 5 的市场推出 不确定谷歌在这里如何定义市场 但这是另一个问题 我们决定删除该应用程序并恢复之前发布的应用程序 然而 这似乎是不可能做到的 当我在开发人员控制台上切换到高级模
  • Flutter 发行版 apk 未安装在设备上

    我已经发布了带有签名密钥的 apk 但它没有安装在 Android 设备上 它显示了此消息 apk安装失败 错误 无法解析错误字符串 但调试模式 apk 该应用程序工作正常 释放命令 flutter 构建 apk release 我确实遵循
  • 创建APK时Android应用程序图标变得模糊

    创建 APK 时我的应用程序图标变得模糊 我尝试下载一个具有非常尖锐图标的 Android 应用程序的 APK 并将其放入我的 APK 中 但得到了相同的结果 为什么我的图标变得模糊 而我在使用相同图标的其他应用程序中看到它却非常清晰 当然
  • 应用程序未安装在 Android 11 中,但可以在以前的版本上运行

    我有一个包含两个包的应用程序com example package and com other package 我在build gradle中的配置如下 android compileSdkVersion 30 defaultConfig
  • ant命令不生成apk文件

    我正在使用 Ant 构建我的应用程序 我的应用程序使用库项目 所以首先我在命令行中运行以下命令以在我的项目中生成 build xml 安卓更新 项目 target 5 p 我的项目路径 l 我的库项目路径 我的应用程序的构建目标是 4 0
  • 如何构建没有声音空安全的APK

    我可以在手机上以发布模式运行应用程序并传递标志 no sound null safety release 但 两者都不flutter build apk enable experiment non nullable nor flutter
  • Android Studio 3.1.1 更新后,“定位”链接无法打开生成的 APK 文件夹

    更新 Android 3 1 1 更新后出现问题 APK 生成过程完成后 Android Studio Windows 操作系统 会弹出一个窗口来定位或分析 APK 不幸的是 如果我点击locate 什么也没有发生 UPDATE 在 APK
  • 重命名 APK 内的包名称

    我创建了一个AIR app目前市场上有这种产品 要更新应用程序 显然我必须保留相同的包名称 我的第一个版本是使用以下方式打包的Eclipse使用 ADT 插件 现在可以使用AIR 3 0 本机扩展 ANE 当我第一次开发该应用程序时不可用
  • 主应用程序下载另一个应用程序然后使用它

    What I want to do is maybe hard to explain or to understand so I made a quick drawing 首先 我们有 2 个 Android 应用程序 一个显示器 你好世界
  • Android构建apk:控制MANIFEST.MF

    Android 构建 APK 假设一个 apk 包含一个库 jar 例如 foo jar 该库具有 META INF MANIFEST MF 这对于它的运行很重要 但在APK中有一个包含签名数据的MANIFEST MF 并且lib jar

随机推荐

  • GB28181学习(四)——网络设备信息查询

    要求 源设备向目标设备发送信息查询命令 目标设备将结果通过查询应答命令返回给源设备 设备信息查询命令包括 设备目录 设备信息 设备状态信息 设备配置 预置位 看守位 巡航轨迹列表 巡航轨迹 PTZ精准状态 存储卡状态等 信息查询的范围 本地
  • self、__doc__、__init__、__name__

    1 self参数用于类定义中 不可省略 独立的函数或方法中不含有self参数 self不是Python的关键字 可替换成别的 在类实例化时 self自动绑定到self实例上 指向类实例对象本身 已完成类对自身属性的调用 gt gt gt c
  • springboot之用户操作日志

    自定义注解 SysLog作用于方法 import java lang annotation Target ElementType METHOD Retention RetentionPolicy RUNTIME Documented pub
  • FreeRTOS系统配置文件详解

    简介 在实际使用FreeRTOS 的时候我们时常需要根据自己需求来配置FreeRTOS 而且不同架构的MCU 在使用的时候配置也不同 FreeRTOS 的系统配置文件为FreeRTOSConfig h 在此配置文件中可以完成FreeRTOS
  • 如何安装Chocolatey

    最近在研究包管理器的工作原理 便想着安一个chocolatey下来 安装程序也方便一些 结果在csdn一找 人差点没给我气死 转载 以讹传讹 胡诌 过时的一大堆 都不咋靠谱 写这篇文章的目的就是让大家知道 Chocolatey到底是怎么安装
  • 摄影:相机的白平衡怎么用?

    转自 https baijiahao baidu com s id 1627541021956100392 wfr spider for pc 白平衡 顾名思义就是保持白色的平衡 拥有还原环境色彩的能力 白平衡作为拍摄过程中的一项重要设置
  • Oracle的package用法测试

    oralce的package由 包头和包体构成 包头声明要做的事情 包体做具体的实现 话不多说直接上代码 create or replace package pkg firste test as procedure p update lab
  • Stable Diffusion与Midjourney比较,哪个更符合普通人需求?

    先来说一下它们的区别 主要有两点 成本和出图速度 第一点 成本 Stable Diffusion是一款开源且免费使用的模型 可以在本地部署 但需要高性能电脑配置支持 虽然跑图速度还不错 但必须配备稳定的网络环境 Midjourney也需要稳
  • 【C写文件】C/C++读写文本文件、二进制文件/文件读写

    目录 一 目的 二 C语言文本文件读写 1 文本文件写入 2 文本文件读取 三 C语言二进制文件读写 1 二进制文件写入 2 二进制文件读取 四 C 文本文件读写 1 文本文件写入 2 文本文件读取 五 C 二进制文件读写 1 二进制文件写
  • nginx动态配置配置

    nginx中的conf文件配置测试 upstream backServer server 127 0 0 1 11111 upsync 192 168 212 134 8500 v1 kv upstreams itmayiedu upsyn
  • Spring 6.X IoC 容器

    目录 一 Spring IoC 容器和 Bean 简介 1 1 容器概述 1 3 使用 一 Spring IoC 容器和 Bean 简介 下面主要介绍 Spring 框架对控制反转 IoC 原理的实现 首先要说明的是 IoC 也称为依赖注入
  • FileOutputStream的基本使用

    package com wondream myframework app basictest io import org apache commons logging Log import org apache commons loggin
  • Flutter插件介绍以及常用插件推荐

    Flutter插件 Flutter使用的Dart语言无法直接调用Android系统提供的Java接口 这时就需要使用插件来实现中转 Flutter官方提供了丰富的原生接口封装 android alarm manager 访问Android系
  • Qt Assistant介绍

    简介 Qt Assistant也就是我们常说的Qt助手 是一款用于呈现在线文档的工具 简介 一分钟学会使用 Qt参考文档 Qt Assistant详解 命令行选项 工具窗口 文档窗口 工具栏 菜单 文件菜单 编辑菜单 查看菜单 前往菜单 书
  • Mac M1 mysql安装指南

    https segmentfault com a 1190000020656076111 https zhuanlan zhihu com p 360858309 看这两篇足够了
  • ES6如何声明一个类?类如何继承?

    在 JavaScript 中 您可以使用关键字 class 来声明一个类 类是一种模板 用于创建对象的构造函数 其中包含了属性和方法 以下是声明一个类的基本语法 class ClassName constructor 构造函数 用于创建对象
  • CSDN湘苗培优,遇见更好的自己

    现在 只要你是IT技术爱好者 想要高起点步入职场 快人一步不是梦 湘苗培优 你不容错过 点击蓝色的 湘苗培优 小编带你深入了解如何实现它
  • 深度特征融合---理解add和concat之多层特征融合

    一 如何理解concat和add的方式融合特征 在各个网络模型中 ResNet FPN等采用的element wise add来融合特征 而DenseNet等则采用concat来融合特征 那add与concat形式有什么不同呢 事实上两者都
  • iOS15适配 UINavigationBar和UITabBar设置无效,变成黑色以及uiscrollview为根试图无法到顶

    今天更新了xcode13 运行项目发现iOS15以上的手机导航栏和状态栏之前设置的颜色等属性都不起作用了 都变成了黑色 滚动的时候才能变成正常的颜色 经确认得用UINavigationBarAppearance和UITabBarAppear
  • tms sparkle实现apk下载安装。

    缘起 存放在pc端的apk 如何下载到手机端并安装 一种是通过IM通讯工具 或是复制到u盘上 或是ftp下载 还有就是通过云盘安装 但是以上方法都不是非常方便 思路 下面介绍一种思路 将apk文件存放在pc端的某一路径下 然后生成html文