android - Android Studio 耳机控制按钮点击事件错误
问题描述
当我在方法中调用actionPlaying
按钮时,我在我的 Android 应用程序中收到一条错误消息。onPlay
这是我的代码:
@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, 0,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
is null
,并且您正在尝试调用isPlaying
它。
像这样重写你的条件以首先检查它是否为空
if(mp != null && mp.isPlaying()){
...
推荐阅读
- java - 为什么 java 反编译器没有使用 lambdas 显示正确的代码?
- javascript - Loki db 更改新项目集成
- python - 将模型正确保存到 .pb
- function - Elasticsearch Nest 不正确的函数_Score JSON 生成
- cassandra - cassandra 从增量备份恢复
- solr - 从 Solr 的 facet 中排除所有标签
- c# - 无法禁用 ViewState
- arrays - 使用递归指针的 OpenACC 并行 FOR 循环
- mysql - 在列中显示值,尽管它被另一列的 WHERE 条件排除
- aem - 在页面属性对话框中隐藏继承的属性(触摸 UI)