Я хочу воспроизвести аудиофайл, пока у меня есть устройство, подключенное к аудиоразъему (не обязательно только наушники).
Если это поможет, меня интересует только Android версии 4.3 и выше, и я готов рутировать телефон, если это необходимо.
Вот что я пробовал до сих пор:
Какой-то хак, но он не работает.
try { Class audioSystemClass = Class.forName("android.media.AudioSystem"); Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class); setForceUse.invoke(null, 1, 1); MediaPlayer mp = MediaPlayer.create(this, R.raw.bad); mp.start(); } catch (ClassNotFoundException e) { Log.d("mediaException", "class", e); } catch (NoSuchMethodException e) { Log.d("mediaException", "method", e); } catch (IllegalAccessException e) { Log.d("mediaException", "access", e); } catch (InvocationTargetException e) { Log.d("mediaException", "invocation", e); }
Нашел это здесь в какой-то теме, но это также не работает:
AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_NORMAL); audioManager.setSpeakerphoneOn(true); MediaPlayer mp = MediaPlayer.create(this, R.raw.bad); mp.start();
Используя класс MediaRouter, я попытался получить доступные маршруты. Но когда что-то подключено к аудиоразъему, доступен только маршрут «Наушники».
MediaRouter router = (MediaRouter) this.getSystemService(Context.MEDIA_ROUTER_SERVICE); for (int i = 0; i < router.getRouteCount(); i++) { Log.d("playSound", router.getRouteAt(i).toString()); }
STREAM_MUSIC
,STREAM_VOICE_CALL
и т. д. Например, хак, который вы указали выше, будет работать только дляSTREAM_MUSIC
(и, возможно,STREAM_SYSTEM
). - person Michael   schedule 23.12.2013STREAM_NOTIFICATION
- person ozbek   schedule 23.12.2013