用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - delphi代码库

Delphi开发Android程序自动在线升级安装

2022-08-27 作者: 云代码会员举报

[delphi]代码库

安卓小白分享: 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;
---------------------------------------------


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...