【Delphi】Android 程序APP自动升级函数(转)

一、测试通过环境:

Delphi 10.1(BerlinAndroid 5.1、6.0
Delphi 11(Alexandria)11.1Android 10

二、注意事项:

在高版本的Delphi下需要进行如下设置:

Project -> Options -> Application -> Entitlement List -> Secure File Sharing -> Check it

如果不勾选这个参数(默认是没有勾选的),就会如下错误提示:Couldn't find meta-data for provider with authority,从而升级不成功。这个提示需要跟踪,否则程序界面并没有错误提示,而是显示需要其它程序打开,并不能进入安装程序界面。

三、升级函数

uses
  Androidapi.JNI.JavaTypes,
  Androidapi.Helpers,
  Androidapi.JNI.GraphicsContentViewText;

procedure Install_NewVersion;
{$IFDEF  ANDROID}
var
  APK_FileName : string;
  LFile        : JFile;        //不要删除这一行
  Intent       : JIntent;
{$ENDIF}
begin
  {$IFDEF  ANDROID}
  APK_FileName := System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetTempPath,'A.apk');

  if not FileExists(APK_FileName) then Exit;

  try  //如果把debug的版本给Release安装,就会出现问题,导致程序无法启动,所以需要使用try
    {$IF CompilerVersion>=33.0}  //Delphi 10.3开始
      Intent := TJIntent.Create;
      Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
      Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);

      Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);

      try
  Intent.SetDataAndType(TAndroidHelper.JFileToJURI(TJFile.JavaClass.init(StringToJString(APK_FileName))),
           StringToJString('application/vnd.android.package-archive'));
        
      except on E: Exception do
        //这里会出现 Couldn't find meta-data for provider with authority 错误
      end;


      TAndroidHelper.Activity.startActivity(Intent);
      

    {$ELSE}
      LFile := TJFile.JavaClass.init(StringToJString(ExtractFilePath(APK_FileName)), StringToJstring('A.apk'));
      Intent := TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
      Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
      Intent.setDataAndType(TJnet_Uri.JavaClass.fromFile(LFile), StringToJString('application/vnd.android.package-archive'));

      TAndroidHelper.Context.startActivity(Intent);
      //TAndroidHelper.Activity.startActivity(Intent);
    {$ENDIF}
  except on E: Exception do
    begin
      //Write_err('TCloud_Update_App.Install_NewVersion','安装APK出错: ' + E.Message);
    end;
  end;
  {$ENDIF}

  {$IFDEF MSWINDOWS}
     //此处安装 windows 升级程序
  {$ENDIF}
end;

四、参考文档:

1. Delphi 安卓App自动升级(示例代码)_136.la

2. 盒子论坛 v2.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值