Delphi FMX Android中复制文件遇到权限问题的解决方案

欢迎加入全网最大Delphi 技术交流群 682628230

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_STORAGEWRITE_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
喜欢就支持一下吧
点赞7 分享