如何在 iOS 应用程序最小化时从相机拍照?
(即在 applicationDidEnterBackground:
/applicationWillResignActive:
之后)
AppDelegate.m: ( thank you link )
- (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: ( thank you link )
-(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)。
也许有其他图书馆可以负担得起吗?
最佳答案
出于隐私原因,当您的应用处于后台时,您不能使用相机。
为什么?
好吧,我很高兴你问这个。故事时间!
Bob 是一名在美国国家安全局工作的人,负责开发控制鲨鱼的 super secret 猴子。为什么?他不能说。
Bob 有一天在他的 iPhone 上下载了一个应用程序,名为 John's Secret Stealer。 Bob 不看应用标题。
由于 Bob 是一个非常健忘的人,有一天他在工作之外忘记将手机留在储物柜中。站在 super secret 的鲨鱼食谱旁,他摸到口袋里的手机,然后把它拿出来。它响了,因为他刚收到一条短信。
在那一刻,John's Secret Stealer 使用 Bob 手机的后置摄像头拍了一张照片,并将其发送到 John 的服务器,而 Bob 并不知道。
第二天,全世界都知道了控制鲨鱼的 secret 项目。
这是一个极端的例子,但它是规则的主要内容。 Apple 的政策是用户始终处于控制之中 - 避免像 Bob 这样的情况。
关于ios - 如何拍摄照片然后将 iOS 应用程序最小化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17664392/