[英]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.