【问题标题】:iOS: Prevent app from launching into the backgroundiOS:防止应用程序启动到后台
【发布时间】:2023-03-30 09:35:01
【问题描述】:

我目前正在构建一个从 iOS7 控制中心进行控制的音乐应​​用程序。我注意到的功能之一是,如果我按下“播放”控制按钮,我的应用程序将启动,即使它已被杀死。这不是我想要发生的事情,所以如果应用程序在后台启动以防止初始化过程,我在didFinishLaunchingWithOptions 中添加了return NO

不幸的是,这并没有改变应用程序仍然启动的事实,并且不会再次调用didFinishLaunchingWithOptions(并且没有初始化任何内容)。由于当我不想启动应用程序时,我不能让应用程序强行杀死它,有没有办法阻止应用程序启动?我原以为返回 NO 会成功,但事实并非如此。

【问题讨论】:

  • 我不确定你在使用什么“播放”功能,但也许如果你在应用程序终止时取消订阅“播放”通知,会成功吗?
  • The return value is ignored if the app is launched as a result of a remote notification developer.apple.com/library/ios/documentation/uikit/reference/…:
  • 谢谢,这至少解决了一个谜。 @IvanAlek 的问题是,在应用程序被终止之前,我没有特定的位置可以添加这样的调用。
  • 现在在 iOS 7 中的预期行为是应用程序支持恢复背景音频以响应媒体控件,即使它们没有运行。您可能有自己的理由,但如果您要去 App Store,则不确定它是否会通过应用审核。我在 HIG 中没有找到任何关于它的信息,所以你可能没问题,但请参阅 iOS 7 Release Notes
  • not running 状态恢复背景音频是launching into the background。在application:didFinishLaunchingWithOptions: 中检查application.applicationState 以获取UIApplicationStateInactive(当启动到前台时)或UIApplicationStateBackground(当启动到后台时)。然后调用applicationDidEnterBackground: 而不是applicationDidBecomeActive:

标签: ios iphone objective-c ios7 avplayer


【解决方案1】:

我找到了导致此问题的主要原因之一。它与音频会话和应用程序注册的各种通知/代表有关。在AppDelegate'sapplicationWillTerminate:我必须确保打电话:

[[UIApplication sharedApplication] endReceivingRemoteControlEvents];

[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&audioSessionError];

并且还取消注册任何音频通知(中断和路由更改)。

【讨论】:

    【解决方案2】:

    你想让你的应用在后台运行吗?

    如果没有,您可以简单地添加一个 info.plist 值,这样它就不会进入背景,而只会在用户点击主页按钮时关闭。

    【讨论】:

    • 应用程序在后台运行,而不是启动到后台,尽管它开始看起来像预期的那样。
    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2015-08-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多