Android Studio 耳机控制按钮单击事件错误

问题描述

当我在 actionPlaying 方法中调用 onPlay 按钮时,我的 Android 应用程序收到一条错误消息。

这是我的代码:

@Override
public void onReceive(Context context,Intent intent)
{
    if(event.getAction() != KeyEvent.ACTION_DOWN) return;

    switch (event.getKeyCode())
    {
        case KeyEvent.KEYCODE_HEADSETHOOK:
        case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
            actionPlaying.playandpause();
            Toast.makeText(context,"Play",Toast.LENGTH_SHORT).show();
            break;
        case KeyEvent.KEYCODE_MEDIA_NEXT:
            break;
        case  KeyEvent.KEYCODE_MEDIA_PREVIOUS:
            break;
    }
}

... 
MediaSession mediaSession = new MediaSession(context,"tag");
mediaSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
mediaSession.setCallback(callback);

PlaybackState state1 = new PlaybackState.Builder()
        .setActions(
                PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE |
                PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE |
                PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS)
        .setState(PlaybackState.STATE_PLAYING,1)
        .build();
    
mediaSession.setPlaybackState(state1);
mediaSession.setActive(true);
}

MediaSession.Callback callback = new MediaSession.Callback() {
    @Override
    public boolean onMediaButtonEvent(@NonNull Intent mediaButtonIntent) {
        return super.onMediaButtonEvent(mediaButtonIntent);
    }
    @Override
    public void onPlay()
    {
        super.onPlay();
        actionPlaying.playandpause();
    }
    @Override
    public void onPause() {
        super.onPause();
    }
    @Override
    public void onSkipToNext()
    {
        super.onSkipToNext();
        actionPlaying.clicknext();
    }
    @Override
    public void onSkipToPrevious() {
        super.onSkipToPrevious();
        actionPlaying.clickback();
    }
};

MainActivity

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
                                      
        IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
        MyBroadCastRecevier r = new MyBroadCastRecevier();
        registerReceiver(r,filter);
    }

关闭应用程序时显示此错误消息

Logcat 错误

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.rehoboth.myapplication.ActionPlaying.playandpause()' on a null object reference
    at com.rehoboth.myapplication.MyBroadCastRecevier.onReceive(MyBroadCastRecevier.java:48)
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3177)
    at android.app.ActivityThread.-wrap18(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1653) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:156) 
    at android.app.ActivityThread.main(ActivityThread.java:6517)

我为耳机按钮事件创建了此代码,但它不起作用。

解决方法

这意味着您的 MediaPlayernull,并且您正试图对其调用 isPlaying

像这样重写你的条件,先检查它是否为空

if(mp != null && mp.isPlaying()){
    ...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...