簡體   English   中英

如何擁有可以通過圖片庫官方 iOS (Delphi/Firemonkey) 訪問的圖像的我自己的 App 文件夾

[英]How to have my own App folder for images that can be accessed through Photo gallery official iOS (Delphi/Firemonkey)

我正在開發一個可以創建自己的圖像的應用程序。 我想將這些圖像保存到自己的本地文件夾(如 WhatsApp 和其他應用程序),但我需要可以從照片官方 iOS 應用程序(如 WhatsApp、DJI ......)訪問本地文件夾。

請問,我如何創建自己的文件夾來保存和從我的應用程序中獲取圖像,並且可以從 iOS 的圖庫訪問該文件夾?

這可能不是很困難,因為許多應用程序都使用這種方法,但是我一直在尋找 5 天,我找不到任何東西。

提前致謝!!

您可以在 class function 與 if def Android 或 Z1BDF605991920C411CBDF8508 上混合這兩種解決方案。

在 iOS 上,您需要為權限NSPhotoLibraryAddUsageDescription添加一個條目

並像這樣將照片保存到相冊:

if TPlatformServices.Current.SupportsPlatformService(IFMXPhotoLibrary, Service) then
     Service.AddImageToSavedPhotosAlbum(imageMain.Bitmap);
 

我知道您只對 iOS 感興趣,但我也使用此 Android 解決方案,在該解決方案中,我使用以下代碼獲得了最后一個 DCIM 路徑(內部/外部):

function GetDCIMPath: string;
const
  CST_DCIM_PATH = '/DCIM/';
var
  ContentResolver: JContentResolver;
  Cursor: JCursor;
  Path: string;
  i: integer;
begin
  Result := '';

  ContentResolver := TAndroidHelper.ContentResolver;
  Cursor := ContentResolver.query(TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI, nil, nil, nil, StringToJString('datetaken DESC'));

  try
    if Assigned(Cursor) then
    begin
      Cursor.moveToFirst;

      // can be replace with a repeat until
      while not Result.ToUpper.Contains(CST_DCIM_PATH) do
      begin
        i := Cursor.getColumnIndex(StringToJString('_data'));
        if i <> -1 then
          Result := JStringToString(Cursor.getString(i));

        if not Cursor.moveToNext then
          Break;
      end;
      // ex : /storage/emulated/0/DCIM/FolderName/LastPicture.png 
      if Result.ToUpper.Contains(CST_DCIM_PATH) then
        Result := Copy(Result, 0, Result.IndexOf(CST_DCIM_PATH) + CST_DCIM_PATH.Length);
    end;
  finally
    Cursor.close;
  end;
end;

那是一個快速的代碼,您可以使用良好的 const 更改字符串參數。 並保存您的圖像:

procedure TForm1.Button1Click(Sender: TObject);
var
  Path : string;
  Folder: string;
begin
  Path   := GetDCIMPath;
  Folder := TPath.Combine(Path, 'MyAppFolder');

  if not TDirectory.Exists(Folder) then
    TDirectory.CreateDirectory(Folder);

  // just a TImage for test
  Image1.Bitmap.SaveToFile(TPath.Combine(Folder, 'picture.jpg'));
end; 

不要忘記在存儲上讀/寫的權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM