Delphi FMX Android中复制文件遇到权限问题的解决方案
在使用Delphi 12 FMX为Android开发应用时,遇到从/storage/emulated/0/Documents/calorie_consumption.db
复制文件到/data/user/0/com.embarcadero.CC/files/calorie_consumption.db
的问题。尽管在代码中正确请求了READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
权限,并且在AndroidManifest.xml
中声明了这些权限,但在执行代码时并未弹出权限请求对话框,而是出现了“Permission denied”的错误。
原始问题的解决方法是:
更改文件来源路径,使用TPath.GetPublicPath
结合Documents/calorie_consumption.db
代替原先的TPath.GetSharedDocumentsPath
结合calorie_consumption.db
。这避免了权限请求失败的问题,使得文件复制操作可以在不需要额外权限的情况下成功执行。
改进后的代码如下:
procedure TfrmMain.CopyDB(direction2download: Boolean);
var
f1, f2: String;
begin
{$IFDEF ANDROID}
try
// 目标文件路径
f1 := TPath.Combine(TPath.GetDocumentsPath, 'calorie_consumption.db');
// 源文件路径
f2 := TPath.Combine(TPath.GetPublicPath, 'Documents/calorie_consumption.db');
dmCC.FDConnection.Connected := False;
if direction2download then
begin
TFile.Copy(f2, f1, True);
memSQLTest.Lines.Add(f2 + ' -> ' + f1);
end else
begin
TFile.Copy(f1, f2, True);
memSQLTest.Lines.Add(f1 + ' -> ' + f2);
end;
dmCC.FDConnection.Connected := True;
except
on E: Exception do
TDialogService.ShowMessage('Error: ' + E.Message);
end;
{$ENDIF}
end;
此方法有效解决了由于权限请求导致的文件复制失败问题,简化了处理流程,无需担心复杂的权限管理问题。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END