2012-02-29 39 views
12

Tôi có một tính năng trong ứng dụng của mình (một ứng dụng nhịp dành cho nhạc sĩ) để làm mờ màn hình để tiết kiệm pin. Để đặt độ sáng, tôi đang sử dụng:Không thể khôi phục độ sáng khi thoát ứng dụng

[UIScreen mainScreen].brightness = 0.1; 

Tôi đang lưu độ sáng ban đầu khi khởi động ứng dụng trong chế độ xemDidLoad (...) và lưu thành mặc định người dùng của tôi.

Khi thay đổi quan điểm trong ứng dụng, tôi lấy lại độ sáng ban đầu từ Defaults người dùng và khôi phục với một cuộc gọi:

[UIScreen mainScreen].brightness = originalBrightness; 

này hoạt động tốt. Tôi có NSLog (...) tin nhắn hiển thị giá trị ban đầu, vv ... do đó, cơ chế hoạt động.

Sự cố tôi gặp phải là cách khôi phục độ sáng ban đầu khi thoát ứng dụng khi nhấn nút Trang chủ.

Tôi đã thêm mã tương tự như phương pháp đại biểu ứng dụng của tôi cho:

applicationWillResignActive(...) 
applicationDidEnterBackground(...) 
applicationWillTerminate(...) 

Họ từng có một lời gọi phương thức để thiết lập độ sáng màn hình như trước đây trong giao diện với tương tự NSLog (...) là thể hiện lấy lại độ sáng ban đầu ... và tất cả đều chính xác. Tôi cũng đã gỡ lỗi trong và các cuộc gọi để thiết lập độ sáng đang được thực hiện ... nhưng các ứng dụng thoát, và màn hình thiết bị vẫn còn ở mức thấp hơn, mờ đi.

Cuối cùng, nếu bạn nhấp vào nút "khóa" ở trên cùng, sau đó nhấn nút Trang chủ để đánh thức nó ... độ sáng là chính xác.

Nghi ngờ của tôi là bất kỳ hành động hoặc sự kiện nào được kích hoạt với lệnh gọi của tôi để đặt độ sáng khi ứng dụng thoát không được thông qua, có thể do trạng thái không hợp lệ hoặc tương tự.

Ngoài ra, ứng dụng của tôi được thiết lập để không chạy ở chế độ nền, thiết lập trong info.plist như:

Application does not run in background  YES 

Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn!

+1

Đây là các API riêng tư? Tôi không thấy thuộc tính mainWindow hoặc mainWindows (typo?) Trong lớp UIScreen. Ý bạn là mainScreen? – picciano

+0

Có, lỗi chính tả của tôi. Tôi là '[màn hình chính UIScreen] .brightness = val;' hoặc [[UIScreen mainScreen] setBrightness: val]; ' – Cal30

+0

Tôi chắc chắn không có cách nào để đặt cài đặt này ở bên ngoài ứng dụng của bạn. Tài liệu của Apple không nói cụ thể điều này nhưng tôi đã thấy hai ứng dụng thay đổi độ sáng khác trong trường hợp này. Ai đó [ở đây] (http: // stackoverflow.com/a/7901339/76810) đồng ý. – SSteve

Trả lời

1

iOS cho phép ứng dụng đó một chút thời gian trước khi thoát. Bạn có thể thử một sleep trong một phần giây sau khi thiết lập độ sáng.

+0

@piccano Tôi đã thử rằng sau khi đăng bài ở đây, nhưng trong đại biểu không có kết quả. Tôi đã thử: [code] sleep() [/ code] cũng như [code] [Thread sleepForTimeInterval:] [/ code] nhưng không thay đổi. – Cal30

0

Nếu bạn đọc https://devforums.apple.com/thread/139813 cẩn thận, nó nói rằng thay đổi độ sáng không phải là vĩnh viễn. Độ sáng của người dùng ban đầu đã trở lại, khi bạn nhấn nút khóa và mở khóa lại. Trên thực tế, tôi phải khôi phục độ sáng ứng dụng của mình nếu người dùng chạm vào nút khóa trong khi ứng dụng của tôi đang chạy:

- (void)applicationDidBecomeActive:(UIApplication *)application{ 
    [self setBrightness]; 
} 
0

Không có nhiều niềm vui với điều này. Cách khắc phục là đặt lại độ sáng trên chế độ xem ViewControllerWillDisappear. Không phải là một giải pháp tuyệt vời mà là người duy nhất tôi đã tìm được cho đến nay để làm việc (điều này đã bị phá vỡ trong nhiều năm ...)

Các vấn đề liên quan