zoukankan      html  css  js  c++  java
  • 转: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"/>即可。

    用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

  • 相关阅读:
    C++ list<list<int> >类型的对象遍历
    Apache与Nginx服务器对比
    服务器重写技术:rewrite
    冒泡排序(python版)
    有k个list列表, 各个list列表的元素是有序的,将这k个列表元素进行排序( 基于堆排序的K路归并排序)
    堆排序(C++版)
    [转载] 单链表的相关操作
    TCP三次握手连接与四次握手断开
    [转载] TCP与UDP对比
    进程与线程的联系与区别
  • 原文地址:https://www.cnblogs.com/timba1322/p/12767901.html
Copyright © 2011-2022 走看看