亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述转: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"/> 即可。
【转(Delphi 安卓App自动升级)】用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
推荐阅读
- Android崩溃记录持续更新(bugly)
- 简单实现 web/app端 经API GateWay 将请求转发至微服务,并将数据返回给client客户端
- Android SIMPLE: Error configuring
- @SpringBootApplication注解的理解
- android中引入yoga
- 经济下行趋势明显,Android开发者出路在哪(7成Android开发者月薪不足6千)
- FETMX8MM-C核心板,Android9.0QT5.10,10年+生命周期 这是飞凌2019年
- uni-app APP端隐藏导航栏自定义按钮
- Android studio 错误