我正在开发一款应用程序,其目的是通过蓝牙播放音乐并处理媒体按钮。我已成功使用代码:
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
答案 0 :(得分:0)
在您不知道汽车信息娱乐系统如何处理媒体模式之前,您无法更改汽车信息娱乐系统的音频模式。
默认情况下,Android播放Music-Stream中的歌曲,但蓝牙,FM收音机,RNVC等播放不同的流(可在框架设计期间自定义)。
因此,如果您想实现这一点,那么您必须向他们询问他们用于FM,蓝牙等的流。