如何解决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)
我为耳机按钮事件创建了此代码,但它不起作用。
解决方法
这意味着您的 MediaPlayer
是 null
,并且您正试图对其调用 isPlaying
。
像这样重写你的条件,先检查它是否为空
if(mp != null && mp.isPlaying()){
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。