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

Android程序自动在线升级安装

安卓小白分享: Android程序自动在线升级安装.(通过GetSharedDownloadsPath方法)

1>.修改AndroidManifest.template.xml ( 此文件在你DELPHI项目的目录中,如找不到就文件查找吧)
   
   最好把此文件拖到DELPHI, 用DELPHI打开,(这样,它会一行一行格式清楚)

   找到文字<%uses-permission%>  在它这一行后面, 新增一行:

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

   (必须加此行,不加就无法安装, 我反复试过了)
   
   加完后,要保存!!!

2>.上方菜单 Project-->Options-->Application-->Entitlement List-->
   -->(选择你的平台,最好选择All Configurations-->Android platform (我只做android)-->Secure File Sharing
  
   如果你不勾, 在我手机上, 是显示闪退....(我也反复测试过了)

3>.下面是代码部分. 至于你是如何把安装包下载, 此过程略过....下面专讲如何调用安装的代码.

1>.Button1.Text是"您已下载成功了,下面点击我来调用升级吧"


uses
  Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText,System.IOUtils,
  Androidapi.Jni.JavaTypes, Androidapi.Jni.Net,Androidapi.JNI.App,
  Androidapi.JNI.Support,System.Permissions, Androidapi.JNI.Os;


var
  myFile:string;

myFile:=TPath.GetSharedDownloadsPath+'/aaa.apk';    // 随便找个formshow地方,给他赋值吧.

procedure TframeDownloadSetupFile.Button1Click(Sender: TObject);
begin
  //动态申请权限
  PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],
          procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
          begin
          if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
          { activate or deactivate the location sensor }
          mySetupApp   --调用安装过程
          else
          begin
          ShortToast('由于您拒绝了权限申请,因此无法继续!');
          end;
          end);

end;


procedure mySetupApp;
var
  Intent: JIntent;
begin
  Intent:=TJIntent.Create;
  Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);

  {$IF CompilerVersion>=33.0}
  Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
  Intent.SetDataAndType(TAndroidHelper.JFileToJURI(TJFile.JavaClass.init(StringToJString(sLocalDownloadFileName))),
    StringToJString('application/vnd.android.package-archive'));
  {$ELSE}
  Intent.SetDataAndType(TJnet_Uri.JavaClass.parse(StringToJString(url)),
    StringToJString('application/vnd.android.package-archive'));
  {$ENDIF}


  try
    TAndroidHelper.Activity.startActivity(Intent);
    //SharedActivity.startActivity(Intent);  新版DELPHI,建议用上一行的方法
    ShowMessage('成功调用了安装程序,  但用户在后续安装过程中,有没有点取消,就不知道了.');
  except
    on e: Exception do
    begin
      ShowMessage('在调用安装过程中,出现异常错误, 具体错误信息如下:'+e.Message);
    end;
  end;

end;

http://www.lryc.cn/news/35940.html

相关文章:

  • JS的BroadcastChannel与MessageChannel
  • nextjs开发 + vercel 部署 ssr ssg
  • Good Idea, 利用MySQL JSON特性优化千万级文库表
  • 【python游戏制作】快来跟愤怒的小鸟一起攻击肥猪们的堡垒吧
  • ARM 学习(一)
  • 深入分析Java的序列化与反序列化
  • 、Tomcat源码分析-类加载器
  • 反转链表相关的练习(下)
  • 2.进程和线程
  • C++回顾(十四)—— 函数模板
  • 如何做好项目各干系人的管理及应对?
  • Elasticsearch使用系列-ES增删查改基本操作+ik分词
  • 07-PL/SQL基础(if语句,case语句,循环语句)
  • 信捷 XDH Ethercat A_VELMOVE
  • 【专项训练】分治、回溯
  • Linux上安装配置ZooKeeper
  • idea leetcode插件无法登录
  • VR会议不断升级,为商务会谈打造云端洽谈服务!
  • Ubuntu系统开机自动挂载NTFS硬盘【超实用】
  • 淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。
  • 训练自己的GPT2-Chinese模型
  • springcloud3 fegin服务超时的配置和日志级别的配置2
  • 华为机试 HJ48 从单向链表中删除指定值的节点
  • 华为机试 HJ1 字符串最后一个单词的长度
  • 从入门到精通MongoDB数据库系列之二:深入了解MongoDB基本概念文档、集合、数据库、数据类型、MongoDB shell
  • 前端实用技巧,JS压缩、美化、JS混淆加密
  • synchronized轻量级锁优化
  • python 日期转换 日期字符相关
  • 使用sm4js进行加密和国密sm4的总结
  • c语言面试题目整理