#Region Service Attributes
#StartAtBoot: False
#End Region
Sub Process_Globals
Private session As JavaObject
Private mp As MediaPlayer
End Sub
Sub Service_Create
Log("MediaButtonService: Service_Create")
mp.Initialize2("mp")
Log("MediaButtonService: media player initialized")
Dim context As JavaObject
context.InitializeContext
session.InitializeNewInstance("android.media.session.MediaSession", Array(context, "AnyDealerMedia"))
session.RunMethod("setFlags", Array(3))
Dim PlaybackState As JavaObject
PlaybackState.InitializeStatic("android.media.session.PlaybackState")
Dim psBuilder As JavaObject
psBuilder.InitializeNewInstance("android.media.session.PlaybackState$Builder", Null)
Dim actions As Long = _
PlaybackState.GetField("ACTION_PLAY_PAUSE") + _
PlaybackState.GetField("ACTION_PLAY") + _
PlaybackState.GetField("ACTION_PAUSE") + _
PlaybackState.GetField("ACTION_SKIP_TO_NEXT") + _
PlaybackState.GetField("ACTION_SKIP_TO_PREVIOUS")
psBuilder.RunMethod("setActions", Array(actions))
Dim st As Int = PlaybackState.GetField("STATE_PLAYING")
Dim pos As Long = 0
Dim spd As Float = 1
psBuilder.RunMethod("setState", Array(st, pos, spd))
session.RunMethod("setPlaybackState", Array(psBuilder.RunMethod("build", Null)))
Dim cb As JavaObject
cb.InitializeNewInstance(Application.PackageName & ".mediabuttonservice$MyCallback", Null)
session.RunMethod("setCallback", Array(cb))
session.RunMethod("setActive", Array(True))
Log("MediaButtonService: session active")
End Sub
Sub Service_Start (StartingIntent As Intent)
Log("MediaButtonService: Service_Start")
End Sub
Sub Service_Destroy
Log("MediaButtonService: Service_Destroy")
Try
If mp.IsInitialized Then mp.Stop
Catch
End Try
Try
If session.IsInitialized Then
session.RunMethod("setActive", Array(False))
session.RunMethod("release", Null)
End If
Catch
End Try
End Sub
Sub Media_OnButton(KeyCode As Int)
Log("HEADSET KEY DOWN: " & KeyCode)
B4XPages.MainPage.AddClickItem("HEADSET KEY DOWN: " & KeyCode)
End Sub
#If Java
import android.media.session.MediaSession;
import android.content.Intent;
import android.view.KeyEvent;
public static class MyCallback extends MediaSession.Callback {
@Override
public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
BA.Log("onMediaButtonEvent fired");
if (mediaButtonIntent == null) return false;
KeyEvent ke = (KeyEvent) mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (ke == null) return false;
if (ke.getAction() == KeyEvent.ACTION_DOWN) {
processBA.raiseEventFromUI(null, "media_onbutton", ke.getKeyCode());
}
return true;
}
}
#End If