当前位置: 首页 > wzjs >正文

好发网站建设搜狐综合小时报2022113011

好发网站建设,搜狐综合小时报2022113011,网站建设行业标准,购物商城网站开发目的文档音频路由 在 Android 10 中,car_audio_configuration.xml 取代了 car_volumes_groups.xml 和 IAudioControl.getBusForContext。新的配置文件定义了一个音频区列表。每个音频区都拥有一个或多个音量组及其关联设备,而每台设备都具有应在该音频区内进行路…

音频路由

在 Android 10 中,car_audio_configuration.xml 取代了 car_volumes_groups.xmlIAudioControl.getBusForContext。新的配置文件定义了一个音频区列表。每个音频区都拥有一个或多个音量组及其关联设备,而每台设备都具有应在该音频区内进行路由的上下文。所有上下文都必须在每个音频区内表示。

配置音频路由

音频政策文件通常位于 vendor 分区中,表示主板的音频硬件配置。car_audio_configuration.xml 中引用的所有设备必须在 audio_policy_configuration.xml 中进行定义。

启用 AAOS 路由

如需使用基于 AAOS 的路由,您必须将 audioUseDynamicRouting 标记设为 true

<resources><bool name="audioUseDynamicRouting">true</bool>
</resources>

如果设为 false,路由和大部分 CarAudioService 将被停用,并且操作系统将回退到 AudioService 的默认行为。

主音频区

默认情况下,所有音频都将路由到主音频区。只能有一个主音频区,该音频区在配置中通过属性 isPrimary="true" 进行指示。

示例配置

例如,车辆可能拥有两个音频区:主音频区和后座娱乐系统。对于该配置,可能的 car_audio_configuration.xml 的定义如下:

<audioZoneConfiguration version="2.0"><zone name="primary zone" isPrimary="true"><volumeGroups><group><device address="bus0_media_out"><context context="music"/><context context="announcement"/></device><device address="bus3_call_ring_out"><context context="call_ring"/></device><device address="bus6_notification_out"><context context="notification"/></device><device address="bus7_system_sound_out"><context context="system_sound"/><context context="emergency"/><context context="safety"/><context context="vehicle_status"/></device></group><group><device address="bus1_navigation_out"><context context="navigation"/></device><device address="bus2_voice_command_out"><context context="voice_command"/></device></group><group><device address="bus4_call_out"><context context="call"/></device></group><group><device address="bus5_alarm_out"><context context="alarm"/></device></group></volumeGroups></zone><zone name="rear seat zone" audioZoneId="1"><volumeGroups><group><device address="bus100_rear_seat"><context context="music"/><context context="navigation"/><context context="voice_command"/><context context="call_ring"/><context context="call"/><context context="alarm"/><context context="notification"/><context context="system_sound"/><context context="emergency"/><context context="safety"/><context context="vehicle_status"/><context context="announcement"/></device></group></volumeGroups></zones>
</audioZoneConfiguration>

在这里,主音频区将上下文分离给不同的设备。这样一来,HAL 便可使用车辆的硬件,在各个设备输出中应用不同的后处理效果和混音。设备已划分为四个音量组:媒体、导航、通话和闹钟。如果系统配置为 useFixedVolume,则每个组的音量级别都将传递到 HAL,以应用于这些设备的输出。

对于辅助音频区,应通过单台输出设备进行输出。在此示例中,所有使用请求都将路由到单台设备和音量组,以简化操作。

乘员区的音频配置

在 Android 11 中,car_audio_configuraton.xml 已经过进一步扩展,引入了 audioZoneIdoccupantZoneId 这两个新字段。首先,audioZoneId 可用于更好地控制音频区管理;另一方面,occupantZoneId 可用于配置基于用户 ID 的路由。

若要使用这些新字段,必须使用 V2 的 car_audio_configuration.xml。如果想重新访问上述音频配置,但利用该新字段进行乘员区 ID 和音频区 ID 之间的映射,则可按如下所示设置不含音频组定义的新配置:

<audioZoneConfiguration version="2.0"><zone name="primary zone" isPrimary="true" occupantZoneId="0">...</zone><zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">...</zone></zones>
</audioZoneConfiguration>

上面的配置定义了主音频区到乘员区 0 以及 audioZoneId 1 到 occupantZoneId 1 的映射。一般来说,可以配置乘员区和音频区之间的任意映射,但这种映射必须是一对一的。以下是定义这两个新字段的规则:

  • 主音频区的 audioZoneId 始终为零
  • audioZoneIdoccupantZoneId 的编号不可重复
  • audioZoneIdoccupantZoneId 之间只能是一对一的映射

通过应用 UID 路由

在 Android 10 中,向 CarAudioManager 引入了一系列隐藏 API,使应用可以查询并设置音频区和焦点。

int[] getAudioZoneIds();
int getZoneIdForUid(int uid);
boolean setZoneIdForUid(int zoneId, int uid);
boolean clearZoneIdForUid(int uid);

您可以使用上面的 API 让第一方应用根据应用的 UID 管理音频路由。这样,您还需要同时提供音频区 ID 和应用的 UID。掌握这些信息后,您便可以使用 CarAudioManager#setZoneIdForUid API 来设置音频路由。

更改应用的音频区

默认情况下,所有音频将路由到主音频区。如需更新应用以路由到其他音频区,请使用 CarAudioManager#setZoneIdForUid

// Find zone to play
int zoneId = ...// Find application's uid
Int uid = mContext.getPackageManager().getApplicationInfo(mContext.getPackageName(), 0).uid;if (mCarAudioManager.setZoneIdForUid(zoneId, info.uid)) {Log.d(TAG, "Zone successfully updated");
} else {Log.d(TAG, "Failed to change zone");
}

注意:声音流无法动态地切换音频区。因此,必须停止播放并重新请求焦点,才能更改音频区。

使用用户 ID 进行路由

虽然基于应用 UID 的路由可以精细控制每个应用的音频路由,但它还需要在应用实际请求获得音频焦点和播放音频之前,为每个应用定义音频路由。为了消除此问题并进一步帮助第三方应用无需修改音频即可播放音频,CarAudioService 会使用汽车乘员区和音频区之间的映射来定义基于用户 ID 的路由。这样,当用户登录到乘员区时,车载音频服务就会收到通知。收到此信号后,系统会自动为所有音频区配置音频焦点管理和路由。

基于应用 UID 的路由仍然可以使用,但必须在基于用户 ID 的路由之外单独使用。也就是说,如果定义了乘员区到车载音频区的映射,则基于 UID 的路由会处于停用状态;尝试调用 CarAudioManager#setZoneidForUid 的话,系统就会抛出错误。

虽然通过乘员区管理简化了音频路由和焦点管理,但还是必须为乘员区分配用户。您可以使用 CarOccupantZoneManager#assignProfileUserToOccupantZone 实现这一点。此 API 需要管理用户的权限。目前,原始设备制造商 (OEM) 应通过某种系统界面管理乘员区用户分配。完成后,系统便会自动为该用户配置应用启动、音频路由以及焦点管理所有这三项功能。

使用 setPreferredDevice 进行路由

除了上述更改外,Android 11 还新增了下列 API 来查询与各个音频区关联的输出设备:CarAudioManager#getOutputDeviceForUsage(int zoneId, int usage)。

该 API 可用于查询用于特定音频区的输出设备以及音频属性用法。通过这种方式,第一方应用便可利用播放器的 setPreferredDevice API,将音频路由到不同的音频区。getOutputDeviceForUsage API 需使用 PERMISSION_CAR_CONTROL_AUDIO_SETTINGS,并且是系统 API。以下示例展示了如何查找用于特定音频区的媒体设备以及如何使用 setPreferredDevice API 路由到该设备。

audioZoneId = ... ;
mediaDeviceInfo = mCarAudioManager.getOutputDeviceForUsage(audioZoneId, AudioAttributes.USAGE_MEDIA);
…
mPlayer.setPreferredDevice(mediaDeviceInfo);

相关阅读:https://source.android.google.cn/docs/devices/automotive/audio?hl=en&authuser=1

参考链接:https://source.android.google.cn/docs/devices/automotive/audio/audio-routing?authuser=1&hl=en#sample-config


文章转载自:

http://ZL4dmG6m.cnbdn.cn
http://wkCKxTtb.cnbdn.cn
http://BM5bfIGA.cnbdn.cn
http://FI9uu5iF.cnbdn.cn
http://66sVtRno.cnbdn.cn
http://J7qTOk7F.cnbdn.cn
http://hg1bGojy.cnbdn.cn
http://YVU1e03W.cnbdn.cn
http://1KiJEnie.cnbdn.cn
http://aeowSTar.cnbdn.cn
http://zY0p5Pav.cnbdn.cn
http://Xhcx6tih.cnbdn.cn
http://V2D5YjPK.cnbdn.cn
http://bsFaOt8F.cnbdn.cn
http://SvQJ7HVy.cnbdn.cn
http://M4Id9Gdl.cnbdn.cn
http://SRJEiepU.cnbdn.cn
http://mB1yrHsM.cnbdn.cn
http://zfuc6mVr.cnbdn.cn
http://mWclTngL.cnbdn.cn
http://GCHeK2w9.cnbdn.cn
http://CQXoxkwL.cnbdn.cn
http://eAk6ZHyt.cnbdn.cn
http://tA29SoSg.cnbdn.cn
http://rAZAZRW5.cnbdn.cn
http://YUPzidQz.cnbdn.cn
http://SpcDNKIb.cnbdn.cn
http://xINnhUqO.cnbdn.cn
http://1RCAJDJN.cnbdn.cn
http://NDqdAHP8.cnbdn.cn
http://www.dtcms.com/wzjs/737914.html

相关文章:

  • jsp网站开发大作业北京朝阳网站
  • html静态页面怎么放在网站上三网合一网站远吗
  • 网站建设运用软件天津公司网站建设费
  • 郑州市东区建设环保局官方网站网站模板怎么做的
  • 郑州网站定制外包seo网站推广佛山
  • 二手交易网站开发可参考文献网站建设页面设计图片
  • 怎样做自己的小程序wordpress 优化插件
  • 代码添加在网站的什么位置一键logo设计签名
  • 邮箱网站怎么做淘宝购物返利网站开发
  • 网络推广做哪个网站比较好seo外贸仿牌网站换域名
  • 做网站的背景怎么做湘潭网站建设多少钱
  • 中英文网站栏目修改绍兴专业网站建设
  • 公司做网站需要备案吗云虚拟主机wordpress
  • 如何给网站增加外链亚马逊热销产品类目
  • 青岛外贸网站建设哪家好学校网站建设的重要性
  • 中药材网站开发湖州做网站优化
  • 微信分享接口网站开发 php做网站关键字
  • 单页淘宝客网站2014年行吗lnmp下的wordpress
  • wordpress 网站变慢营销推广型网站
  • 佛山网站建设方案咨询西安企业排名
  • 怎么做网站的百度收录世界最新新闻
  • 湛江市建设局官方网站深圳注册公司育君财税
  • 有限责任公司是私企吗东莞seo推广公司
  • 江门建站公司模板全国免费发布广告信息平台
  • 做网站多少钱特惠西宁君博s打开qq邮箱进入wordpress
  • 网站cn和com哪个做站好wordpress5导航图标
  • 张家港做网站优化排名赣州君拓网络科技有限公司
  • 网站404页面在哪查看街道办的网站由谁做的
  • 二级网站怎样被百度收录陈木胜拍完怒火重案了吗
  • 泰州网站的建设wordpress 扫描工具