Good morning everyone.
I have developed an application that uses DataWedge and broadcast intents to read barcodes.
I used the BroadcastReceiver library to intercept the intent sent by DataWedge, and everything works fine on devices running Android 11.
However, on new devices with Android 13, I no longer receive the broadcast intents.
I also tried what Erel suggested regarding RegisterReceiver, but without success.
The following code regards to ZebraSVC
Manifest:
Any idea how to solve?
I have developed an application that uses DataWedge and broadcast intents to read barcodes.
I used the BroadcastReceiver library to intercept the intent sent by DataWedge, and everything works fine on devices running Android 11.
However, on new devices with Android 13, I no longer receive the broadcast intents.
I also tried what Erel suggested regarding RegisterReceiver, but without success.
The following code regards to ZebraSVC
ZebraSVC:
#Region Service Attributes
#StartAtBoot: False
#End Region
Sub Process_Globals
Dim Broadcast As BroadCastReceiver
End Sub
Sub Service_Create
Broadcast.Initialize("BroadcastReceiver" )
End Sub
Sub Service_Start (StartingIntent As Intent)
Broadcast.addAction("com.miocoso.DATAWEDGE")
Broadcast.addCategory("android.intent.category.DEFAULT")
Broadcast.SetPriority(2147483647)
RegisterReceiver(Broadcast,False)
'Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
CallSubDelayed2(Main,"show_barcode_icon",True)
End Sub
Sub Service_Destroy
unRegisterReceiver (Broadcast)
End Sub
Sub BroadcastReceiver_OnReceive (context As Object, i As Object )
Dim action As String = context
Log($"BroadcastReceiver_OnReceive(${action})"$)
Log(i)
Dim intent As Intent = i
If intent.HasExtra("com.motorolasolutions.emdk.datawedge.data_string") Then
Log("emdkDataString = "&intent.GetExtra("com.motorolasolutions.emdk.datawedge.data_string"))
CallSubDelayed2(Main, "read_item_barcode", intent.GetExtra("com.motorolasolutions.emdk.datawedge.data_string"))
else if intent.HasExtra("com.symbol.datawedge.data_string") Then
Log("emdkDataString = "&intent.GetExtra("com.symbol.datawedge.data_string"))
CallSubDelayed2(Main, "read_item_barcode", intent.GetExtra("com.symbol.datawedge.data_string"))
End If
End Sub
Private Sub RegisterReceiver(br As BroadCastReceiver, Exported As Boolean)
Dim p As Phone
If p.SdkVersion < 33 Then
br.registerReceiver("")
Else
Dim r As Reflector
r.Target = br
Dim filter As Object = r.GetField("filter")
Dim receiver As Object = r.GetField("receiver")
Dim ctxt As JavaObject
ctxt.InitializeContext
ctxt.RunMethod("registerReceiver", Array(receiver, filter, IIf(Exported, 2, 4)))
r.SetField("isRegistered", "true", "java.lang.boolean")
End If
End Sub
Sub unRegisterReceiver(pBR As BroadCastReceiver)
Dim p As Phone
If p.SdkVersion < 33 Then
pBR.unregisterReceiver
Else
Dim r As Reflector
r.Target = pBR
Dim receiver As Object = r.GetField("receiver")
Dim ctxt As JavaObject
ctxt.InitializeContext
ctxt.RunMethod("unregisterReceiver", Array(receiver))
r.SetField("isRegistered", "false", "java.lang.boolean")
End If
End Sub
Manifest:
AddReceiverText(ZebraSVC,
<intent-filter>
<action android:name="com.miocoso.DATAWEDGE" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
)
Any idea how to solve?