Наблюдать и удалять (скриншот), если при использовании моего приложения в Iphone сделан снимок экрана - PullRequest
1 голос
/ 24 июня 2019

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

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

Я успешно использовал метод Observer, чтобы проверить, сделан ли снимок экрана при использовании моего приложения.

Я застрял в точке, где мне нужно получить доступ к этому скриншоту и удалить его, конечно, с разрешения пользователя.

```public override void OnActivated(UIApplication application)
    {
        try
        {
            // Start observing screenshot notification
            if (_screenshotNotification == null)
            {
                _screenshotNotification = NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.UserDidTakeScreenshotNotification,
                            (NSNotification n) => {

Console.WriteLine("UserTookScreenshot");                                    

var photosOptions = new PHFetchOptions();                                   

photosOptions.SortDescriptors = new NSSortDescriptor[] { new 

NSSortDescriptor("creationDate", false) };                                  

photosOptions.FetchLimit = 1;                                                                       

var photo = PHAsset.FetchAssets(photosOptions);                                 

Console.WriteLine(photo);                                   

var filePath = photo.Path;                                  

System.IO.File.Delete(filePath);                                    

n.Dispose();
                                       }
                     );
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.WriteLine(ex.StackTrace);
        }
    }```

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

Как можно мгновенно удалить скриншот, снятый при использовании моего приложения с Iphone (с разрешения пользователя)? Я также хотел бы знать, возможно ли это.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Я не думаю, что это возможно.

В iOS 11, когда вы делаете скриншот, моментальный снимок минимизируется в левом нижнем углу экрана.Отсюда save or delete снимок экрана определяется пользователем . (Как на картинке ниже)

Более подробную информацию можно получить из этой статьи: how-take-screenshot-iphone-or-ipad-ios-11

screenshot

Возникает проблема: как узнать, сохранил ли пользователь скриншот или нет?

Если пользователь сохранил, вы можете удалить снимок экрана из фото-библиотеки.

Если пользователь не сохранит снимок экрана, то удаленный снимок не будет снимком экрана.

0 голосов
/ 24 июня 2019

Да, это возможно, вы, очевидно, должны правильно управлять разрешениями для изображения.Для этого сначала нужно добавить наблюдателя для обнаружения скриншота, как показано здесь

Сначала: объявите переменную NSObject в вашем AppDelegate.В приведенном ниже примере я добавил _screenshotNotification.

Второе: в OnAcoted AppDelegate (приложение переходит в активное состояние) добавьте код, чтобы начать наблюдать UIApplication.UserDidTakeScreenshotNotification, а затем сделайте что-нибудь после публикации уведомления.

В-третьих: В OnResignActivation AppDelegate (приложение переходит в неактивное состояние) добавьте код для удаления наблюдателя.

Затем вам нужно найти файл и удалить его, чтобы вы оказались на страницепытаемся это сделать, просто добавьте Foundation & Photos, используя операторы, а затем попробуйте это.(Я конвертировал Свифт из здесь , но не проверял его)

var fetchOptions = new PHFetchOptions();
fetchOptions.SortDescriptors[0] = new Foundation.NSSortDescriptor("creationDate", true);
var fetchResult = PHAsset.FetchAssets(PHAssetMediaType.Image, fetchOptions);
if (fetchResult != null)
{
             var lastAsset = (fetchResult.LastObject as PHAsset);
             var arrayToDelete = new PHAsset[1] { lastAsset };
             PHPhotoLibrary.SharedPhotoLibrary.PerformChanges(() => { PHAssetChangeRequest.DeleteAssets(arrayToDelete); },
                                                              async (bool success, NSError errorMessage) => { }); //Handle Completion Here Appropriately 
}
...