Я знаю, что есть реализация для получения мультимедийных кнопок Bluetooth для Android MediaPlayer, однако я использую MediaPlayer внутри службы.Служба, которую я запускаю и останавливаю из основной активности (которая также управляет графическим интерфейсом), нажимая кнопки Пуск и Стоп.
Здесь это моя основная деятельность.Я постараюсь добавить только необходимый код для этой проблемы, так как моя основная деятельность довольно большая.
public class homepage extends AppCompatActivity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initializeUIElements();
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
final PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WakeLock:Acquire");
wakeLock.acquire(10 * 60 * 1000 L);
Timer wakeLockTimer = new Timer();
wakeLockTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (wakeLock.isHeld()) {
wakeLock.release();
if (!wakeLock.isHeld()) {
wakeLock.acquire(10 * 60 * 1000 L);
}
}
}
}, 0, 10 * 60 * 1000);
}
//Headphone button.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return super.onKeyDown(keyCode, event);
}
switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_PLAY:
if (!mRunning) {
buttonPlayAction();
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_STOP:
if (mRunning) {
stopPlaying();
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_PAUSE:
if (mRunning) {
stopPlaying();
return true;
}
break;
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
if (!mRunning) {
buttonPlayAction();
return true;
} else {
stopPlaying();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
}
Я пытаюсь использовать buttonPlayAction();
, который является кнопкой Play, и stopPlaying();
, который являетсяКнопка Стоп через мультимедийные кнопки Bluetooth.Эти две кнопки запускают и останавливают службу MediaPlayer, поэтому я должен сделать это здесь, а не делать это внутри службы.MediaPlayer должен находиться внутри службы, чтобы он работал в фоновом режиме, но я должен управлять кнопками «Пуск» и «Стоп» из основного действия, потому что мне нужно изменить поведение кнопки после их нажатия, чего я не могу сделать изСам сервис.
Проблема в том, что он не работает.Мое приложение работает с API 21 и новее, так что это более новая реализация мультимедийных кнопок.Я знаю, что до API 21 реализация была другой.Все, что я искал в Интернете, ведет к старой реализации.Я сделал это сам, следуя официальной информации.
Есть что-то, что я пропустил?Я также установил пользовательские разрешения для интернета (поскольку это приложение для интернет-радиопотока), Bluetooth и блокировки пробуждения.