Android13 CarAudioManager getZoneIdForUid流程分析

下面我们从代码角度分析getZoneIdForUid流程,首先是CarAudioManager的getZoneIdForUid方法:

//packages/services/Car/car-lib/src/android/car/media/CarAudioManager.java
public final class CarAudioManager extends CarManagerBase {
    private final ICarAudio mService;
    public int getZoneIdForUid(int uid) {
        try {
            return mService.getZoneIdForUid(uid); //调用ICarAudio的getZoneIdForUid方法
        } catch (RemoteException e) {
            return handleRemoteExceptionFromCarService(e, 0);
        }
    }
}

调用ICarAudio的getZoneIdForUid方法,ICarAudio是一个接口,由CarAudioService实现,因此会调用CarAudioService的getZoneIdForUid方法:

//packages/services/Car/service/src/com/android/car/audioCarAudioService.java
public class CarAudioService extends ICarAudio.Stub implements CarServiceBase {
    @Override
    public int getZoneIdForUid(int uid) {
        enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS);
        requireDynamicRouting();
        synchronized (mImplLock) {
            if (mUidToZoneMap.containsKey(uid)) {
                return mUidToZoneMap.get(uid);
            }
            int userId = UserHandle.getUserHandleForUid(uid).getIdentifier(); //获取userId
            return getZoneIdForUserIdLocked(userId);  //获取ZoneId
        }
    }
}

调用getZoneIdForUserIdLocked方法:

//packages/services/Car/car-lib/src/android/car/media/CarAudioManager.java
public final class CarAudioManager extends CarManagerBase {
    private int getZoneIdForUserIdLocked(@UserIdInt int userId) {
        int audioZoneId = mOccupantZoneService.getAudioZoneIdForOccupant(
                mOccupantZoneService.getOccupantZoneIdForUserId(userId));
        if (audioZoneId != CarAudioManager.INVALID_AUDIO_ZONE) {
            return audioZoneId;
        }
        Slogf.w(TAG,
                "getZoneIdForUid userId %d does not have a zone. Defaulting to %s: %d",
                userId, "PRIMARY_AUDIO_ZONE", PRIMARY_AUDIO_ZONE);
        return PRIMARY_AUDIO_ZONE;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值