如何在Android sdcard Delphi中为创建的文件编制索引

如何在Android sdcard Delphi中为创建的文件编制索引,delphi,firemonkey,Delphi,Firemonkey,在我的代码中,我创建了一个.TXT文件,并将其存储在共享文件夹“下载”中,如下所示: procedure TF_start.Button2Click(Sender: TObject); var path_file output_text: string; begin path_file := TPath.Combine(System.IOUtils.TPath.GetSharedDownloadsPath, 'Folder_app'); output_text := 'test';

在我的代码中,我创建了一个.TXT文件,并将其存储在共享文件夹“下载”中,如下所示:

procedure TF_start.Button2Click(Sender: TObject);
var
  path_file output_text: string;
begin
  path_file := TPath.Combine(System.IOUtils.TPath.GetSharedDownloadsPath, 'Folder_app');
  output_text := 'test';
  if not TDirectory.Exists(path_file) then
    TDirectory.CreateDirectory(path_file);

  try
    TFile.WriteAllText(TPath.Combine(path_file, Nome_Arquivo), Arquivo_saida);
  except
    ShowMessage('An error occurred while saving the file.');
  end;
end;
该文件创建得非常完美,但Android本身在索引文件以便通过Windows资源管理器读取这些文件方面存在问题,因此您必须重新扫描创建该文件的文件夹以便其可见。 PlayStore上甚至有一些应用程序可以重新扫描整个SD卡,但要求我的客户端安装一个辅助文件来使用我的应用程序不是一个好选择

我发现了一个理论上在特定文件夹上执行此重新扫描的代码,但它不起作用。没有错误,但文件夹和文件“继续”在Windows资源管理器中不可见。。。 代码如下:

procedure TF_corrida.BTNfinalize_appClick(Sender: TObject);
var
  c: Integer;
  JMediaScannerCon: Androidapi.Jni.Media.JMediaScannerConnection;
  JMediaScannerCon_Client: Androidapi.Jni.Media.JMediaScannerConnection_MediaScannerConnectionClient;
begin
    JMediaScannerCon:=TJMediaScannerConnection.JavaClass.init(TAndroidHelper.Context, JMediaScannerCon_Client);
    JMediaScannerCon.connect;
    c:=0;
    while not JMediaScannerCon.isConnected do begin
      Sleep(100);
      inc(c);
      if (c>20) then break;
    end;
    if (JMediaScannerCon.isConnected) then begin
      JMediaScannerCon.scanFile(StringToJString(path_file), nil);
      JMediaScannerCon.disconnect;
    end;
end;
有人知道为什么这个代码不起作用吗?我甚至发现它在Delphi Tokyo不起作用,但我使用的是Delphi Rio


是的,我在代码中正确地声明了读写存储权限。文件创建正确,只是不可见。

新创建的文件在Windows资源管理器中不可见的原因不在于代码,而在于MTP协议的工作方式

您可以看到,当您使用MTP协议将android设备连接到计算机时,当您的计算机需要时,设备本身会向您的计算机提供文件列表,但不支持实时更新或文件更改

从技术上讲,唯一允许您的计算机收到andoid设备上文件更改通知的协议是USB mass sotrage。但该协议有限制,要求您的计算机以独占方式访问文件存储,这将阻止android设备上的任何程序在USB大容量存储连接处于活动状态时访问这些文件

您可以在此处阅读更多有关android使用的不同连接协议的信息: