gpt4 book ai didi

ios - remoteControlReceivedWithEvent 在模拟器中有效,但在设备中无效

转载 作者:可可西里 更新时间:2023-11-01 06:06:37 27 4
gpt4 key购买 nike

我正在开发一款可以播放 iPod 库中音乐的应用程序。我正在通过 MPMediaPlayerController 播放音乐,方法是从表中检索所选项目并将其传递给详细 View Controller :

MPMediaItem *item = (MPMediaItem *)self.detailItem;
MPMediaItemCollection *collection = [[MPMediaItemCollection alloc] initWithItems:@[item]];
[self.musicPlayer setQueueWithItemCollection:collection];
[self.musicPlayer play];

开始播放音乐。我在我的 Info.plist 中设置了以下值以启用后台使用:

UIBackgroundModes
>Item 0 - audio

那行得通。当我关闭我的应用程序时,音乐会继续播放。所以现在我正在尝试让控制中心的音频控件向我的应用程序发送消息,所以在阅读之后我发现我需要做一些事情。所以我创建了 UIResponder 的子类并添加了以下几行:

- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
NSLog(@"CustomApp:remoteControlReceivedWithEvent:%@", event.description);
}

我将我的 AppDelegate 设为自定义 UIResponder 的子类:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
self.window = [[MainWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

self.mainViewController = [[BrowserViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self.mainViewController];
self.window.rootViewController = navigationController;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];

return YES;
}

还有这个

- (void)applicationDidEnterBackground:(UIApplication *)application {
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}

现在,我来这里的原因是因为这在模拟器中有效,但在设备中无效,我不明白为什么。如果我在模拟器中启动它并调出控制中心并开始按下音频控件,我的自定义 UIResponder 中的 NSLog 会显示在调试器中,但在设备上它不会。实际发生的是播放/暂停按钮什么都不做,然后如果我按下下一首或上一首按钮,它会转到我的 iPod 应用程序上的下一首或上一首轨道并开始播放。

似乎这个等式中缺少一些小东西,但我无法弄清楚。我已尽我所能搜索文档,但找不到与这种情况相关的任何内容,而且关于此特定功能的文档似乎非常有限。

最佳答案

我知道这个答案很旧,但我在 iOS 10 中遇到了同样的问题。我的模拟器正确显示了锁定屏幕音频控件,但实际设备没有。对我来说,解决方法是确保在设置 AVAudioSession 的类别时,我没有分配选项:AVAudioSessionCategoryOptionMixWithOthers。

这足以让我的设备不显示我的锁屏音频控件。所以最后我的解决方案如下:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowAirPlay|AVAudioSessionCategoryOptionAllowBluetooth|AVAudioSessionCategoryOptionAllowBluetoothA2DP error:&error];

关于ios - remoteControlReceivedWithEvent 在模拟器中有效,但在设备中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com