无法让蓝牙媒体按钮在主要活动中工作

时间:2019-03-06 14:59:29

标签: java android bluetooth

我知道有一个实现可获取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之前,实现是不同的。我在网上寻找的所有内容都会导致旧的实现。我是根据官方信息亲自完成的。

有什么我想念的吗?我还设置了互联网用户权限(因为这是互联网广播流的应用程序),蓝牙和唤醒锁。

0 个答案:

没有答案