转:Delphi 安卓App自动升级

Posted lai1322

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转:Delphi 安卓App自动升级相关的知识,希望对你有一定的参考价值。

androidapi.JNI.Support引用这个单元

 

procedure _InstallApk(Apk: string);
var
  LFile: JFile;
  LIntent: JIntent;
begin
  LFile := TJFile.JavaClass.init(StringToJString(ExtractFilePath(Apk)), StringToJstring(ExtractFileName(Apk)));
  LIntent := TJIntent.Create;
  LIntent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  LIntent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  LIntent.setDataAndType(TJnet_Uri.JavaClass.fromFile(LFile), StringToJString(application/vnd.android.package-archive));
  TAndroidHelper.Context.startActivity(LIntent);
end;
procedure InstallApk(Apk: string);
var
  LFile: JFile;
  LIntent: JIntent;
  LNet_Uri: Jnet_Uri;
begin
  if not TOSVersion.Check(7, 0) then
  begin
    _InstallApk(Apk);
    Exit;
  end;
  LFile := TJFile.JavaClass.init(StringToJString(ExtractFilePath(Apk)), StringToJstring(ExtractFileName(Apk)));
  LIntent := TJIntent.Create;
  if TOSVersion.Check(8, 0) then
    LIntent.setAction(TJIntent.JavaClass.ACTION_INSTALL_PACKAGE)
  else
    LIntent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  LIntent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  if TOSVersion.Check(7, 0) then
  begin
    // fix: android.os.FileUriExposedException: exposed beyond app through Intent.getData()
    // Project -> Options -> Application -> Entitlement List -> Secure File Sharing -> Check it
    LIntent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
    LNet_Uri := TJFileProvider.JavaClass.getUriForFile(TAndroidHelper.Context,
      StringToJString(JStringToString(TAndroidHelper.Context.getPackageName) + .fileprovider), LFile);
  end
  else
    LNet_Uri := TJnet_Uri.JavaClass.fromFile(LFile);
  LIntent.setDataAndType(LNet_Uri, StringToJString(application/vnd.android.package-archive));
  TAndroidHelper.Context.startActivity(LIntent);
end;

 

Android 8.0以上要在manifest里加权限

在AndroidManifest.template.xml文件中加入
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>即可。

 

用TPath处理路径(跨平台的路径相关应该都使用System.IOUtils里提供的东西来写)

例如
APK := TPath.Combine(TPath.GetTempPath, ‘new.apk‘);

download(‘server://foo/bar/new.apk‘, APK); // save as APK

InstallAPK(APK);

在安卓平台路径是*nix规则的,自己应用内不需要前缀

 

原文地址:http://bbs.2ccc.com/topic.asp?topicid=568834

以上是关于转:Delphi 安卓App自动升级的主要内容,如果未能解决你的问题,请参考以下文章

如何app自动升级 静默安装 android

微信自动下载app(安卓跳转默认浏览器 苹果跳转苹果商店App Store)

哪位用DELPHI XE开发过安卓,好用吗

关于Delphi程序自动升级问题!

微信浏览器无法下载App的解决方案 安卓微信跳转打开外部浏览器苹果跳转商店(App Store)

Delphi XE7 开发安卓APP,用Webbrowser如何只在原窗口打开新页面,求助