分享

安卓小白分享: Android程序自动在线升级安装

 npkaida 2020-04-10
作者:
男 aknightchen (.)★☆☆☆☆-
盒子活跃会员
2020/3/8 12:02:09
标题:
安卓小白分享: Android程序自动在线升级安装.(通过GetSharedDownloadsPath方法)浏览:268
加入我的收藏
楼主:安卓小白分享: 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楼:感谢分享
----------------------------------------------

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多