gpt4 book ai didi

android - 当 sharedUserId ="android.uid.system"时 AudioDeviceCallback 失败

转载 作者:行者123 更新时间:2023-12-05 00:06:24 35 4
gpt4 key购买 nike

我正在为 Android 自定义构建开发一个应用。

本应用需要在Android的AudioManager中订阅AudioDeviceCallback。

我正在使用:

mAudioManager.registerAudioDeviceCallback(new MyDeviceCallback(), null);

哪里:

private class MyDeviceCallback extends AudioDeviceCallback {

@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
Log.d(LOG_TAG, "onAudioDevicesAdded(): New devices detected");
updateAuxStatus();
}

@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] devices) {
Log.d(LOG_TAG, "onAudioDevicesAdded(): devices removed");
updateAuxStatus();
}

private void updateAuxStatus() {
AudioDeviceInfo[] devices = mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS);
boolean isPluggedIn = false;
for (AudioDeviceInfo device : devices) {
if (device.getType() == AudioDeviceInfo.TYPE_LINE_ANALOG) {
isPluggedIn = true;
}
}
onAuxPluggedInChanged(isPluggedIn);
}
}

当我以普通用户 (u0_aXX) 运行应用程序时,这工作正常,但当我以系统共享用户身份运行应用程序时(添加到 list ):

android:sharedUserId="android.uid.system"

此回调仅在订阅后调用,但不会再次调用。即使没有系统用户的其他应用程序也能正常接听电话。

我跟踪了对 AudioManager 代码的调用,发现当我的应用作为系统 sharedUser 运行时,我的应用从未调用 AudioPortEventHandler 中的 postEventFromNative。因为这是一个 jni 调用,所以我停止了,因为我不完全理解它是如何工作的。

真正让我烦恼的是,在没有系统 sharedUser 的情况下运行时,相同的代码按预期工作。系统 sharedUser 是否存在某些可能导致此问题的限制?

最佳答案

在AudioPolicy中,registerClient使用uid作为key。当手机启动时,system_server 或 telecom 已经注册了通知,如果您的应用程序以系统用户身份运行,它将永远无法运行。

mNotificationClients.add(uid, notificationClient);

关于android - 当 sharedUserId ="android.uid.system"时 AudioDeviceCallback 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284715/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com