delphi android 升级,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文件中加入

即可。

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

例如

APK := TPath.Combine(TPath.GetTempPath, 'new.apk');

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

InstallAPK(APK);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值