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

时间:2013-12-23 07:26:38

标签: android audio playing headphones

我想播放音频文件,而我的设备已插入音频插孔(不仅仅是耳机)。

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

这是我到目前为止所尝试的内容:

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

将权限用法添加到清单中也很重要:

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