【发布时间】:2014-09-29 20:29:05
【问题描述】:
我希望 Cordova 中的 HTML5 视频播放在铃声开关设置为“静音”时播放声音,就像 Safari 中的默认行为一样。我设法通过摆弄 Cordova 默认视图控制器来获得我想要的行为,但我宁愿不修改 Cordova 的默认控制器(部分是因为它看起来是错误的,但主要是因为我们希望能够重新 -无需担心修改库文件即可构建我们的 Cordova 应用程序。)
所以我的主要问题是我不太确定如何继续向 Cordova 的控制器初始化添加一些代码。有几件事我不确定:
1) 我是否错过了让 Cordova 为我执行此操作的明显设置?我看到媒体插件做了类似的事情,但找不到类似的视频。
2) 我的临时解决方法/概念证明涉及修改 Cordova 控制器的“viewDidLoad”处理程序上的 AudioSession 类别。我是否在正确的位置修改控制器代码?我这样做是否会破坏已经存在的会话?
2) 如果我当前的代码从 Obj-C/ios 应用程序初始化的角度来看是可以的,我如何将它与 Cordova 集成,以便我们可以使用它构建一个新的 Cordova 项目(因为这是我们构建过程的一部分) ?如果我将代码包装到插件中,“pluginInitialize”是否是执行它的合适位置?
我没有太多的 Objective-C/iOS 原生体验,所以如果这主要是知道正确的事情来搜索/或理解应用程序初始化的问题,那么也将不胜感激!
编辑:使用的 Cordova 版本是 3.5.0-0.2.7
当前代码
这是我塞进 Cordova 的视图控制器的代码:
我假设 Cordova 的 WebView 使用苹果默认音频设置 (apple docs) 进行视频播放:
AVAudioSessionCategoryAmbient
声音播放为非主要应用的类别,即您的应用可以在关闭声音的情况下成功使用。
我假设我想使用 AVAudioSessionCategoryPlayback 设置。
我编辑了 Cordova 主视图控制器:
'[项目/ios-build]/CordovaLib/Classes/CDVViewController.m'
通过将来自 another answer 的这个 sn-p 放在“viewDidLoad”处理程序中:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
BOOL ok;
NSError *setCategoryError = nil;
ok = [audioSession setCategory:AVAudioSessionCategoryPlayback
error:&setCategoryError];
if (!ok) {
NSLog(@"%s setCategoryError=%@", __PRETTY_FUNCTION__, setCategoryError);
}
然后我们的视频在铃声成功静音的情况下播放了音频,但是,如上所述,我想要一些关于如何将此代码与 Cordova 集成的建议,而不是就地编辑。
【问题讨论】:
标签: ios objective-c html cordova