App Crash On Headset Button Click
I have build an audioplayer which is deployed in android google playstore. I'm using crashlytics to monitor crashes and ANRs. Recently I have been getting a lot of crashes MediaBut
Solution 1:
You have to create your own media button receiver class, say MyMediaButtonReceiver.java
, that extends MediaButtonReceiver
, and it will be empty except for the onReceive
method that you have to override, calling super.onReceive(...)
between a try-catch that captures the IllegalStateException
:
publicclassMyMediaButtonReceiverextendsMediaButtonReceiver {
@OverridepublicvoidonReceive(Context context, Intent intent) {
try {
super.onReceive(context, intent);
} catch (IllegalStateException e) {
Log.d(this.getClass().getName(), e.getMessage());
}
}
}
Then you have to declare that receiver class in your Manifest (or replace your previous MediaButtonReceiver
class declaration, if you had one), like:
<receiverandroid:name=".MyMediaButtonReceiver" ><intent-filter><actionandroid:name="android.intent.action.MEDIA_BUTTON" /></intent-filter></receiver>
Solution 2:
classMyMediaButtonReceiver : MediaButtonReceiver() {
overridefunonReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_MEDIA_BUTTON) {
val event = intent.getParcelableExtra<KeyEvent>(Intent.EXTRA_KEY_EVENT)
if (event.action == KeyEvent.ACTION_UP || event.action ==
KeyEvent.ACTION_DOWN) {
when (event.keyCode) {
// handle cancel button
KeyEvent.KEYCODE_MEDIA_STOP -> context.sendIntent(ACTION_FINISH)
// handle play button
KeyEvent.KEYCODE_MEDIA_PLAY, KeyEvent.KEYCODE_MEDIA_PAUSE -> context.sendIntent(ACTION_PLAY_PAUSE)
}
}
}
}
}
kotlin extension for send event to media service
fun Context.sendIntent(action: String) {
Intent(this, MediaPlayerService::class.java).apply {
this.action = action
try {
if (isOreoPlus()) {
startForegroundService(this)
} else {
startService(this)
}
} catch (ignored: Exception) {
}
}
}
add Receiver in manifest
<receiverandroid:name=".player.receivers.MyMediaButtonReceiver" ><intent-filter><actionandroid:name="android.intent.action.MEDIA_BUTTON" /></intent-filter></receiver>
Post a Comment for "App Crash On Headset Button Click"