DELPHI开发安卓APP自动更新

本文详细介绍了如何在安卓应用中实现自动更新功能,包括获取APP版本信息、通过FTP下载安装包和安装过程,同时针对可能出现的‘Couldntfindmeta-dataforproviderwithauthority’错误及其解决方案进行了讨论。
摘要由CSDN通过智能技术生成

本章主要记录关于安卓APP自动更新的方法,以及自动更新可能出现的问题汇总,后续将持续更新
整体的思路如下:
1.在数据库保存APP最新的版本信息
2.APP运行时检测版本是否与最新版匹配,不一致则下载更新安装
3.最新版的安装包放在远程服务器上,通过FTP的方式获取
以上方式适合公司的内部APP升级方式

下面开始进入正题
【获取APP版本信息】
通过以下代码可以得到APP的版本号,如:1.0.1,我们可以按同样的格式将最新版本保存到数据库中,APP版本设置如下图所示
在这里插入图片描述
获取APP版本号代码如下,至于获取数据库保存的最新版本号进行对比,则比较简单不述,这里只针对几个关键点进行说明:

function GetAndroidVersion:string;
var
  PackageManager: JPackageManager;
  PackageInfo: JPackageInfo;
begin
  PackageManager := TAndroidHelper.Context.getPackageManager;
  PackageInfo := PackageManager.getPackageInfo
    (TAndroidHelper.Activity.getPackageName, 0);
  Result := JStringToString(PackageInfo.versionName);
end;

【下载APP安装包】
以下是通过FTP的方式获取APP安装包,并将安装包下载至手机本地
1.连接FTP
在界面上放置一个IdFTP1控件,然后写如下代码进行连接

procedure TFrmData.FtpConnect;
var
   SPath:string;
begin
  IdFTP1.Passive:=True;
  IdFTP1.Host:='IP地址';
  IdFTP1.Port:=端口;
  IdFTP1.Username:='用户名';
  IdFTP1.Password:='密码';
  IdFTP1.Connect;
  IdFTP1.RetrieveCurrentDir;
end;

2.以下代码为下载代码

procedure tFrmData.DownLoadAPK;
var
   SPath,UPath:string;
begin
  try
    FrmData.IdFTP1.ChangeDir('AppUpdate'); //我将安装包放在根目录下面的AppUpdate文件夹内
    UPath:='MFD.apk';   //MFD.apk为安装包名称
    SPath:=TPath.Combine(TPath.GetSharedDownloadsPath,UPath);  //将安装包下载至本地
    FrmData.IdFTP1.Get(UPath,SPath,True);
    InstallAPK;
  except on e:Exception do
     ShowMessage(e.Message);
  end;

end;

【安装软件包】

procedure InstallAPK;
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(TPath.Combine(TPath.GetSharedDownloadsPath,'MFD.apk')))),
    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,建议用上一行的方法
  except
    on e: Exception do
    begin
      ShowMessage('在调用安装过程中,出现异常错误, 具体错误信息如下:'+e.Message);
    end;
  end;

end;

===================================================================
【升级可能出现的问题】:

【问题1】:

问题现象:出现Couldn’t find meta-data for provider with authority错误,升级不成功,而是显示需要其它程序打开,并不能进入安装程序界面

解决方案
在高版本的Delphi下需要进行如下设置:
Project -> Options -> Application -> Entitlement List -> Secure File Sharing -> Check it
在这里插入图片描述
【问题二】
以上的代码可能需要引用的单元如下:

uses
  {$IFDEF ANDROID}
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.JavaTypes,
  FMX.Helpers.Android,
  Androidapi.Helpers,
  Androidapi.Jni.Net,
  androidapi.Jni.Os,
  {$ENDIF}
### 回答1: 在Delphi开发Android应用程序时,可以实现自动更新功能。下面我将简要介绍相关步骤。 第一步,需要准备应用的新版本。可以将新版本应用上传到服务器或者通过其他方式提供给用户下载。 第二步,使用Delphi提供的网络请求组件,例如TIdHTTP,连接到服务器并检查是否有新版本的应用。可以通过向服务器发送请求,在返回的数据中包含应用的版本信息。 第三步,将返回的服务器数据与当前设备上安装的应用版本进行比较。如果服务器提供的新版本号大于当前版本号,则表示存在新版本。 第四步,如果有新版本,则向用户提示更新。可以通过展示一个对话框来通知用户有新版本可供下载和安装。 第五步,使用Delphi提供的下载组件,例如TDownloadURL,下载新版本应用的安装包。可以将下载的应用安装包保存到设备的指定目录中。 第六步,使用Delphi提供的安装API,例如PackageInstaller,自动安装新版本的应用。可以调用相应的安装方法来完成应用的安装。 最后,新版本应用安装完成后,可以向用户展示一个提示,告知更新成功,并提醒用户重新启动应用程序以应用变更生效。 总结起来,通过利用Delphi的网络请求、下载和安装组件,可以实现Android应用的自动更新功能,让用户能够及时获得应用的新版本。 ### 回答2: Delphi是一种用于开发应用程序的编程语言和集成开发环境。它支持多种操作系统平台,包括Windows、iOS和Android。 在Delphi中,我们可以使用一些方法来实现Android应用程序的自动更新。 首先,我们需要一个服务器来存储我们的应用程序文件和相关信息。当有新版本可用时,我们可以通过检查服务器上的版本号来确定是否需要更新。 其次,我们可以使用网络连接来下载新版本的应用程序文件。Delphi中有一些组件可以方便地实现文件下载功能,我们可以使用它们来实现自动更新。 在下载完成后,我们可以使用Delphi中的文件操作功能来安装新版本的应用程序。这可以通过使用Android操作系统提供的API来实现。 另外,我们还可以使用Delphi中的一些界面控件来显示更新进度和完成提示信息,以便用户了解当前的更新状态。 最后,为了确保应用程序的安全性,我们还可以在每次启动应用程序时进行版本检查,以便及时提醒用户更新。 综上所述,使用Delphi开发Android应用程序的自动更新功能是可行的。我们可以通过服务器、网络连接、文件操作和界面控件等功能来实现这一目标。这样,用户可以方便地获取到最新的应用程序版本,提升用户体验。 ### 回答3: DelphiAndroid应用程序可以实现自动更新。在实现自动更新的过程中,我们可以采取以下几个步骤。 首先,需要在应用程序中添加一个检查更新的功能。可以通过与服务器端的接口进行通信,获取应用程序的最新版本号和下载链接。 其次,当用户打开应用程序时,可以在后台自动检测应用程序的版本号,与服务器上的最新版本号进行比较。如果发现新版本,则弹出对话框提示用户更新应用程序。 接下来,用户点击更新按钮后,应用程序会自动下载最新版本的安装包。可以使用Delphi自带的下载组件或者第三方框架进行下载操作。 下载完成后,需要使用Delphi的安装包管理器来安装新版本的应用程序。可以使用ShellExecute函数来调用安装包管理器进行安装操作。 最后,完成安装后,用户可以重新打开应用程序,并开始使用最新版本的应用。 需要注意的是,在实现自动更新的过程中,要确保应用程序正确处理后台任务的执行和网络请求的逻辑。此外,还要确保从服务器端获取的最新版本的安全性和合法性,避免用户的设备受到不必要的风险。 总结起来,DelphiAndroid应用程序可以通过与服务器端的通信,实现自动更新功能。通过检查最新版本号、下载安装包和安装新版本的步骤,用户可以方便地获取并使用最新版本的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值