Вопрос по objective-c, iphone, ipad, ios – Получить скриншот, пока приложение в фоновом режиме? (Частные API разрешены)

2

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

Теперь моя проблема в том, что мне нужно получить скриншот iPad в виде изображения программно. Я знаю метод UIGetScreenImage, а также рендеринг каждого вида на экране, чтобы получить изображение. Однако UIGetScreenImage нельзя вызвать из фона. (Я получаю сообщение об ошибке, когда пытаюсь сделать это из фона). И я не могу отобразить представления из другого приложения, поскольку я знаю только представления моего приложения.

OPTION 1 I am able to simulate a click on the home and lock keys, for the iPad to generate a screenshot. Afterwards, I use private APIs to access this image from the photoalbum, using the [PLPhotoLibrary](https://github.com/nst/iOS-Runtime-Headers/blob/3686717e107fa36a990fac20c30da2da9a25b698/PrivateFrameworks/PhotoLibrary.framework/PLPhotoLibrary.h ), PLPhotoAlbum а такжеPLPhoto.

id lib = [PLPhotoLibrary sharedPhotoLibrary];
id allPhotosAlbum = [lib allPhotosAlbum];
id contents = [lib albumContents];
id lastPhoto = [contents objectAtIndex:[contents count] -1];
UIImage *screenshot = [lastPhoto newFullSizeImage];

Единственная проблема с этим подходом состоит в том, что скриншоты будут складываться на альбоме, заполняя память iPad. Так что либо мне нужен другой способ, либо мне нужен способ удалить эти картинки. Но когда я вызываю методы удаления в фотоальбоме и библиотеке фотографий, я получаю «ошибку SQLITE 8 [попытка записи в базу данных только для чтения» »

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

Я не буду загружать это приложение в магазин приложений. Это для частного использования.

Ваш Ответ

4   ответа
0

Вы можете использовать следующий закрытый API: [[UIWindow class] executeSelector: @selector (createScreenIOSurface)];

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/13971013/…Error: User Rate Limit Exceeded
1

После масштабных испытаний и попыток я пришел к выводу, что даже с частными API-интерфейсами удаление фотографий из фотоальбома является слишком большой проблемой, возможно, даже невозможным. В итоге я написал скрипт, который имитирует пользовательский ввод и стирает фотографии.

1

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

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

Error: User Rate Limit Exceeded
2

Раньше вы могли делать снимок экрана всего экрана устройства, с переднего плана или фона, используя IOSurface. Apple заблокировала этот API в iOS 9. Это больше невозможно без джейлбрейка вашего устройства, приватного API или нет.

Похожие вопросы