Как узнать, куда будет направляться звук для звонков в Android - PullRequest
0 голосов
/ 16 апреля 2019

Я пишу приложение, которое должно знать, будете ли вы звонить или принять вызов, будет ли аудио маршрутизироваться через устройство или подключенную гарнитуру Bluetooth.

Я могу определить, подключена ли гарнитура и может ли она потреблять и воспроизводить звук, следующим образом:

public static boolean isBluetoothHeadsetConnected(Context ctx) {
    BluetoothAdapter mBluetoothAdapter = 
BluetoothAdapter.getDefaultAdapter();
    AudioManager am = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
    boolean btin = false;
    boolean btout = false;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            for (AudioDeviceInfo info: am.getDevices(AudioManager.GET_DEVICES_ALL)){
                if ((info.getType()==AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)||(info.getType()==AudioDeviceInfo.TYPE_BLUETOOTH_SCO)){
                    if (info.isSink()){
                        btin = true;
                    } else {
                        btout = true;
                    }
                }
            }
        } else {
            btin = true;
            btout = true;
        }
    return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
            && (mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED)
            && (btin&&btout);
}

Однако я обнаружил, что для некоторых устройств (в частности для Galaxy Watches) они будут возвращать «true» для этого (они имеют гарнитуру и могут маршрутизировать звук), НО, если вы делаете вызов или принимаете вызов, он НЕ будет маршрутизировать через них по умолчанию ,

AudioManager getRouting устарело, а isBluetoothScoOn () работает только при фактической потоковой передаче.

Можно ли узнать, куда будет поступать звук при поступлении / получении вызова?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...