Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi10.2东京Android安装.apk编程(新版本)_Android_Delphi_Firemonkey_Delphi 10.2 Tokyo - Fatal编程技术网

Delphi10.2东京Android安装.apk编程(新版本)

Delphi10.2东京Android安装.apk编程(新版本),android,delphi,firemonkey,delphi-10.2-tokyo,Android,Delphi,Firemonkey,Delphi 10.2 Tokyo,如何从web地址下载应用程序并安装新版本 我使用这个代码,但我得到一个错误 “android.content.ActivityNotFoundException…” 我犯的错误 您是否对AndroidManifest.xml进行了必要的调整?请看这里:是的,我有找到同一主题的另一个线程的所有权限:感谢@Jerrydoge的链接,这是solutionNote,调用StartActivity(文件名)需要在中,如果(TFile.Exists(FileName)),则块。 procedure TfLo

如何从web地址下载应用程序并安装新版本

我使用这个代码,但我得到一个错误 “android.content.ActivityNotFoundException…”

我犯的错误

您是否对
AndroidManifest.xml
进行了必要的调整?请看这里:是的,我有找到同一主题的另一个线程的所有权限:感谢@Jerrydoge的链接,这是solutionNote,调用
StartActivity(文件名)
需要在
中,如果(TFile.Exists(FileName)),则
块。
procedure TfLogin.Button1Click(Sender: TObject);
var
 Intent: JIntent;
begin
  Intent  := TJIntent.Create;
  Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  Intent.putExtra(StringToJString('EXTRA_NOT_UNKNOWN_SOURCE'), true);
  intent.setDataAndType(TJnet_Uri.JavaClass.parse(StringToJString('https://examples.com/xxx.apk')),
      StringToJString('application/vnd.android.package-archive'));
 Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
 SharedActivity.startActivity(Intent);
end;
const
  CPackageRootPath = 'http://example.com/temp/';
  CPackageFileName = 'xxxx.apk'; 
  .....

procedure TfLogin.Button1Click(Sender: TObject);
var
  Intent: JIntent;
  URL: string;
  FileName: string;
  Path: JString;
  Name: JString;
  F: JFile;
begin
  ShowMessage('Downloading...');
  URL := Concat(CPackageRootPath, '/', CPackageFileName);
  FileName := TPath.Combine(TPath.GetSharedDownloadsPath(), CPackageFileName);
  if (not DownloadFile(URL, FileName)) then
  begin
    ShowMessage('Download failed');
  end
  else
  begin
    if (TFile.Exists(FileName)) then
    begin
      ShowMessage('File exists');
      Path := StringToJString(TPath.GetDirectoryName(FileName));
      Name := StringToJString(TPath.GetFileName(FileName));
      F := TJfile.JavaClass.init(Path, Name);
      ShowMessage(Format('  Length: %d', [F.length]));
    end;
  end;
  ShowMessage('Done');

  StartActivity(FileName);
end;

procedure TfLogin.StartActivity(const FileName: string);
var
  Path: JString;
  Name: JString;
  F: Jfile;
  Intent: JIntent;
begin
  Path := StringToJString(TPath.GetDirectoryName(FileName));
  Name := StringToJString(TPath.GetFileName(FileName));
  F := TJfile.JavaClass.init(Path, Name);

  Intent := TJIntent.Create();
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  Intent.setDataAndType(TJnet_Uri.JavaClass.fromFile(F), StringToJString('application/vnd.android.package-archive'));

  TAndroidHelper.Context.startActivity(Intent);
  Application.Terminate();
end;

function TfLogin.DownloadFile(const URL, FileName: string): Boolean;
var
  Buffer: TMemoryStream;
  Client: THTTPClient;
begin
  if (TFile.Exists(FileName)) then
    TFile.Delete(FileName);

  Buffer := TMemoryStream.Create();
  try
    Client := THTTPClient.Create();
    try
      Client.Get(URL, Buffer);
      Result := Buffer.Size > 0;
      if (Result) then
        Buffer.SaveToFile(FileName);
    finally
      Client.Free();
    end;
  finally
    Buffer.Free();
  end;