2009-06-21 27 views
5

Tôi hiện đang có một ứng dụng rất đơn giản mà tương tác duy nhất là lắc iPhone. Tuy nhiên cuối cùng màn hình mờ và tự động khóa kể từ khi iPhone không nhận được bất kỳ sự kiện cảm ứng nào. Tôi đã tự hỏi nếu có một cách để thiết lập lại thời gian tự động khóa khi lắc?Trì hoãn nhưng không tắt tự động khóa iPhone

Tôi biết rằng để vô hiệu hóa tính năng tự động khóa hoàn toàn tôi sẽ làm điều này:

[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ] 

nhưng tôi không thực sự muốn vô hiệu hóa nó hoàn toàn; nếu iPhone không được sử dụng hợp pháp, iPhone sẽ tự động khóa như mong đợi.

Cảm ơn sự giúp đỡ của bạn.

+2

Tôi nghĩ rằng bé lắc đã bị cấm. –

Trả lời

11

Bạn có thể chuyển đổi giá trị [UIApplication sharedApplication].idleTimerDisabled dựa trên giá trị của NSTimer của riêng bạn hoặc cử chỉ hành vi (lắc điện thoại). Nó có thể được đặt thành YES/NO nhiều lần trong ứng dụng của bạn.

+0

OK, tôi sẽ cho đi. Tôi nghĩ rằng có thể chỉ có một phương pháp resetIdleTimer hoặc một cái gì đó sạch hơn một chút. –

6

Đây là mã tôi sử dụng trong ứng dụng của mình. Một chút nền: ứng dụng của tôi có máy chủ web tích hợp để người dùng có thể truy cập dữ liệu từ trình duyệt qua WIFI và mỗi khi có yêu cầu đến máy chủ, tôi mở rộng bộ hẹn giờ khóa (tối thiểu 2 phút trong trường hợp này; bạn vẫn nhận được số lượng thời gian mặc định được thêm khi bật lại).

// disable idle timer for a fixed amount of time. 
- (void) extendIdleTimerTimeout 
{ 
    // cancel previous scheduled messages to turn idle timer back on 
    [NSObject cancelPreviousPerformRequestsWithTarget:self 
     selector:@selector(reenableIdleTimer) 
     object:nil]; 
    // disable idle timer 
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 

    // re-enable the timer on after specified delay. 
    [self performSelector:@selector(reenableIdleTimer) withObject:nil afterDelay: 60 * 2]; 

} 

- (void) reenableIdleTimer 
{ 
sharedApplication].idleTimerDisabled); 
    [NSObject cancelPreviousPerformRequestsWithTarget:self 
     selector:@selector(reenableIdleTimer) 
     object:nil]; 
    // disable idle timer 
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; 
} 
+0

Mã này rất hữu ích, chúng tôi đã bỏ nó trực tiếp vào ứng dụng của chúng tôi, cảm ơn! Chỉ cần FYI, thử nghiệm của tôi với một iPad 2 chạy iOS 5.0.1 dường như cho thấy rằng số lượng cố định của thời gian thực sự trở thành thời gian nhàn rỗi tối thiểu - tức là. nếu độ trễ khóa được cấu hình của người dùng ít hơn, màn hình sẽ khóa ngay sau cuộc gọi setDileTimerDisabled: NO. Nếu thời gian khóa của người dùng dài hơn khoảng thời gian cố định, mã trên không có hiệu lực. – JosephH

+0

Mã của tôi là trước iOS4, vì vậy, bạn nên cung cấp các quan sát của mình trên các phiên bản iOS mới hơn. – wkw

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