gpt4 book ai didi

Android - 当设备插入音频插孔时播放声音

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:23 25 4
gpt4 key购买 nike

我想在设备插入音频插孔时播放音频文件(不需要耳机)。

如果有帮助,我只对 Android 4.3 及以上版本感兴趣,如有必要,我愿意 root 手机。

到目前为止,这是我尝试过的:

  1. 某种 hack,但它不起作用。

     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);
    }
  2. 在某个线程中找到这个,但它也不起作用:

    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();
  3. 我尝试使用 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());
    }

最佳答案

我发现了如何做到这一点。请注意,MediaPlayer 和 AudioManger 处于相同模式。我在 Nexus 5 (4.4.2) 上试过这个

        final AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(true);

MediaPlayer mp = null;
mp = MediaPlayer.create(this, R.raw.bad);
mp.setAudioStreamType(AudioManager.MODE_IN_COMMUNICATION);
mp.start();

关于Android - 当设备插入音频插孔时播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20738862/

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