Delphi10.2东京Android安装.apk编程(新版本)
如何从web地址下载应用程序并安装新版本 我使用这个代码,但我得到一个错误 “android.content.ActivityNotFoundException…” 我犯的错误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
您是否对
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;