CarAudioManager方法简介

Android  摘抄  2024年3月19日 pm6:41发布7个月前更新 91es.com站长
94 0 0

前言

参考别人文章,看Android中车载部分CarAudioManager类中部分方法的介绍。

正文

简单记录一下CarAudioManager中方法的说明。

packages\services\Car\car-lib\src\android\car\media\CarAudioManager.java

isDynamicRoutingEnabled()

返回是否动态路由是否可用的。

public boolean isDynamicRoutingEnabled() {
    return isAudioFeatureEnabled(AUDIO_FEATURE_DYNAMIC_ROUTING);
}

isDynamicRoutingEnabled高版本废弃了,替代的是

isAudioFeatureEnabled(AUDIO_FEATURE_DYNAMIC_ROUTING);

isAudioFeatureEnabled()

public boolean isAudioFeatureEnabled(@CarAudioFeature int audioFeature) {
    try {
        return mService.isAudioFeatureEnabled(audioFeature);
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, false);
    }
}

setGroupVolume()

此方法有两个,一个是指定zoneId为PRIMARY_AUDIO_ZONE,一个是让用户指定zoneId,然后设置组音量的音量

public void setGroupVolume(int groupId, int index, int flags) {
    setGroupVolume(PRIMARY_AUDIO_ZONE, groupId, index, flags);
}

public void setGroupVolume(int zoneId, int groupId, int index, int flags) {
    try {
        mService.setGroupVolume(zoneId, groupId, index, flags);
    } catch (RemoteException e) {
        handleRemoteExceptionFromCarService(e);
    }
}

getGroupMaxVolume()

获取组最大音量值(跟上面类似,两个方法)

public int getGroupMaxVolume(int groupId) {
    return getGroupMaxVolume(PRIMARY_AUDIO_ZONE, groupId);
}

public int getGroupMaxVolume(int zoneId, int groupId) {
    try {
        return mService.getGroupMaxVolume(zoneId, groupId);
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, 0);
    }
}

getGroupMinVolume()

获取组最小音量值(跟上面类似,两个方法)

public int getGroupMinVolume(int groupId) {
    return getGroupMinVolume(PRIMARY_AUDIO_ZONE, groupId);
}

public int getGroupMinVolume(int zoneId, int groupId) {
    try {
        return mService.getGroupMinVolume(zoneId, groupId);
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, 0);
    }
}

getGroupVolume()

获取groupId音量值(跟上面类似,两个方法)

public int getGroupVolume(int groupId) {
    return getGroupVolume(PRIMARY_AUDIO_ZONE, groupId);
}

public int getGroupVolume(int zoneId, int groupId) {
    try {
        return mService.getGroupVolume(zoneId, groupId);
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, 0);
    }
}

setFadeTowardFront()

设置前后音量偏移,0.0是平衡,1.0是前面。

public void setFadeTowardFront(float value) {
    try {
        mService.setFadeTowardFront(value);
    } catch (RemoteException e) {
        handleRemoteExceptionFromCarService(e);
    }
}

setBalanceTowardRight()

设置左右音量偏移,0.0是平衡,1.0是右面。

public void setBalanceTowardRight(float value) {
    try {
        mService.setBalanceTowardRight(value);
    } catch (RemoteException e) {
        handleRemoteExceptionFromCarService(e);
    }
}

getExternalSources()

获取外部音源,除麦克风外的输入设备(警报音、DVD、收音机等)

public @NonNull String[] getExternalSources() {
    try {
        return mService.getExternalSources();
    } catch (RemoteException e) {
        handleRemoteExceptionFromCarService(e);
        return new String[0];
    }
}

createAudioPatch()

通过getExternalSources给出的input port,创建一个外部音源到output的补丁,返回一个CarAudioPatchHandle。

public CarAudioPatchHandle createAudioPatch(String sourceAddress, @AttributeUsage int usage,
        int gainInMillibels) {
    try {
        return mService.createAudioPatch(sourceAddress, usage, gainInMillibels);
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, null);
    }
}

这个不是很懂。。。

releaseAudioPatch()

跟createAudioPatch()配套使用。释放input port和output的关联。

public void releaseAudioPatch(CarAudioPatchHandle patch) {
    try {
        mService.releaseAudioPatch(patch);
    } catch (RemoteException e) {
        handleRemoteExceptionFromCarService(e);
    }
}

getVolumeGroupCount()

有两个方法,一个是指定PRIMARY_AUDIO_ZONE的域,另外一个是用户传入域(zoneId)进行或可用音量组数目。

public int getVolumeGroupCount() {
    return getVolumeGroupCount(PRIMARY_AUDIO_ZONE);
}

public int getVolumeGroupCount(int zoneId) {
    try {
        return mService.getVolumeGroupCount(zoneId);
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, 0);
    }
}

getVolumeGroupIdForUsage()

获取zoneId为PRIMARY_AUDIO_ZONE时,传入usage(音频用例)获取对应的音量组Id

public int getVolumeGroupIdForUsage(@AttributeUsage int usage) {
    return getVolumeGroupIdForUsage(PRIMARY_AUDIO_ZONE, usage);
}

根据zoneId和usage(音频用例)获取对应的音量组Id

public int getVolumeGroupIdForUsage(int zoneId, @AttributeUsage int usage) {
    try {
        return mService.getVolumeGroupIdForUsage(zoneId, usage);
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, 0);
    }
}

getAudioZoneIds()

获取所有音频域的id。

public @NonNull List<Integer> getAudioZoneIds() {
    try {
        int[] zoneIdArray = mService.getAudioZoneIds();
        List<Integer> zoneIdList = new ArrayList<Integer>(zoneIdArray.length);
        for (int zoneIdValue : zoneIdArray) {
            zoneIdList.add(zoneIdValue);
        }
        return zoneIdList;
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, Collections.emptyList());
    }
}

registerCarVolumeCallback()

注册音量callback,添加到CarAudioManager维护的Callback组里,有onGroupVolumeChanged和onMasterMuteChanged的回调

public void registerCarVolumeCallback(@NonNull CarVolumeCallback callback) {
    Objects.requireNonNull(callback);
    if (mCarVolumeCallbacks.isEmpty()) {
        registerVolumeCallback();
    }
    mCarVolumeCallbacks.add(callback);
}

unregisterCarVolumeCallback()

取消注册

public void unregisterCarVolumeCallback(@NonNull CarVolumeCallback callback) {
    Objects.requireNonNull(callback);
    if (mCarVolumeCallbacks.remove(callback) && mCarVolumeCallbacks.isEmpty()) {
        unregisterVolumeCallback();
    }
}

getUsagesForVolumeGroupId()

两个方法,一个是指定zoneId为PRIMARY_AUDIO_ZONE,也就是通用域;另外一个是不指定,通过用户传入。

通过zoneId域,并指定groupId获取所有的音频用例。

public @NonNull int[] getUsagesForVolumeGroupId(int groupId) {
    return getUsagesForVolumeGroupId(PRIMARY_AUDIO_ZONE, groupId);
}

public @NonNull int[] getUsagesForVolumeGroupId(int zoneId, int groupId) {
    try {
        return mService.getUsagesForVolumeGroupId(zoneId, groupId);
    } catch (RemoteException e) {
        return handleRemoteExceptionFromCarService(e, new int[0]);
    }
}

参考文章

  1. Android Q CarAudio 汽车音频学习笔记

 历史上的今天

  1. 2021: 佚名:人就这么一生,要学会把握自己(0条评论)
  2. 2021: 十六进制和十进制之间的转换(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

系统应用MediaButton的使用方式

前言这个是Android高版本注册监听MediaButton的使用,没有测试,至于测试普通应用,会重新整理一篇文章。不想误人子弟,文章大部分设置为私人查阅,抱歉正文隐藏内容!付费阅读后才能查看!¥2 ¥3多个隐藏块只需支付一次付费阅读参考文章这个是从同事那拷贝的,没有测试。

Android P之Launcher启动

前言记录下一下Launcher是啥时候启动,至于启动中所有步骤这里不细写。记录于此,主要是方便自己的。PS : 分析源码 Android 9.0(P)正文正常情况下,Launcher是Android中第一个启动的应用。Launcher是Android系统的桌面,也是提供进入其他应用的...

SQLite Expert的注册记录

前言SQLite Expert软件很不错,在使用数据库时,这个软件是查看数据库的号帮手,当然,这个也是偶尔使用。这里分析一下网上的注册方法。正文这里介绍下载和注册。下载官方下载对应的位数的SQLite Expert:http://www.sqliteexpert.com/downlo...

监听和获取Android 设备的USER_UNLOCKED状态

前言Android有些功能需要user unlocked之后才能使用,因此在启动前需要判断一下当前Android设备是否unlocked。这简单记录一下,方便自己查阅。正文判断isUserUnlocked启动某些功能时通过下面方式判断一下是否已经可以启动了。public boolean...

叔本华:只有经过深思的东西才能成为真知

哪怕是藏书最丰的图书馆,如果书籍放置混乱的话,其实际用处也不及一个收藏不多、但却整理得有条有理的小图书室。同样,大量的知识如果未经自己思想的细心加工处理,其价值也远远逊色于数量更少、但却经过头脑多方反复斟酌的知识。这是因为只有通过把每一真实的知识相互比较,把我们的所知从各个方面和角度融会贯通以后,我...

许立志:我咽下一枚铁做的月亮

我咽下一枚铁做的月亮他们把它叫做螺丝 我咽下这工业的废水,失业的订单那些低于机台的青春早早夭亡 我咽下奔波,咽下流离失所咽下人行天桥,咽下长满水锈的生活 我再咽不下了所有我曾经咽下的现在都从喉咙汹涌而出在祖国的领土上铺成一首耻辱的诗 ​