当 iTunes 从网络链接启动时,Phonegap 媒体对象停止播放

Posted

技术标签:

【中文标题】当 iTunes 从网络链接启动时,Phonegap 媒体对象停止播放【英文标题】:Phonegap Media Object stops playing when iTunes launched from web-link 【发布时间】:2013-03-13 14:25:03 【问题描述】:

我们有一个 Phonegap 应用程序(目前仅适用于 iPhone),它同时使用 html5 音频标签(用于流式传输)和媒体对象(用于播放本地存储的 mp3)。它们都提供到 iTunes 商店的网络链接。

过去的情况是(至少对于 Media 对象),即使由于启动了另一个应用程序或加载了 iTunes 链接,即使应用程序在后台运行,音频也会继续播放。这可以通过在项目配置中向 UIBackgroundModes 添加“音频”来实现。 (info.plist)

我知道随着 ios6 的出现这种情况发生了变化:UIWebView: HTML5 audio pauses in iOS 6 when app enters background

这解决了 HTML5 音频的问题(即,当我使用网络链接启动 iTunes 时,流式音频继续播放)但对于媒体对象 - 当我点击 iTunes 链接时,音频仍然中断)。奇怪的是,当我使用 itms-apps:// 而不是 http:// 时,音频不会中断,但随后它会启动应用商店而不是 iTunes。换句话说,itunes 是唯一会导致音频中断的应用程序,但在从媒体对象播放时。

有谁知道为什么启动 iTunes 可能会切断 Media 对象产生的音频,而其他应用程序却没有?

【问题讨论】:

【参考方案1】:

似乎问题仅在通过 Cordova WebView 启动 iTunes 时出现,即使用以下方法之一:

url = 'https://itunes.apple.com/gb/album/elliphant-ep/id590384846'

1. window.location.href = url
2. window.open(url);
3. window.open(url , '_self');

解决办法是让它使用另一个应用程序来启动 iTunes:

window.open(url , '_system');

会在系统浏览器中打开url,系统拦截itunes链接,通过系统浏览器启动itunes。

w = window.open(url, '_blank');

将强制 url 在 InAppBrowser 中启动,系统再次拦截 itunes 链接并通过 InAppBrowser 启动 iTunes。这是一个更丑陋的解决方案,因为 InAppBrowser 不会自动关闭,并且当用户返回应用程序时,InAppBrowser 仍然可见。要关闭它,需要调用 w.close()

【讨论】:

以上是关于当 iTunes 从网络链接启动时,Phonegap 媒体对象停止播放的主要内容,如果未能解决你的问题,请参考以下文章

如何从网页启动/传递值到 Windows C# 应用程序? (似乎有可能与 iTunes 的歌曲链接)?

如何从 iPhone 应用程序链接到 iTunes 商店?

在启动时加载外部链接的 Phonegap 应用程序 - Android

链接到 iTunes 商店

在应用浏览器而不是 iTunes 应用中启动 itune 音乐链接~

iTunes Store 作为模态视图