1

我们尝试为 Android Automotive OS 调整我们的导航器应用程序,我们发现如果我们STREAM_MUSIC用于导航器通知,那么它不会与 FM 收音机混合使用。如果我们使用STREAM_NOTIFICATIONnavi 会与 FM-radio 混合使用,但在 Android Car Settings 中无法更改STREAM_NOTIFICATION音量。我们是否正确理解流不会自动映射到汽车操作系统中的音频属性,并且所有导航器应用程序都必须移动到USAGE_ASSISTANCE_NAVIGATION_GUIDANCE汽车操作系统上才能正常运行?

4

1 回答 1

1

您应该在应用程序中使用用法和内容音频属性,而不是传统的流类型。

STREAM_MUSIC像,等流类型STREAM_NOTIFICATIONAudioAttributes所取代,用于定义音频播放的行为,并且大多数基于流的 API 已经被弃用 - 常规 Android 中的一个例外是音量控制(请参阅AudioManager和像setStreamVolume,adjustStreamVolume等方法) .

但在 Android Automotive 实现中,Android 框架配置为使用固定音量策略,这意味着也没有基于流的音量控制。实际音量控制预计将通过 Audio HAL 或硬件放大器实现(请参阅Android Automotive Audio文档),对于这种情况, CarAudioManager中有一个基于音量组的单独音量控制 API 。

还请记住,在启动音频流之前,应用程序应使用与其音频流相同的音频属性来请求音频焦点。

简化示例:

AudioAttributes playbackAttributes = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .build();

MediaPlayer player = new MediaPlayer();
player.setDataSource( /* ... */);
player.setAudioAttributes(playbackAttributes);
player.prepare();

AudioFocusRequest focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
        .setAudioAttributes(playbackAttributes)
        .setOnAudioFocusChangeListener( /* ... */)
        .build();
int result = mAudioManager.requestAudioFocus(focusRequest);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    // Respect audio focus
    player.start();
}
于 2019-11-18T21:20:43.680 回答