4

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 にアップロードする予定はありません。私用です。

4

4 に答える 4

1

デバイスを脱獄することがおそらく唯一の手段であり、私はそれをお勧めしません.

ただし、Apple は、開発者であろうとなかろうと、あなたが説明した方法で iPad を使用することを意図したものではありません。

于 2012-04-30T08:52:49.127 に答える
1

大規模なテストと試行の結果、プライベート API を使用しても、フォト アルバムから写真を消去するのは非常に大きな問題であり、おそらく不可能であるという結論に達しました。最終的に、ユーザー入力をシミュレートして写真を消去するスクリプトを作成しました。

于 2012-05-22T14:07:01.067 に答える