Có cách nào để kiểm tra xem ứng dụng iOS có ở chế độ nền không?


Câu trả lời:


285

Đại biểu ứng dụng được gọi lại cho biết chuyển trạng thái. Bạn có thể theo dõi nó dựa trên đó.

Ngoài ra, thuộc tính applicationState trong UIApplication trả về trạng thái hiện tại.

[[UIApplication sharedApplication] applicationState]

64
Cảm ơn bạn - và để rõ ràng hơn, đó là [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
podperson

39
Tôi nghĩ [[UIApplication sharedApplication] applicationState] != UIApplicationStateActivelà tốt hơn, vì UIApplicationStateInactive gần như tương đương với nền tảng ...
JP Illanes

6
Các tiểu bang được đánh vần ở đây: developer.apple.com/l
Library / ios / document / uikit / report / Lỗi

2
Tôi đã thấy rằng các cuộc gọi lại chuyển tiếp không được gọi nếu ứng dụng của bạn được đưa vào cuộc sống cho các mục đích tìm nạp nền.
Mike asdf

175
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive)
{
   //Do checking here.
}

Điều này có thể giúp bạn trong việc giải quyết vấn đề của bạn.

Xem bình luận bên dưới - không hoạt động là một trường hợp khá đặc biệt và có thể có nghĩa là ứng dụng đang trong quá trình được đưa vào nền trước. Điều đó có thể hoặc không có nghĩa là "nền" cho bạn tùy thuộc vào mục tiêu của bạn ...


Đẹp, câu trả lời hữu ích. Đã làm việc
Saranjith

1
Từ các tài liệu: UIApplicationStateInactive - Ứng dụng đang chạy ở nền trước nhưng không nhận được sự kiện. Điều này có thể xảy ra do sự gián đoạn hoặc do ứng dụng đang chuyển sang hoặc từ nền.
Andy Weinstein

30

Swift 3

    let state = UIApplication.shared.applicationState
    if state == .background {
        print("App in Background")
    }

điều ngược lại cũng đúng? Tôi có thể kiểm tra == .inactive || == .active để xem nó có ở nền trước không (trái ngược với mở trên luồng nền)?
roberto tomás

21

Phiên bản Swift:

let state = UIApplication.sharedApplication().applicationState
if state == .Background {
    print("App in Background")
}

8

Nếu bạn muốn nhận cuộc gọi lại thay vì "hỏi" về trạng thái ứng dụng, hãy sử dụng hai phương thức này trong AppDelegate:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSLog(@"app is actvie now");
}


- (void)applicationWillResignActive:(UIApplication *)application {
    NSLog(@"app is not actvie now");
}

1
Điều quan trọng cần lưu ý là applicationWill EntryForeground được gọi trước applicationDidBecomeActive. Do đó, kiểm tra applicationState từ bên trong applicationWill EntryForeground sẽ trả về UIApplicationStateBackground. Điều này đã ném tôi đi một chút. Vì vậy, tôi đã sử dụng kết hợp các giải pháp trên bằng cách kiểm tra applicationState từ bên trong applicationDidBecomeActive thay vì (không chính xác) kiểm tra applicationState cho UIApplicationStateBackground từ trong applicationWill EntryForeground.
Justin Domnitz

Tôi đã có giải pháp tương tự và nó phù hợp cho các trường hợp bạn cần thông tin trạng thái trên một luồng / hàng đợi khác.
naz

4

nhanh 5

let state = UIApplication.shared.applicationState
    if state == .background {
        print("App in Background")
        //MARK: - if you want to perform come action when app in background this will execute 
        //Handel you code here
    }
    else if state == .foreground{
        //MARK: - if you want to perform come action when app in foreground this will execute 
        //Handel you code here
    }

1
Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó.
rollstuhlfahrer

bởi vì không có cơ thể viết cho swift 4 giúp đỡ cho 4 người nhanh chóng
Shakeel Ahmed

mã sẽ kiểm tra trạng thái của bạn nếu ứng dụng ở chế độ nền! Giả sử nếu bạn đang nhận thông báo ở chế độ nền và bạn muốn thực hiện một số thao tác như thực hiện một số hành động nếu nhận được thông báo khi ứng dụng chạy nền, mã bên trong sẽ thực thi
Shakeel Ahmed

3

Swift 4+

let appstate = UIApplication.shared.applicationState
        switch appstate {
        case .active:
            print("the app is in active state")
        case .background:
            print("the app is in background state")
        case .inactive:
            print("the app is in inactive state")
        default:
            print("the default state")
            break
        }

1

Tiện ích mở rộng Swift 4.0 để giúp truy cập tiện ích dễ dàng hơn một chút:

import UIKit

extension UIApplication {
    var isBackground: Bool {
        return UIApplication.shared.applicationState == .background
    }
}

Để truy cập từ trong ứng dụng của bạn:

let myAppIsInBackground = UIApplication.shared.isBackground

Nếu bạn đang tìm kiếm thông tin về các quốc gia khác nhau ( active, inactivebackground), bạn có thể tìm thấy những tài liệu hướng dẫn của Apple ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.