IOS 7以降、AppleのMultitasking APIを使用すると、アプリを3つの新しいバックグラウンドモードで実行できます:バックグラウンドフェッチ、リモート通知コンテンツ、およびバックグラウンド転送サービス。 Appleは、iOSユーザーがすべてのアプリをバックグラウンドで実行できるかどうか、または個々のアプリをバックグラウンドで実行できるかどうかを設定することもできます([設定]> [全般]> [アプリのバックグラウンド更新])。アプリがバックグラウンドで更新するアプリの機能を無効にしているかどうかをプログラムで検出する方法
これはあなたが探しているものです。
if ([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusAvailable) {
NSLog(@"Background updates are available for the app.");
}else if([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusDenied)
{
NSLog(@"The user explicitly disabled background behavior for this app or for the whole system.");
}else if([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusRestricted)
{
NSLog(@"Background updates are unavailable and the user cannot enable them again. For example, this status can occur when parental controls are in effect for the current user.");
}
UIApplicationのbackgroundRefreshStatusプロパティを確認してください。以下はApple document。
このプロパティは、バックグラウンドロケーション更新の処理やバックグラウンドフェッチの実行など、バックグラウンド動作を処理するためにアプリをバックグラウンドで起動できるかどうかを反映します。アプリをバックグラウンドで起動してタスクを実行することに依存している場合、このプロパティの値を使用して、実行できるかどうかを判断し、実行できない場合はユーザーに警告できます。このプロパティの値がUIBackgroundRefreshStatusRestrictedに設定されている場合、ユーザーに警告しないでください。制限されたユーザーには、アプリのマルチタスクを有効にする機能がありません。
Swift 3およびiOS10の場合:
switch UIApplication.shared.backgroundRefreshStatus {
case .available:
print("Refresh available")
case .denied:
print("Refresh denied")
case .restricted:
print("Refresh restricted")
}