Sub SetWidgetClickEvent(ServiceName As String, WidgetId As Int, rv As RemoteViews, ViewName As String, EventName As String)
Dim vIntent As Object
Dim vPendingIntent As Object
Dim ref As Reflector
Dim ViewId As Int
vIntent = ref.RunStaticMethod("anywheresoftware.b4a.keywords.Common", "getComponentIntent", Array As Object(ref.GetProcessBA(ServiceName), Null), Array As String("anywheresoftware.b4a.BA", "java.lang.Object"))
ref.Target = vIntent
EventName = EventName.ToLowerCase
ref.RunMethod4("putExtra", Array As Object("b4a_internal_event", EventName & "_click2"), Array As String("java.lang.String", "java.lang.String"))
ref.RunMethod4("putExtra", Array As Object("appWidgetId", WidgetId), Array As String("java.lang.String", "java.lang.int"))
ref.Target = rv
ViewId = ref.RunMethod4("getIdForView", Array As Object(ref.GetProcessBA(ServiceName), ViewName), Array As String("anywheresoftware.b4a.BA", "java.lang.String")) ' get the view Id
vPendingIntent = ref.RunStaticMethod("android.app.PendingIntent", "getService", Array As Object(ref.GetContext, WidgetId, vIntent, 134217728), Array As String("android.content.Context", "java.lang.int", "android.content.Intent", "java.lang.int"))
ref.RunMethod("checkNull") 'does some internal checking and may set current
ref.Target = ref.GetField("current") ' a RemoteViews - get this after checkNull
ref.RunMethod4("setOnClickPendingIntent", Array As Object(ViewId, vPendingIntent), Array As String("java.lang.int", "android.app.PendingIntent"))
UpdateSingleWidget(rv, WidgetId)
End Sub