3

CopyTranslateというiPhoneアプリを見たことがあります。たとえばサファリで何かをコピーすると、ローカル通知によってコピーしたものの翻訳が得られます。

そのため、アプリがバックグラウンドでもUIPasteboardChangedNotificationを受信できるかどうか疑問に思っています。次に、バックグラウンドで10分間実行できるアプリを作成するテストを行い、UIPasteboardChangedNotificationを確認します。その結果、アプリはバックグラウンドで通知を受け取ることができません。

CopyTranslateがそのような機能をどのように実装するかについて誰かが考えを持っていますか?1秒あたりのUIPasetBoardをチェックしますか?このように、画像コピーなどの代わりに新しい文字列コピーがあることをどのようにして知ることができますか。

アイデアありがとうございます!

バックグラウンドで1秒あたりのUIPasteboardのchangeCountをチェックすることで、この問題を解決しました。

詳細は次のとおりです。

AppDelegateにプロパティlastChangeCountを保持し、アプリケーションがバックグラウンドになると、反復ごとに1秒間スリープする無限のwhileループを開始します。そして、UIPasteboardのchangeCountを反復ごとのlastChangeCountと比較します。それらが等しくない場合は、pasteboardにいくつかの新しい貼り付けアイテムがあることがわかります。したがって、UIPasteboardの文字列プロパティを取得します。存在する場合は、ローカル通知をスケジュールして表示します。そうでない場合は、ユーザーが画像などをコピーする可能性があるため、何もしません。

4

1 に答える 1

1

考えられる方法は、アプリがバックグラウンドで一定の時間間隔(たとえば5秒)にあるときにUIPasteboardを「監視」することです。これにより、クリップボードに変更があったかどうかを知ることができます。コピー内容が文字列であることを確認するには、[[UIPasteboard generalPasteboard] string]

ただし、バックグラウンドタスクは600秒に制限されているため(バックグラウンドでミュート音楽を再生すると拒否される可能性があります)、時間を延長する方法についての議論があります。また、Pasterbotは同様のメソッドを宣言しています。ここを参照してください。

于 2012-12-28T08:18:53.893 に答える