DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: hxh57738897
今日帖子: 23
在线用户: 22
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
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;
----------------------------------------------
...
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/3/8 12:05:13
1楼: 代码都是网上复制拼凑的, 本人只是反复测试而已, 有更好的调用安装方法, 欢迎大家告诉.
----------------------------------------------
...
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/3/8 12:08:05
2楼: 本人测试机子: 中兴 Blade A7s 
android 9.0
xe 10.3.1
----------------------------------------------
...
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/3/8 12:14:54
3楼: 一开始,我放到其它的目录中, 不支持!!!!!!!!

最后,才想到用这个: GetSharedDownloadsPath
----------------------------------------------
...
作者:
男 delphiilove (乌羽玉) ★☆☆☆☆ -
普通会员
2020/3/8 13:48:46
4楼: 感谢分享
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
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楼: 感谢楼主分享!!!
----------------------------------------------
-
作者:
男 lanxin7705 (lanxin) ★☆☆☆☆ -
普通会员
2020/5/12 21:20:29
7楼: 楼主,请问sLocalDownloadFileName来自哪,需要单独声明吗?我的是delphi10.3.3,这个变量不能通过
----------------------------------------------
-
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/6/11 13:25:45
8楼: 这是一个自个定义的变量.

  sLocalDownloadFileName:=TPath.GetSharedDownloadsPath+'/xxx.apk';
----------------------------------------------
...
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2020/6/11 23:18:56
9楼: 感谢楼主。
大陆的delphi发展不起来,因为技术掌握在少数精英手里,一般人我不告诉他。
----------------------------------------------
-
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/6/16 13:28:26
10楼: TO 楼上,

  恰恰相反. 因为大陆的程序员基数大, 反而种群能繁衍发展!

  至于技术掌握在少数精英这个问题, 哪个地方都一样.

  ( 滥大街的技术, 基本上,没有人认为它称为"技术"的)

  解决问题:  精英的偶尔指点 + 自已努力搜索研究! (内因才是重点!!!)

  精英毕竟也有自已的事业, 总不可能天天在论坛中辅导. 主要还是靠自已!
----------------------------------------------
...
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行74.21875毫秒 RSS