将焦点从FM收音机更改为蓝牙

时间:2017-04-27 14:37:56

标签: android bluetooth android-mediasession

我正在开发一款应用程序,其目的是通过蓝牙播放音乐并处理媒体按钮。我已成功使用代码:

private void startSession() {
    if(mAudioManager == null) {
        mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
    }
    mAudioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
    ComponentName eventReceiver = new ComponentName(getPackageName(), BluetoothMediaButtonReceiver.class.getName());
    mAudioManager.registerMediaButtonEventReceiver(eventReceiver);
    Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
    mediaButtonIntent.setComponent(eventReceiver);
    PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, 0);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        if(mMediaSessionCompat != null) {
            mMediaSessionCompat.release();
        }
        mMediaSessionCompat = new MediaSessionCompat(this, "PlayerServiceMediaSession", eventReceiver, mediaPendingIntent);
        mMediaSessionCompat.setFlags(MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
        mMediaSessionCompat.setMediaButtonReceiver(mediaPendingIntent);
        mMediaSessionCompat.setActive(true);
    } else {
        if(mMediaSession != null) {
            mMediaSession.release();
        }
        mMediaSession = new MediaSession(this, "PlayerServiceMediaSession");
        mMediaSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
        mMediaSession.setActive(true);
        mMediaSession.setMediaButtonReceiver(mediaPendingIntent);
    }
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
}

要使用服务播放音乐,使用接收器处理按钮:

public class BluetoothMediaButtonReceiver extends BroadcastReceiver {

public final static String ACTION_BUTTON_PREVIOUS = "media.button.clicked";
public final static String ACTION_BUTTON_NEXT = "media.button.nex";
public final static String ACTION_BUTTON_PLAY = "media.button.play";
public final static String ACTION_BUTTON_PAUSE = "media.button.pause";
public final static String ACTION_BUTTON_PLAY_PAUSE = "media.button.play_pause";

@Override
public void onReceive(Context context, Intent intent) {
    String intentAction = intent.getAction();
    if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
        return;
    }
    KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    if (event == null) {
        return;
    }
    int action = event.getAction();
    if (action == KeyEvent.ACTION_DOWN) {
        switch (event.getKeyCode()) {
            case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
                // code for fast forward
                break;
            case KeyEvent.KEYCODE_MEDIA_NEXT:
                //Toast.makeText(context, "next button was clicked", Toast.LENGTH_SHORT).show();
                context.sendBroadcast(new Intent(ACTION_BUTTON_NEXT));
                break;
            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
                context.sendBroadcast(new Intent(ACTION_BUTTON_PLAY_PAUSE));
                break;
            case KeyEvent.KEYCODE_MEDIA_PLAY:
                context.sendBroadcast(new Intent(ACTION_BUTTON_PLAY));
                break;
            case KeyEvent.KEYCODE_MEDIA_PAUSE:
                context.sendBroadcast(new Intent(ACTION_BUTTON_PAUSE));
                break;
            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
                context.sendBroadcast(new Intent(ACTION_BUTTON_PREVIOUS));
                break;
            case KeyEvent.KEYCODE_MEDIA_REWIND:
                // code for rewind
                break;
            case KeyEvent.KEYCODE_MEDIA_STOP:
                // code for stop
                break;
        }
    }
    abortBroadcast();
}

}

我正在改变onMediaPlayerStart中的元数据以及此类标准内容,并且每项工作都很有效,这就是问题所在:

连接到汽车音响系统并播放音乐后 - 汽车音响模式停留在FM收音机,例如,如果它在那里,我必须手动将其更改为汽车中的蓝牙

我想要实现的目标:当我的应用程序开始播放曲目时,我想以编程方式将汽车音频模式从FM收音机改为蓝牙

我用Google搜索并在堆栈上搜索,但在这种情况下没有任何内容,我甚至不确定哪个班级会做这样的事情。我理解这个问题可能被认为是一个糟糕的问题而且没有重点,但这是因为我在Android上使用蓝牙的知识也很严峻,在这个问题上很难找到一些exanples

1 个答案:

答案 0 :(得分:0)

在您不知道汽车信息娱乐系统如何处理媒体模式之前,您无法更改汽车信息娱乐系统的音频模式。

默认情况下,Android播放Music-Stream中的歌曲,但蓝牙,FM收音机,RNVC等播放不同的流(可在框架设计期间自定义)。

因此,如果您想实现这一点,那么您必须向他们询问他们用于FM,蓝牙等的流。