android cordova-media-plugin不要求音频焦点

时间:2017-03-22 17:17:59

标签: android audio cordova-plugins

我正在为自己制作一个简单的应用程序,因为我想在另一个应用程序中收听有声读物的同时播放下雨的声音。

据我所知,java land中有一些东西可以执行requestAudioFocus。来自cordova-plugin-media的片段:

AudioManager am = (AudioManager) this.cordova.getActivity().getSystemService(Context.AUDIO_SERVICE);
        int result = am.requestAudioFocus(focusChangeListener,
                                          AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);

多年前,我可以让大多数应用同时播放音频。我想也许这已经成为“最佳实践”,不能同时播放音频(电池寿命原因,或类似的东西),但如果它只是一个应用程序对我来说,那不是一个问题。

我认为我可以通过使用此插件并且不要求音频焦点来解决这个问题,但它看起来像是隐含的。有没有办法说不?因此,如果我开始在另一个应用程序中播放有声书,我的应用程序在开始播放雨声时不会暂停它?

可以通过Javascript完成,我可以编辑java插件吗? (不是java程序员)。或者这可能只是由当前的Android OS强加的?

这是我的代码,虽然没有任何有趣的内容:

var path = '/android_asset/www/rain.mp3';

var media = new Media( path,
                       ()  => alert('success'),
                       err => document.body.innerHTML = JSON.stringify(err) );
media.play({ numberOfLoops: 10, playAudioWhenScreenIsLocked : true });

提前致谢,

1 个答案:

答案 0 :(得分:0)

您提到的Cordova插件确实在开始播放流时请求音频焦点:请参阅startPlayingAudio() [Github link]Android AudioFocusRequest documentation

这意味着当您启动应用时,它会自动要求有声读物应用暂停。

如果您希望自己的应用仅提供小型音效或语音提示,并且在Spotify在后台播放时不能停止应用,那么可以请求实例AUDIOFOCUS_GAIN_TRANSIENT会很有帮助;此插件不提供此类功能。

你可以修改这个插件,这样你就可以使音频焦点成为可选的,或者是TRANSIENT;或者您可以决定在原生Android中编写“简单易用”的应用程序,这样您就可以直接控制API。