我知道有一个实现可获取android MediaPlayer的蓝牙媒体按钮的实现,但是我在服务内部使用MediaPlayer。我通过按“开始”和“停止”按钮从主要活动(也控制GUI)启动和停止的服务。
这是我的主要活动。由于我的主要活动很大,因此我将尝试仅添加此问题所需的代码。
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();
(即“播放”按钮)和stopPlaying();
(即“停止”按钮)。这两个按钮启动和停止MediaPlayer服务,因此我必须在这里执行它,而不是在服务内部执行它。 MediaPlayer必须位于服务内部,以便它在后台运行,但是我必须从主活动内部控制开始和停止按钮,因为一旦按下按钮,我就需要更改按钮的行为,而这是我不能做的。服务本身。
问题是,它不起作用。我的应用程序使用API 21和更高版本,因此它是媒体按钮的较新实现。我知道在API 21之前,实现是不同的。我在网上寻找的所有内容都会导致旧的实现。我是根据官方信息亲自完成的。
有什么我想念的吗?我还设置了互联网用户权限(因为这是互联网广播流的应用程序),蓝牙和唤醒锁。