iOS: poziom pochodni na iPhonie 11 Pro

9

Używam AVCaptureDevice.setTorchModeOn(level)metody, aby włączyć latarkę przy zmiennej jasności.

Na moim starym iPhone SE to działa poprawnie - można wyraźnie zobaczyć 4 różne poziomy jasności jak zmienić levelod 0celu 1.

Ale w iPhonie 11 Pro latarka włącza się tylko wtedy, gdy poziom jest ustawiony 1.0! Jego jasność jest daleka od maksymalnego poziomu (w porównaniu do latarki z Control Center).

Próbowałem użyć maxAvailableTorchLevelstałej, ale wyniki są takie same jak przy użyciu 1.0.
Próbowałem też wartości więcej niż 1.0- powoduje to wyjątek (zgodnie z oczekiwaniami).

Czy ktoś też miał ten problem? Może są jakieś obejścia?

Pavel Alexeev
źródło
1
Czy to ma jakieś aktualizacje ? Otrzymuję raporty z tym problemem, więc jestem na krawędzi kupienia iPhone'a 11 Pro w nagłych wypadkach z tego powodu: /
blackjack75
Jeszcze niestety Może Apple naprawi to w jakiejś aktualizacji… Czy wiesz, czy to tylko na iPhonie 11 Pro, czy na wszystkich nowych telefonach?
Pavel Alexeev
Nie jestem jeszcze pewien, czy problem dotyczy iPhone'a 11. Miałem skargi tylko od użytkowników iPhone'a 11 pro. Próbowałem poprawek w ciemno, obsługiwać więcej expcetions itp., Ale nie wiem, czy to pomogło, ponieważ nie mam jeszcze urządzenia. Jeśli masz rzeczywiste urządzenie, czy możesz sprawdzić wersję 1.81 tutaj i sprawdzić, czy to pomoże? Kazałem użytkownikom powiedzieć, że zadziałało przy pierwszym uruchomieniu, ale potem nie udało się zmienić jasności i przygasło, więc może jest to obejście. i.smte.ch/ledflashfree
blackjack75
developer.apple.com/documentation/avfoundation/avcapturedevice/… Czy wywołujesz lockForConfiguration () i unlockForConfiguration () przed ustawieniem pochodni?
Antonio Yaphiar
@antonioyaphiar, na pewno to zrobię!
Pavel Alexeev

Odpowiedzi:

1

Pamiętałem, że w czasach iOS 3.x nie mieliśmy prostego API LED. Musieliśmy rozpocząć pełną sesję przechwytywania wideo. Okazuje się, że w przypadku iPhone'a 11 wydaje się to jedynym rozwiązaniem. Chciałbym usłyszeć o innych, którzy tego nie wymagają.

To jest moje przetestowane obejście. Używam tutaj Celu C, nie Szybkiego, ponieważ tego właśnie używałem w tej starej aplikacji z 2009 roku! Możesz łatwo znaleźć kod Swift, aby rozpocząć przechwytywanie wideo (i zignorować wyjście, powinno działać tak samo.

AVCaptureSession* session = [[AVCaptureSession alloc] init];

AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:&error];
if ([session canAddInput:deviceInput]) {
    [session addInput:deviceInput];
}

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

CALayer *rootLayer = self.view.layer;
[rootLayer setMasksToBounds:YES];

CGRect frame = self.view.frame;
[previewLayer setFrame:frame];
[rootLayer insertSublayer:previewLayer atIndex:0];

//This is where you'd save the video with AVCaptureVideoDataOutput but of course we don't.

[session startRunning];

A potem po prostu uruchom LED jak zwykle:

NSError *error = nil;

if ([inputDevice isTorchModeSupported:AVCaptureTorchModeOn])
[inputDevice setTorchModeOnWithLevel:1.0 error:&error];

To uzyskuje maksymalną jasność na moim iPhonie 11 Pro. Teraz szukam tego samego rozwiązania bez konieczności korzystania z przechwytywania wideo (który oczywiście wykorzystuje baterię ORAZ wymaga pozwolenia, którego użytkownicy mogą nie lubić. Należy to dobrze wyjaśnić).

blackjack75
źródło
-1

Zgodnie z dokumentacją dla maxAvailableTorchLevel

Ta stała zawsze reprezentuje maksymalny dostępny poziom palnika, niezależnie od rzeczywistej maksymalnej wartości aktualnie obsługiwanej przez urządzenie.

Jeśli ta stała zawsze reprezentuje maksymalny dostępny poziom pochodni, nie tylko wyodrębniamy, że różne urządzenia mają różne maksymalne dostępne poziomy, ale także, że wspomniane urządzenie nie może przekroczyć 1,0.

Najlepsze, co możesz teraz zrobić, to skontaktować się ze wsparciem programisty Apple .

Tiago Martins Peres 李大仁
źródło