向内部扬声器和所有其他(音乐,电话,警报)向蓝牙音箱(a2dp)

时间:2017-07-10 15:59:30

标签: android android-source

我正在制作一个应用程序,我必须在内置扬声器的手机摇动中播放每秒生成通知的声音,同时我的应用程序通过汽车的蓝牙连接到(A2DP)。我必须将通知音频路由到内置扬声器,并将所有其余声音(音乐,电话,警报等)路由到蓝牙扬声器。这可能吗?

我已经研究了堆栈上发布的所有相关问题,但似乎没有人回答它们。以下是我通过音频管理器类尝试过的代码片段。

我尝试使用内置方法

路由音频流
 AudioManager audioManager = (AudioManager) getContext().getSystemService(AUDIO_SERVICE);
    audioManager.setMode(AudioManager.ROUTE_EARPIECE);
    audioManager.setSpeakerphoneOn(false);

当时从蓝牙扬声器切断流,但是在流后面播放的任何音乐再次被路由到BT扬声器,然后没有通知声音。我已经尝试了所有的音频管理器路由和模式,但似乎没有工作。 通知声音是一个mp3,路径是通过解析URI设置的,这就是我如何构建我的通知。

NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.newlogo)
                    .setLargeIcon(largeIcon)
                    .setSound(uri)
                    .setContentTitle(notificationHeading)
                    .setContentText(notificationBody)
                    .setPriority(Notification.PRIORITY_HIGH).setVibrate(v);
    notificationManager.notify(1,mBuilder.build());

所以,如果有可能这件事有可能我更愿意接受它,任何图书馆甚至付费的,如果解决这个问题,请分享,我也不能root手机这个应用程序将发布在玩店内。

1 个答案:

答案 0 :(得分:0)

通过AudioTrack.java类播放演讲者通知的声音,并使用流AUDIO_STREAM_TTS(缩写为'通过演讲者'传输)或AUDIO_STREAM_ENFORCED_AUDIBLE。

https://developer.android.com/reference/android/media/AudioTrack.html#AudioTrack(int,%20int,%20int,%20int,%20int,%20int)

AUDIO_STREAM_ENFORCED_AUDIBLE = 7, /* Sounds that cannot be muted by user
                                    * and must be routed to speaker
                                    */
AUDIO_STREAM_TTS              = 9,  /* Transmitted Through Speaker.
                                     * Plays over speaker only, silent on other devices.
                                     */