2015-09-01 20 views
9

Fotoğraf makinesini kullanmaya çalışan bazı sorunlar yaşıyorum. Sorun şu ki, bazı cihazlar bana kamera girişini ayarlar altında gösteriyor ve bazıları da bunu yapmıyor. Kamera anahtarının görünmediği cihazlarda, fotoğraf makinesini kullanamıyorum çünkü izinleri yok ve bunları etkinleştirmek için ayarların altında görünmüyor.iOS Bazı kameralardaki ayarlar kapsamında fotoğraf makinesi ayarları yapı altında görünmüyor

Şu şekilde bir cihazda böyle görünecektir:

enter image description here

Ve çalışmıyor cihazlarda nasıl göründüğünü budur. O ekran aldığım zaman

enter image description here

, uygulama zaten izinleri istedi ama olmadı gerekirdi.

Ayrıca, bu aygıtların Kısıtlamalar etkin olmadığı doğrulandı.

Herhangi bir fikrin var mı?

GÜNCELLEME 1: Eklenen kod

Bu benim kamera göstermek için kullanıyorum kodu (bu özel görünüm altında, değil yerli kamera görünümü denetleyicisi) İhtiyacınız

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

Fotoğraf makinesi yalnızca uygulamanızın iznini istediğinde bir kez görünür. İzin almak için kullanmakta olduğunuz kodu gösterebilir misiniz? –

+0

Eklendi. Yakalama oturumunu başlattığımda bu kod otomatik olarak izin istemiyor mu? Fotoğraf çekmek için bir UIImagePickerController kullanıyorum uygulamasında başka bir yer var. Belki izinleri doğru bir şekilde kullanmıyorum, ancak daha önce UIImagePickerController'ı açtıysam izinler etkinleştirilir? – lucaslt89

+0

Aynı sorunu yaşıyorum ve bir çözüm için çok çaresizim. Bunu çözmenin bir yolunu bulursanız lütfen bana bildirin! – durazno

cevap

8

olduğunu Bir oturum açmadan önce izin istemek için.

[AVCaptureDevice requestAccessForMediaType:completionHandler:] 
+1

Hayır, bu doğru değil. "Bir AVCaptureDeviceInput oluşturulurken durumun AVAuthorizationStatusNotDenmesi durumunda yetkilendirme iletişim kutusu otomatik olarak gösterilecektir." ve el ile izin istemezseniz, el ile yapıldığında da sorulur. Ancak ben lucaslt89 ile aynı sorunu yaşıyorum. Konum ve gizliliğin sıfırlanmasından sonra bile, uygulama manuel olarak [AVCaptureDevice requestAccessForMediaType: completionHandler:] olarak adlandırıldığında izin ve aynı sonucu istemez. Bu bazı cihazlarda olur, ancak bazılarında böyle bir sorun olmaz. NİYE YA?!! – durazno

+0

Aynı sorunu yaşıyorum. Uygulama izin istemiyor. Düzeltdiniz mi? – abhi1992

3

1. Adım kullanın: Adım 2

"Privacy - Camera Usage Description" 

(tırnaklar olmadan) Aşağıdaki anahtarı kullanarak Info.plist üzerinde uygun bir kamera mesajı erişim mesajı verin: nesnel-C/SWIFT için yapmanız gerekenler bir kameraya erişmesine izin istemek

AMAÇ-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 
     } 
    }) 
İlgili konular