Как получить все изображения в галерее iPhone, не прося пользователя выбрать их в Xamarin? - PullRequest
0 голосов
/ 09 октября 2019

Я уже получил разрешение на доступ к Фотогалерее, и я нашел ожидание, чтобы попросить пользователя выбрать одно или несколько изображений из галереи, и оно прекрасно работает в iOS 13.

Однако,Я вижу, что в некоторых приложениях, таких как Facebook, он показывает все изображения в галерее в качестве предварительного просмотра, так что пользователь может просто нажать на них, не показывая ему всю библиотеку, и предложить ему выбрать их.

Моя цель - иметь приложение, в котором оно сможет найти все изображения, которые были созданы / изменены за последние 24 часа, чтобы пользователь мог загрузить их на сервер одним касанием, не заставляя пользователя выбиратьих из библиотеки.

Я использую Xamarin.Forms, но этот код будет использоваться только в части проекта Xamarin.iOS, использующей DependencyService, поэтому я не заинтересован в части Android (по крайней мере, пока).

Кроме того, если кто-то достиг того же с помощью Swift, я думаю, что было бы возможно переписать его в C #.

Спасибо!

1 Ответ

0 голосов
/ 09 октября 2019

Я отвечаю на свой вопрос в случае, если кто-то еще его ищет:

Используйте Photo Library, чтобы получить все фотографии в вашей галерее. Во-первых, вам нужно добавить строку прав доступа в info.plist:

https://developer.apple.com/documentation/photokit/requesting_authorization_to_access_photos?language=objc

<key>NSPhotoLibraryUsageDescription</key>
<string> photos description. </string>

Во-вторых, запросить динамическую авторизацию, например:

PHPhotoLibrary.RequestAuthorization((status) =>
{
   switch (status)
   {
       case PHAuthorizationStatus.Authorized:
           {
               Debug.WriteLine(“Authorized to access”);
               break;
           }
       case PHAuthorizationStatus.Denied: case PHAuthorizationStatus.Restricted:
           {
               Debug.WriteLine(“Not allowed”);
               break;
           }
       default:
           {
               Debug.WriteLine(“Not determined”);
               break;
           }
   }
});

Наконец, вы можете запросить фотографии, как:

PHImageRequestOptions options = new PHImageRequestOptions();
options.ResizeMode = PHImageRequestOptionsResizeMode.Fast;
options.DeliveryMode = PHImageRequestOptionsDeliveryMode.FastFormat;
options.Synchronous = true;

var assets = PHAsset.FetchAssets(PHAssetMediaType.Image, null);
PHImageManager manager = new PHImageManager();

List<UIImage> images = new List<UIImage>();
foreach (PHAsset asset in assets)
{
   manager.RequestImageForAsset(asset, PHImageManager.MaximumSize, PHImageContentMode.Default, options,
                               (image, info) =>
                               {
                                   images.Add(image);
                               });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...