Взяв UIPasteboard, как Pastebot, в фоновом режиме - PullRequest
3 голосов
/ 19 апреля 2011

Я знаю, что это возможно, поскольку Tapbots Pastebot делает это. Я пытаюсь захватить UIPasteboard, когда мое приложение для iPhone работает в фоновом режиме, и добавить его в UITableView, как это делает Pastebot, но я также пытаюсь сократить ссылку, если это URL, и скопировать ее обратно на UIPastboard, чтобы она была готова для пользователя, чтобы вставить в любом месте. Теперь Pastebot, по-видимому, работает в фоновом режиме, воспроизводя аудиофайл в течение 10 минут. Я настроил NSNotificationCenter так в приложении DidFinishLaunching

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pasteboardChangedNotification:) name:UIPasteboardChangedNotification object:[UIPasteboard generalPasteboard]];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pasteboardChangedNotification:) name:UIPasteboardRemovedNotification object:[UIPasteboard generalPasteboard]];

- (void)pasteboardChangedNotification:(NSNotification*)notification {
pasteboardChangeCount_ = [UIPasteboard generalPasteboard].changeCount; 
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
     if (pasteboardChangeCount_ != [UIPasteboard generalPasteboard].changeCount) {
    [[NSNotificationCenter defaultCenter] postNotificationName:UIPasteboardChangedNotification object:[UIPasteboard generalPasteboard]];
     }
}

Может ли кто-нибудь указать мне направление на захват UIPasteboard и сокращение ссылки, если это URL, и отправку ее обратно на UIPasteboard? Я прочитал документы многозадачной разработки и документы UIPasteboard. Если у кого-нибудь есть решение, не могли бы вы поделиться им со мной?

Спасибо

Ответы [ 3 ]

8 голосов
/ 22 апреля 2012

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

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Create a background task identifier
    __block UIBackgroundTaskIdentifier task; 
    task = [application beginBackgroundTaskWithExpirationHandler:^{
        NSLog(@"System terminated background task early"); 
        [application endBackgroundTask:task];
    }];

    // If the system refuses to allow the task return
    if (task == UIBackgroundTaskInvalid)
    {
        NSLog(@"System refuses to allow background task");
        return;
    }

    // Do the task
    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSString *pastboardContents = nil;

        for (int i = 0; i < 1000; i++) 
        {
            if (![pastboardContents isEqualToString:[UIPasteboard generalPasteboard].string]) 
            {
                pastboardContents = [UIPasteboard generalPasteboard].string;
                NSLog(@"Pasteboard Contents: %@", pastboardContents);
            }

            // Wait some time before going to the beginning of the loop
            [NSThread sleepForTimeInterval:1];
        }

        // End the task
        [application endBackgroundTask:task];
    });


}
4 голосов
/ 20 апреля 2011

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

0 голосов
/ 09 мая 2014

Я знаю, что это старая нить.Но я хотел бы поделиться этим с вами:

http://blog.daanraman.com/coding/monitor-the-ios-pasteboard-while-running-in-the-background/#comment-15135

Однако я сомневаюсь, отклонит ли Apple это при попытке отправить его в App Store, как он чувствуетдля меня, как взломать.Взлом, который Apple изо всех сил старается избежать с помощью всей своей многозадачности.

Кто-нибудь думает об этом?

...