Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使蓝牙媒体按钮在主活动中工作_Java_Android_Bluetooth - Fatal编程技术网

Java Can';t使蓝牙媒体按钮在主活动中工作

Java Can';t使蓝牙媒体按钮在主活动中工作,java,android,bluetooth,Java,Android,Bluetooth,我知道android MediaPlayer有一个蓝牙媒体按钮的实现,但是我在服务中使用了MediaPlayer。通过按下启动和停止按钮,从主活动(也控制GUI)启动和停止服务 这是我的主要活动。我将尝试只为这个问题添加所需的代码,因为我的主要活动相当大 public class homepage extends AppCompatActivity implements OnClickListener { @Override public void onCreate(Bundle

我知道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);
    }
}
我正在尝试使用
buttonlayaction()
这是播放按钮和
stopPlaying()这是通过蓝牙媒体按钮的停止按钮。这两个按钮启动和停止MediaPlayer服务,因此我必须在这里执行,而不是在服务内部执行。MediaPlayer必须位于服务内部,以便在后台运行,但我必须从主活动内部控制启动和停止按钮,因为一旦按下按钮,我需要更改按钮的行为,而这是服务本身无法做到的

问题是,它不起作用。我的应用程序使用API 21和更新版本,因此它是媒体按钮的更新版本。我知道在API 21之前,实现是不同的。我在网上查找的所有内容都指向旧的实现。我是根据官方信息自己做的

我错过了什么吗?我还设置了互联网(因为这是一个互联网广播流的应用程序)、蓝牙和唤醒锁的用户权限