UILocalNotification 在后台 10 分钟后不提示

2024-06-19

In didFinishLaunchingWithOptions调用函数的定时器循环httpRequest每 1 分钟间隔一次。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //rest of code

    NSTimer *notifyTimer = [NSTimer timerWithTimeInterval:60 target:self selector:@selector(httpRequest) userInfo:nil repeats:YES];//7200.0
    [[NSRunLoop mainRunLoop] addTimer:notifyTimer forMode:NSDefaultRunLoopMode];

    return YES;
}

按主页按钮后应用程序将进入后台并调用功能applicationDidEnterBackground所以后台任务正在启动。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    __block UIBackgroundTaskIdentifier bgTask;
    UIApplication *app = [UIApplication sharedApplication];
    expirationHandler = ^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
        bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
    };
    bgTask = UIBackgroundTaskInvalid;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];

}

By httpRequest我得到的功能Y每 1 分钟间隔从 Web 服务器发送一次UILocalNotification每秒触发一次。

-(NSString *)httpRequest {

    NSURL *url = [NSURL URLWithString:@"http://192.168.10.67/t.php"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    NSString *userAgent = [NSString stringWithFormat:@"bgTaskTest-IOS"];
    [request setValue:userAgent forHTTPHeaderField:@"User-Agent"];

    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];

    [request setHTTPMethod:@"GET"];

    [request setTimeoutInterval:25];

    NSURLResponse *response;

    NSData *dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

    NSString *stringReply = [[NSString alloc] initWithData:dataReply encoding:NSASCIIStringEncoding];

    if ([stringReply isEqualToString:@"Y"]) {
        [self showLocalNotification:nil]; //calling UILocalNotification
    } else {
        NSLog(@"%@",stringReply);
    }

    return stringReply;
}

功能showLocalNotification根据响应每 1 分钟调用一次httpRequest功能。

-(void)showLocalNotification {

    NSString *msg = @"test message";

    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    UILocalNotification *_localNotification = [[UILocalNotification alloc]init];

    _localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];

    _localNotification.timeZone = [NSTimeZone defaultTimeZone];

    _localNotification.alertBody = msg;

    _localNotification.soundName = UILocalNotificationDefaultSoundName;

    _localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber]+1;

    [[UIApplication sharedApplication] scheduleLocalNotification:_localNotification];
    //[[UIApplication sharedApplication] presentLocalNotificationNow:_localNotification];

}

一切正常,当应用程序在后台时,每 1 分钟就会提示一次通知。

但我的问题是后台任务的生命周期是10分钟,所以10分钟后没有通知提示。因此,我再次开始后台任务beginBackgroundTaskWithExpirationHandler但我的应用程序在重新启动后台任务时被终止。

当应用程序处于后台时,我无法使用通知超过 10 分钟。

请任何人帮助我。


没有办法(在应用程序商店指南内)在后台运行任意代码超过十分钟(正如您所注意到的)。

10 分钟后,您的应用程序将被暂停。有几种方法可以解决这个问题,注册其他后台模式(例如背景音频、连续播放无声声音文件)或后台 VoIP 或后台定位服务。

这些 hacky 解决方案将保留您的应用程序未暂停的但是您的申请不会获得商店的批准。

在 iOS7 中,在后台运行代码方面有了一些进步,但是没有什么可以做你想要的事情。

因此,如果这是一个供您自己使用的应用程序,请使用私有 API 或我上面建议的方法,但是如果您想在商店中获取此应用程序,恐怕您就不走运了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UILocalNotification 在后台 10 分钟后不提示 的相关文章

  • 相当于 AppKit 的 NSObliquenessAttributeName 的 CoreText 是什么?

    我正在使用 CoreText 在 Mac iOS 跨平台代码中绘制一些文本 我可能使用的字体没有在操作系统中为所有用户安装真正的 斜体 版本 但他们需要知道即使这样文本也是斜体的 通过 AppKit 的 NSAttributedString
  • UIView 的变换看起来很糟糕

    我有一个简单的视图和简单的背景 我需要旋转视图及其内容 代码在这里 CGAffineTransform r CGAffineTransformMakeRotation 5 M PI 180 0f backView transform r 我
  • Safari 不会通过 http/2 加载某些资源

    服务器上启用了 Http 2 昨天我注意到在 Iphone IOS 10 2 上未加载某些资源并出现错误 failed to load resource connecting to server is not possible 当我将 Ip
  • UIWebView 中的多选 HTML 文件输入不适用于视频

    我在使用 UIWebView Cordova 创建打包为本机 iOS 应用程序的上传表单时遇到问题 问题是 当在允许多重选择的元素中选择视频时 与只能进行单一选择不同 所选视频不会被 压缩 预处理并因此受到某种程度的限制 当尝试使用 Fil
  • 从服务器实时更新的 iOS 应用程序:Socket(使用流)还是 Apple 推送通知服务?

    我正在尝试制作一个 iOS 5 应用程序 该应用程序具有来自服务器的实时信息 它只会在应用程序运行时使用这些 为了使其实时且无需轮询 我一直在评估两种设计路线 创建从应用程序到服务器的套接字 并通过流交换信息 Pros 相对简单 不涉及第三
  • 获取 iOS 5 中最后一个重定向的 url?

    有人可以发布最简单的工作代码 当我 GET 请求一个 url 时 它可以获取最后一个重定向的 url nth 吗 我知道我需要使用异步请求 但我无法制定出解决问题的完整工作代码 我正在使用 ios5 因此我可以使用 ios5 中最新添加的异
  • 现有 UIPopoverController 中的 UIImagePickerController

    有没有办法将 UIImagePickerController 推送到现有 UIPopoverController 的导航控制器中 我所知道的是 您必须创建一个新的弹出窗口并在其中添加 UIImagePickerController 但我有一
  • locationManager:didRangeBeacons 方法未检测到 BLE 设备

    我正在使用 Nordic BLE nRF8001 开发套件来测试 CoreBluetooth 使用 CBCentralManager 的方法 例如 didDiscoverPeripheral didConnectPeripheral 等 我
  • 如何在 Xcode 4.5 中添加旧版本的 iOS SDK

    我在这里复制了 iOS 5 1 SDK 应用程序 Xcode app Contents Developer Platforms iPhoneOS platform Developer SDKs 但是 我仍然无法在 Xcode 中选择基础 S
  • iOS:如何使用 CGLayer 支持 Retina 显示屏?

    我正在 CALayer 的委托方法中绘制图表drawLayer inContext 现在我想支持 Retina Display 因为图形在最新设备上看起来很模糊 对于直接在 CALayer 传递的图形上下文上绘制的部分 我可以通过如下设置
  • 如何制作字幕 UILabel / UITextField / NSTextField

    我需要制作字幕UILabel在 Xcode 中 选取框将从右向左滚动 我试过CCScrollingLabel also JHTickerView和别的 但我找不到带有选框的简单代码 没有任何视图 数组 一些愚蠢的库和其他库 如何制作选框UI
  • scrollViewDidScroll:在 UITableViewRowAnimation 上?

    当一个人使用一个UITableViewRowAnimation删除一行或添加一行时 有时如果该行位于表视图的最末端 则表会滚动 然而 即使它滚动它似乎并没有调用scrollViewDidScroll 关于代表 例如 我的委托中有以下代码 v
  • 如何以编程方式设置 iOS 6/7 Delta

    当我离开 iOS6 时 我正在使用 Xcode 4 6 开发 UISplitView 应用程序 我有设计 现在我迁移到新的 Xcode5 现在我有这样的设计 UINavigationBar 完全重叠我的 UISearchBar Leo Na
  • Xcode 6 iOS 8 UIImage imageNamed 来自捆绑包问题

    我使用 iOS 7 1 构建我的项目 并尝试使用存储在 images cars car 1 png 中的图像加载 UIImage 视图 所有图像都位于项目树中的图像文件夹中 如下图所示 所以它非常适合 iOS 7 1 和 Xcode 5 但
  • Nativescript 中本机传感器的可访问性

    我决定选择在 Nativescript 跨平台 IOS Android 中实现应用程序 或者相应地使用 java swift 制作 真正的 本机应用程序 放弃明显的 1 代码库与 2 代码库讨论 我不确定 Nativescript 的局限性
  • Swift 3:将 UIButton 扩展添加到 ViewController

    我是 iOS Swift 的初学者 尝试创建一个没有 Storyboard 的简单应用程序 我创建了一个UIButton扩展名 我想在我的视图中添加一个简单的按钮 稍后将设置约束 不幸的是 该按钮不可见 如果有人帮助我 我将不胜感激 谢谢你
  • 检测 AVPlayerViewController 是否正在播放视频或正在缓冲并向播放器添加覆盖

    我必须检测视频是否处于播放模式或缓冲模式 我正在从 URL 加载视频 我已经尝试了下面的代码 我可以在视频开始播放后进行跟踪 但不能在视频处于缓冲状态时进行跟踪 另外 我想在我的播放器中添加覆盖视图 我尝试在 AVPlayer 中添加叠加层
  • GKLocalPlayer 身份验证不起作用,但 isAuthenticated 返回 YES(游戏中心沙盒)

    我正在努力将回合制比赛集成到我的游戏中 几天前 我开始从 GameKit API 收到奇怪的错误 指出本地玩家未经过身份验证 尽管他已通过身份验证 当我启动应用程序时 authenticateHandler被调用 显示视图控制器 输入密码后
  • iPhone - 动画视图控制器演示

    我有一个 UINavigationControl 我想呈现一个视图控制器 将其从顶部推送 并将其从视图中删除 将其推送到顶部 有没有办法更改调用时使用的默认动画 self navigationController pushViewContr
  • 从 SwiftUI 视图转至 UIViewController

    我正在努力将一些 SwiftUI 内容实现到我现有的应用程序中 我目前有一个 UIViewController 它托管一个用于相机预览的 MTKView 我创建了一个新的 SwiftUI 视图 它现在是我的root视图 如我的设置Scene

随机推荐

  • Typescript:如何在自定义过滤器中使用角度 $filter

    如何在自定义过滤器中使用 Angular filter 如何注入 filter依赖 module Filters export class CustomFilter public static Factory return function
  • Flask-Login 支持角色吗?

    如果没有 是否有任何项目在 Flask Login 中添加了此功能 否则 从 Flask Login 迁移到 Flask User 似乎有点令人畏惧 否则 是否有任何从 Flask Login 迁移到 Flask User 的方向 再次 为
  • Android系统每个应用程序的通知限制

    这可能偏离主题 但我找不到任何相关内容 Android应用程序可以显示的通知数量有限制吗 我在收到 100 条通知后遇到问题 没有文件明确说明这一点 注意 显示 100 条通知并不是一个好主意 但由于某些原因这是必需的 In API23 包
  • 无法验证包:721772200.itmsp

    我写这篇文章是因为我有一个严重的问题 我在cartoonsmart 网站上购买了Commander Cool 游戏 然而 一个严重的问题发生了 iTune Connect 验证无法接受该申请 我尝试从两个不同的开发者帐户发布它 但错误仍然发
  • Laravel nova diffForHumans 日期时间

    我对用户有字段last active 我想用 diffForHumans 或显示时间time from now来自 Moment js 我怎样才能做到呢 现在我只使用 DateTime make Activiy last active gt
  • 在 JavaScript 中定位提示弹出窗口

    我有一个如下所示的 JavaScript 提示 我想将提示放在屏幕中心 如何使用 javascript 做到这一点 function showUpdate var x var name prompt Please enter your na
  • 如何在 PHP 中使用 file_get_contents 获取图像的 MIME 类型

    我需要获取图像的 MIME 类型 但我只有图像的正文file get contents 是否有可能获取 MIME 类型 是的 你可以这样得到它 file info new finfo FILEINFO MIME TYPE mime type
  • SimpleDateFormat 将 lenient 设置为 false 时出现异常

    为什么这段代码会抛出无法解析日期的异常 SimpleDateFormat f new SimpleDateFormat yyyy MM dd T HH mm ss 000Z f setLenient false String dateStr
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 在 IE10 中禁用捏合放大

    在 IE10 触摸模式下 我希望仅使页面的特定部分可缩放 其余的不应该 我找到了这个 http msdn microsoft com en US library ie hh772044 aspx http msdn microsoft co
  • 不要模拟值对象:过于通用的规则,没有解释

    以下是 Mockito 单元测试框架的引用 不要模拟值对象 为什么有人会想要这样做呢 因为实例化对象太痛苦了 gt 无效 原因 如果创造新的装置太困难 那就是一个迹象 代码可能需要一些认真的重构 另一种方法是创建 价值对象的构建者 有一些工
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 使用 FIND 命令进行并集、交集和排除?

    我需要使用 find 命令管理列表 假设列表在非不同列表中具有随机名称 即它们的交集不是空集 我能怎么做 A B 查找列表A中除列表B中的文件之外的文件 A 路口 B 查找列表 A 和 B 共有的文件 请咨询here https stack
  • 使用 ElementTree 在 python 中解析 xml

    我对 python 很陌生 我需要解析一些脏的 xml 文件 这些文件需要先清理 我有以下 python 代码 import arff import xml etree ElementTree import re totstring wit
  • jQuery 检查复选框并触发 javascript onclick 事件

    我正在尝试使用 jQuery 检查复选框并在此过程中触发 onclick 事件 假设我在 html 中定义了一个复选框
  • eclipse - 在android虚拟设备中卡住中文

    当我在 Eclipse 中运行 Android 模拟器时 当我尝试编写文本时 所有键盘字符都会被翻译为中文 为什么是这样 Thanks 点击并按住EditText Select 输入法 Select 安卓键盘
  • 获取 SignalR hub 内的完整 URL

    我正在使用 SignalR 开发一个用户跟踪解决方案 作为学习 SignalR 的有趣项目 用于 ASP NET MVC 应用程序 目前我可以跟踪登录的用户以及他们在特定页面上停留的时间 如果他们移动到另一个页面 我也会跟踪该页面 并且 S
  • JFace/SWT:更改 InputDialog 中按钮的标签

    我想创建一个带有 确定 取消 按钮的自定义标签的输入对话框 我在用着org eclipse jface dialogs InputDialog http help eclipse org galileo index jsp topic or
  • javax.net.ssl.SSLException:没有可用的 PSK。无法恢复

    我正在使用 Jetty 客户端发送传出请求 在 Java 10 下完美运行的代码在 Java 11 下突然出现以下异常 javax net ssl SSLException No PSK available Unable to resume
  • UILocalNotification 在后台 10 分钟后不提示

    In didFinishLaunchingWithOptions调用函数的定时器循环httpRequest每 1 分钟间隔一次 BOOL application UIApplication application didFinishLaun