3

最小化iOS应用程序时如何从相机拍照?
(即在applicationDidEnterBackground:/之后applicationWillResignActive:

AppDelegate.m:(谢谢链接

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    //To make the code block asynchronous
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        //### background task starts
        NSLog(@"Running in the background\n");
        while(TRUE)
        {
            printf("Called"); //////Work fine

            [self.window.rootViewController captureNow]; /////Capture picture!

            [NSThread sleepForTimeInterval: 10.0]; //wait for 10 sec
        }
    });

    return YES;
}

OurViewController.m:(谢谢链接

-(IBAction)captureNow {

    AVCaptureConnection *videoConnection = nil;
    for (AVCaptureConnection *connection in _stillImageOutput.connections)
    {
        for (AVCaptureInputPort *port in [connection inputPorts])
        {
            if ([[port mediaType] isEqual:AVMediaTypeVideo] )
            {
                videoConnection = connection;
                break;
            }
        }
        if (videoConnection)
        {
            break;
        }
    }

    NSLog(@"about to request a capture from: %@", _stillImageOutput);
    [_stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
     {
         CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);

         if (error)
         {
             NSLog(@"ERROR = %@", error); ///// Error!
         }

         NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; ////SIGABRT, cause imageSampleBuffer is nil
         UIImage *image = [[UIImage alloc] initWithData:imageData];

         UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

         [image release];
     }];
}

当应用程序处于活动状态时,此代码工作正常。但是当应用程序最小化时会出错(SIGABRT)。

也许有其他图书馆可以负担得起吗?

4

1 回答 1

5

出于隐私原因,当您的应用程序在后台时,您不能访问相机。

为什么?

好吧,我很高兴你这么问。讲故事的时间!


Bob 是一名在 NSA 工作的人,他正在开发超级秘密的猴子控制鲨鱼。为什么?他不能说。

有一天,鲍勃在他的 iPhone 上下载了一款名为John's Secret Stealer的应用程序。Bob 不阅读应用程序标题。

由于鲍勃是一个非常健忘的人,他有一天忘记把手机放在工作以外的储物柜里。站在鲨鱼绝密食谱前,他摸了摸口袋里的手机,将它掏了出来。它嗡嗡作响,因为他刚刚收到一条短信。

就在这时,John's Secret Stealer用 Bob 手机的后置摄像头拍了一张照片,然后发送到 John 的服务器,而 Bob 不知道。

第二天,全世界都知道了控制鲨鱼的秘密计划。


这是一个极端的例子,但它是规则的主体。Apple 的政策是用户始终处于控制之中——避免像 Bob 那样的情况。

于 2013-07-16T02:07:24.153 回答