导航:
论坛 -> 移动应用开发
斑竹:flyers,iamdream
作者:
2020/3/8 12:02:09
标题:
安卓小白分享: Android程序自动在线升级安装.(通过GetSharedDownloadsPath方法)
浏览:3384
加入我的收藏
楼主:
安卓小白分享: Android程序自动在线升级安装.(通过GetSharedDownloadsPath方法) 1>.修改AndroidManifest.template.xml ( 此文件在你DELPHI项目的目录中,如找不到就文件查找吧) 最好把此文件拖到DELPHI, 用DELPHI打开,(这样,它会一行一行格式清楚) 找到文字<%uses-permission%> 在它这一行后面, 新增一行: <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> (必须加此行,不加就无法安装, 我反复试过了) 加完后,要保存!!! 2>.上方菜单 Project-->Options-->Application-->Entitlement List--> -->(选择你的平台,最好选择All Configurations-->Android platform (我只做android)-->Secure File Sharing 如果你不勾, 在我手机上, 是显示闪退....(我也反复测试过了) 3>.下面是代码部分. 至于你是如何把安装包下载, 此过程略过....下面专讲如何调用安装的代码. 1>.Button1.Text是"您已下载成功了,下面点击我来调用升级吧" uses Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText,System.IOUtils, Androidapi.Jni.JavaTypes, Androidapi.Jni.Net,Androidapi.JNI.App, Androidapi.JNI.Support,System.Permissions, Androidapi.JNI.Os; var myFile:string; myFile:=TPath.GetSharedDownloadsPath+'/aaa.apk'; // 随便找个formshow地方,给他赋值吧. procedure TframeDownloadSetupFile.Button1Click(Sender: TObject); begin //动态申请权限 PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)], procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>) begin if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then { activate or deactivate the location sensor } mySetupApp --调用安装过程 else begin ShortToast('由于您拒绝了权限申请,因此无法继续!'); end; end); end; procedure mySetupApp; 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(sLocalDownloadFileName))), 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,建议用上一行的方法 ShowMessage('成功调用了安装程序, 但用户在后续安装过程中,有没有点取消,就不知道了.'); except on e: Exception do begin ShowMessage('在调用安装过程中,出现异常错误, 具体错误信息如下:'+e.Message); end; end; end;
----------------------------------------------
...
作者:
2020/3/8 12:05:13
1楼:
代码都是网上复制拼凑的, 本人只是反复测试而已, 有更好的调用安装方法, 欢迎大家告诉.
----------------------------------------------
...
作者:
2020/3/8 12:08:05
2楼:
本人测试机子: 中兴 Blade A7s android 9.0 xe 10.3.1
----------------------------------------------
...
作者:
2020/3/8 12:14:54
3楼:
一开始,我放到其它的目录中, 不支持!!!!!!!! 最后,才想到用这个: GetSharedDownloadsPath
----------------------------------------------
...
作者:
2020/3/8 13:48:46
4楼:
感谢分享
----------------------------------------------
-
作者:
2020/3/8 19:08:28
5楼:
腾讯QQ 把东西移动到 Android 目录去了 还出了通告 这是为什么呢?。
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
vga (vga)
★☆☆☆☆
-
盒子活跃会员
2020/3/8 20:47:23
6楼:
感谢楼主分享!!!
----------------------------------------------
-
作者:
2020/5/12 21:20:29
7楼:
楼主,请问sLocalDownloadFileName来自哪,需要单独声明吗?我的是delphi10.3.3,这个变量不能通过
----------------------------------------------
-
作者:
2020/6/11 13:25:45
8楼:
这是一个自个定义的变量. sLocalDownloadFileName:=TPath.GetSharedDownloadsPath+'/xxx.apk';
----------------------------------------------
...
作者:
2020/6/11 23:18:56
9楼:
感谢楼主。 大陆的delphi发展不起来,因为技术掌握在少数精英手里,一般人我不告诉他。
----------------------------------------------
-
作者:
2020/6/16 13:28:26
10楼:
TO 楼上, 恰恰相反. 因为大陆的程序员基数大, 反而种群能繁衍发展! 至于技术掌握在少数精英这个问题, 哪个地方都一样. ( 滥大街的技术, 基本上,没有人认为它称为"技术"的) 解决问题: 精英的偶尔指点 + 自已努力搜索研究! (内因才是重点!!!) 精英毕竟也有自已的事业, 总不可能天天在论坛中辅导. 主要还是靠自已!
----------------------------------------------
...