有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java强制音频路由到扬声器(如果用户偏好,还可以选择路由到BT)和setStreamType被棒棒糖忽略

我的目标如下,我想在首选项中为用户提供以下选项:

  • 播放声音:“始终打开扬声器”或“在可用时使用蓝牙”
  • 使用流:STREAM_MUSICSTREAM_ALARMSTREAM_NOTIFICATIONSTREAM_RING

我的第一个问题是,当用户将一个(棒棒糖)设备连接到一个支持a2dp的设备(汽车立体声)时,我似乎无法通过设备扬声器播放声音。(声音也没有通过a2dp设备播放)

我遇到的第二个问题是setStreamType不知何故从棒棒糖开始就停止工作了?在棒棒糖上setStreamType被忽略,声音总是通过AudioManager.STREAM_MUSIC播放?(在设备pre-Lollipop上,相同的代码仍然有效)

private void playSound() {
    try {

        if (am == null) am = (AudioManager) _context.getSystemService(Context.AUDIO_SERVICE);



        if (am.isWiredHeadsetOn() || am.isBluetoothA2dpOn()){
            am.setWiredHeadsetOn(false);
            am.setBluetoothScoOn(false);
//          am.setMode(AudioManager.MODE_IN_CALL); // bel speaker
//          am.setSpeakerphoneOn(false); // bel speaker
            am.setMode(AudioManager.MODE_IN_CALL); // media speaker
            am.setSpeakerphoneOn(true); // media speaker
        } else {
//          am.setMode(AudioManager.MODE_IN_CALL); // bel speaker
//          am.setSpeakerphoneOn(false); // bel speaker
            am.setMode(AudioManager.MODE_NORMAL); // media speaker
            am.setSpeakerphoneOn(true); // media speaker
        }


        Class audioSystemClass = Class.forName("安卓.media.AudioSystem");
        Method setForceUse = audioSystemClass.getMethod("setForceUse",
            int.class,
            int.class);
        // 1 == FOR_MEDIA, 10 == FORCE_NO_BT_A2DP (FORCE_SPEAKER would be 1).
        setForceUse.invoke(null, 1, 1);

        alarmsound = _prefs.getString("alarm", alarmsound);

        as = Uri.parse(alarmsound);

        if (mp == null) mp = MediaPlayer.create(_context, as);
        mp.reset();
        if (alarmsound.startsWith("content://settings/system/"))
            mp.setDataSource(_context, Uri.parse("安卓.resource://nl.xxxxxxxx.xxxxxxxx/raw/beep"));
        else setMediaPlayerDataSource(_context, mp, as.toString());

        mp.setAudioStreamType(Globals.AudioStreamType);

        mp.prepare();

        long alarmDuration = mp.getDuration();
        mp.start();

}

来自Globals类: public static int AudioStreamType = AudioManager.STREAM_MUSIC;(用户可以将其更改为其他流类型)

我声明在清单中使用权限安卓.permission.MODIFY_AUDIO_SETTINGS

希望有人能给我指出正确的方向


共 (0) 个答案