Android Question Zebra Datawedge usage

fabton1963

Member
Licensed User
Longtime User
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


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:

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?
 
Top