iOS: ระดับคบเพลิงบน iPhone 11 Pro


9

ฉันใช้AVCaptureDevice.setTorchModeOn(level)วิธีการเปิดไฟฉายที่ความสว่างแปรผัน

บน iPhone SE เก่าของฉันก็ปรับการทำงาน - ฉันสามารถเห็นได้ชัดเจน 4 ระดับความสว่างที่แตกต่างกันฉันจะเปลี่ยนlevelจากการ01

แต่ใน iPhone 11 Pro ไฟฉายจะเปิดเฉพาะเมื่อระดับเป็น1.0! และก็ความสว่างถ้าอยู่ไกลจากระดับสูงสุด (เทียบกับไฟฉายจากศูนย์ควบคุม)

ฉันพยายามใช้maxAvailableTorchLevelอย่างต่อเนื่อง 1.0แต่ผลเป็นเช่นเดียวกับการใช้
ลองใช้ค่ามากกว่า1.0- ผลลัพธ์นี้เป็นข้อยกเว้น (ตามที่คาดไว้)

ใครบ้างมีปัญหานี้เช่นกัน? อาจจะมีวิธีแก้ไขบางอย่าง?


1
มีการอัพเดทอะไรบ้าง? ฉันได้รับรายงานเกี่ยวกับปัญหานี้ดังนั้นฉันจึงกำลังจะซื้อ iPhone 11 Pro ในกรณีฉุกเฉินเพราะสิ่งนี้: /
blackjack75

ยังไม่น่าเสียดาย บางที Apple อาจแก้ไขได้ในการอัปเดตบางอย่าง ... คุณรู้หรือไม่ว่าใน iPhone 11 Pro เท่านั้นหรือโทรศัพท์ใหม่ทั้งหมด?
Pavel Alexeev

ฉันยังไม่แน่ใจว่า iPhone 11 ได้รับผลกระทบหรือไม่ ฉันมีข้อร้องเรียนจากผู้ใช้ iPhone 11 pro เท่านั้น ฉันลองใช้การแก้ไขแบบ blind, จัดการ expcetions มากขึ้น ฯลฯ แต่ฉันไม่รู้ว่ามันช่วยได้หรือไม่เพราะฉันยังไม่มีอุปกรณ์ หากคุณมีอุปกรณ์จริงคุณสามารถตรวจสอบรุ่น 1.81 ที่นี่และดูว่าสิ่งนี้ช่วยได้หรือไม่ ฉันให้ผู้ใช้บอกฉันว่ามันเริ่มทำงานตั้งแต่แรก แต่ก็ล้มเหลวในการเปลี่ยนความสว่างและกลายเป็นสลัวดังนั้นอาจมีวิธีแก้ปัญหา i.smte.ch/ledflashfree
blackjack75

developer.apple.com/documentation/avfoundation/avcapturedevice/ ...... คุณเรียก lockForConfiguration () และ unlockForConfiguration () ก่อนตั้งคบเพลิงหรือไม่
antonio yaphiar

@antonioyaphiar แน่ใจว่าฉันทำ!
Pavel Alexeev

คำตอบ:


1

ฉันจำได้ว่าย้อนกลับไปใน iOS 3.x วันเราไม่มี LED API แบบง่าย เราต้องเริ่มเซสชันการจับภาพวิดีโอแบบเต็ม ปรากฎว่าเมื่อเทียบกับ iPhone 11 นี่น่าจะเป็นทางออกเดียว ฉันชอบที่จะได้ยินเกี่ยวกับผู้อื่นซึ่งไม่ต้องการสิ่งนี้

นี่คือวิธีแก้ปัญหาผ่านการทดสอบของฉัน ฉันใช้ Objective C ที่นี่ไม่ใช่ Swift เพราะนั่นคือสิ่งที่ฉันใช้ในแอพเก่านี้ตั้งแต่ปี 2009! คุณสามารถค้นหารหัส Swift เพื่อเริ่มการจับภาพวิดีโอได้อย่างง่ายดาย (และไม่สนใจเอาต์พุตมันควรจะทำงานเหมือนกัน

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];

และหลังจากนี้คุณก็เริ่ม LED ตามปกติ:

NSError *error = nil;

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

สิ่งนี้ได้รับความสว่างสูงสุดบน iPhone 11 Pro ของฉัน ตอนนี้ฉันกำลังมองหาโซลูชันเดียวกันโดยไม่ต้องใช้การจับภาพวิดีโอ (ซึ่งเห็นได้ชัดว่าใช้แบตเตอรี่และต้องได้รับอนุญาตซึ่งผู้ใช้อาจไม่ชอบต้องอธิบายให้ดี)


-1

ตามเอกสารสำหรับmaxAvailableTorchLevel

ค่าคงที่นี้จะแสดงระดับไฟฉายสูงสุดที่มีอยู่เสมอโดยไม่ขึ้นกับค่าสูงสุดที่แท้จริงที่อุปกรณ์รองรับในปัจจุบัน

หากค่าคงที่นี้แสดงถึงระดับคบเพลิงสูงสุดที่มีอยู่เสมอเราไม่เพียง แต่จะแยกว่าอุปกรณ์ต่าง ๆ มีระดับสูงสุดที่ต่างกัน แต่ยังรวมถึงอุปกรณ์ที่คุณกล่าวถึงจะไม่สามารถสูงกว่า 1.0 ได้

หนึ่งที่ดีที่สุดสามารถทำตอนนี้คือจะยื่นมือออกไปสนับสนุนนักพัฒนาแอปเปิ้ล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.