我们尝试使导航器应用程序适应Android Automotive操作系统,并且看到如果将STREAM_MUSIC
用于导航器通知,则它不会与FM收音机混合使用。
如果我们使用STREAM_NOTIFICATION
,那么navi确实会与FM广播混合使用,但是Android Car Settings中无法更改STREAM_NOTIFICATION
的音量。
我们是否正确理解流不会自动映射到Automotive OS中的AudioAttributes,并且所有导航器应用程序都必须移至USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
才能在Automotive OS上正常运行?
答案 0 :(得分:1)
您应在应用程序中使用使用情况和内容音频属性,而不是传统流类型。
AudioAttributes取代了STREAM_MUSIC
,STREAM_NOTIFICATION
等流类型,以定义音频播放的行为,并且大多数基于流的API已被弃用-其中一个例外常规的Android是音量控制(请参考AudioManager和诸如setStreamVolume
,adjustStreamVolume
之类的方法。)
但是在Android Automotive实现中,Android Framework配置为使用固定的音量策略,这意味着也没有基于流的音量控制。预计实际的音量控制将通过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();
}