iPad用の監視アプリケーションを開発しています。私のアプリがバックグラウンドにあり、別のアプリがフォアグラウンドにある間、すでにプライベートフレームワークを使用して人工イベントを送信し、ユーザー入力をシミュレートしています。
今私の問題は、iPadのスクリーンショットをプログラムで画像として取得する必要があることです。私は UIGetScreenImage メソッドを知っており、画面上のすべてのビューをレンダリングして画像を取得します。ただし、UIGetScreenImage をバックグラウンドから呼び出すことはできません。(バックグラウンドから試してみると、エラーが表示されます)また、アプリのビューしか知らないため、別のアプリからのビューをレンダリングできません。
オプション 1 iPad でスクリーンショットを生成するために、ホーム キーとロック キーのクリックをシミュレートできます。その後、[PLPhotoLibrary](https://github.com/nst/iOS-Runtime-Headers/blob/3686717e107fa36a990fac20c30da2da9a25b698/PrivateFrameworks/PhotoLibrary.framework/PLPhotoLibrary.h) を使用して、プライベート API を使用してフォトアルバムからこの画像にアクセスします。 、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 [読み取り専用データベースへの書き込み試行]
このスクリーンショットをより良い方法で実現する方法についての提案をいただければ幸いです。
このアプリを App Store にアップロードする予定はありません。私用です。