【问题标题】:Android - play sound when device plugged in audio jackAndroid - 当设备插入音频插孔时播放声音
【发布时间】:2014-01-11 09:30:04
【问题描述】:

我想在有设备插入音频插孔时播放音频文件(不必只是耳机)。

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

这是我迄今为止尝试过的:

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

     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());
    }
    

【问题讨论】:

  • 它到底是怎么不工作的?
  • 在音频插孔中插入某些东西时,它不会在扬声器上播放音频。这就是我想要做的。
  • 这不是预期/正常的行为吗?
  • 您没有提到您用于播放的流类型。这很重要。
  • @shoerat 是的,这是预期的行为。我将尝试重新提出问题。

标签: android audio playing headphones


【解决方案1】:

我发现了如何做到这一点。请注意,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();

【讨论】:

    【解决方案2】:

    向清单添加权限使用也很重要:

    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    

    【讨论】:

      猜你喜欢
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多