2015-09-01 11 views
9

Ich habe einige Probleme, die versuchen, die Kamera zu verwenden. Das Problem ist, dass einige Geräte den Kameraeintrag unter Einstellungen anzeigen, andere nicht. Bei den Geräten, bei denen der Kamera-Schalter nicht angezeigt wird, kann ich die Kamera nicht verwenden, da sie keine Berechtigungen besitzt und auch nicht unter den Einstellungen angezeigt wird, um sie zu aktivieren.iOS Kamera Berechtigungen erscheint nicht unter Einstellungen in einigen Geräten

Dies ist, wie es auf einem Gerät sucht, das funktioniert:

enter image description here

Und das ist, wie es in Geräten sucht, die nicht funktionieren.

enter image description here

Als ich diese Screenshots nahm, habe die Klage bereits für Berechtigungen gefragt, aber es kam nicht.

Ich habe auch überprüft, dass für diese Geräte keine Einschränkungen aktiviert sind.

Irgendwelche Ideen?

UPDATE 1: Code hinzugefügt

Dies ist der Code, den ich die Kamera zu zeigen, bin mit (es unter einer benutzerdefinierten Ansicht ist, nicht der native Kamera-View-Controller)

self.captureSession = [[AVCaptureSession alloc] init]; 
AVCaptureDevice *videoCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
NSError *error = nil; 
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoCaptureDevice error:&error]; 
if(videoInput) 
{ 
    [self.captureSession addInput:videoInput]; 
} 
else 
{ 
    NSLog(@"Error: %@", error); 
} 

AVCaptureMetadataOutput *metadataOutput = [[AVCaptureMetadataOutput alloc] init]; 
[self.captureSession addOutput:metadataOutput]; 
[metadataOutput setMetadataObjectsDelegate:self 
            queue:dispatch_get_main_queue()]; 
[metadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeQRCode]]; 

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession]; 
previewLayer.frame = self.view.layer.bounds; 
UIView * previewView = [[UIView alloc] initWithFrame:self.view.frame]; 
[previewView.layer addSublayer:previewLayer]; 
[self.view addSubview:previewView]; 
[self.view sendSubviewToBack:previewView]; 

[self.captureSession startRunning]; 
+0

Die Kamera wird nur dort angezeigt, sobald Ihre App eine Berechtigung anfordert. Können Sie den Code anzeigen, den Sie verwenden, um eine Berechtigung anzufordern? –

+0

Hinzugefügt. Stellt der Code beim Starten der Capture-Sitzung nicht automatisch nach Berechtigungen? Es gibt einen anderen Ort in der App, wo ich einen UIImagePickerController verwende, um Fotos zu machen. Vielleicht bearbeite ich Berechtigungen nicht korrekt, aber wenn ich zuvor den UIImagePickerController geöffnet habe, sind Berechtigungen aktiviert? – lucaslt89

+0

Ich habe das gleiche Problem und sehr verzweifelt nach einer Lösung. Bitte lassen Sie mich wissen, wenn Sie einen Weg gefunden haben, dies zu lösen ...! – durazno

Antwort

8

Sie benötigen vor dem Öffnen einer Sitzung eine Erlaubnis anfordern. Verwenden

[AVCaptureDevice requestAccessForMediaType:completionHandler:] 
+1

Nein, das ist nicht wahr. "Beachten Sie, dass das Autorisierungsdialogfeld automatisch angezeigt wird, wenn beim Erstellen eines AVCaptureDeviceInput der Status AVAuthorizationStatusNotDetered lautet." und es tut genau das, wenn Sie nicht manuell um Erlaubnis bitten und Sie auch gefragt werden, wenn Sie manuell erledigt werden. Allerdings habe ich das gleiche Problem mit Lucaslt89. Auch nach dem Zurücksetzen des Standorts und des Datenschutzes fordert die App beim manuellen Aufruf [AVCaptureDevice requestAccessForMediaType: completionHandler:] keine Berechtigung und das gleiche Ergebnis an. Dies geschieht bei einigen Geräten, bei einigen anderen tritt dieses Problem nicht auf. WARUM?!! – durazno

+0

Ich habe auch das gleiche Problem. Die App fragt keine Erlaubnis. Haben Sie es korrigiert? – abhi1992

3

Schritt 1: Geben Sie eine richtige Kamera Meldung Zugriffsnachricht auf Ihrem info.plist die folgenden Schlüssel (ohne Anführungszeichen)

"Privacy - Camera Usage Description" 

Schritt 2: Für Objective-C/SWIFT Sie müssen fordern Sie eine Kamera Zugriffsberechtigung

Objective-C

[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) 
     { 
      if (granted == true) 
      { 
       //[self presentViewController   : picker animated:YES completion:NULL]; 
       //Do your stuff 

      } 
      else 
      { 
       UIAlertView *cameraAlert = [[UIAlertView alloc]initWithTitle:STR_APPLICATION_TITLE 
                    message:STR_ALERT_CAMERA_DENIED_MESSAGE 
                    delegate:self 
                  cancelButtonTitle:@"OK" 
                  otherButtonTitles:nil,nil]; 
       [cameraAlert show]; 

       NSLog(@"denied"); 
      } 

     }]; 

SWIFT

AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (videoGranted: Bool) -> Void in 
     if (videoGranted) { 
      //Do Your stuff here 

     } else { 
      // Rejected Camera 
     } 
    }) 
Verwandte Themen