Android Question Bluetooth permission error

warayTek

Member
Licensed User
I am using SD EscPos Printer's library.
Manifest file:
AddManifestText(
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="33"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)
'End of default text.

AddPermission(android.permission.ACCESS_COARSE_LOCATION)
AddPermission(android.permission.ACCESS_FINE_LOCATION)
AddPermission(android.permission.BLUETOOTH_ADVERTISE)
AddPermission(android.permission.BLUETOOTH_CONNECT)
AddPermission(android.permission.BLUETOOTH_SCAN)

This is the error logs.
B4X:
--------- beginning of main
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create (first time) **
** Activity (main) Resume **
POWERED ON
permission granted
Working Bluetooth Printer prototype!
java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission for android.content.AttributionSource@59b5733d: AdapterService getBondedDevices
    at com.android.bluetooth.Utils.checkPermissionForDataDelivery(Utils.java:476)
    at com.android.bluetooth.Utils.checkConnectPermissionForDataDelivery(Utils.java:508)
    at com.android.bluetooth.btservice.AdapterService$AdapterServiceBinder.getBondedDevices(AdapterService.java:2745)
    at com.android.bluetooth.btservice.AdapterService$AdapterServiceBinder.getBondedDevices(AdapterService.java:2737)
    at android.bluetooth.IBluetooth$Stub.onTransact(IBluetooth.java:1109)
    at android.os.Binder.execTransactInternal(Binder.java:1331)
    at android.os.Binder.execTransact(Binder.java:1268)
java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission for android.content.AttributionSource@59b5733d: AdapterService getBondedDevices
    at com.android.bluetooth.Utils.checkPermissionForDataDelivery(Utils.java:476)
    at com.android.bluetooth.Utils.checkConnectPermissionForDataDelivery(Utils.java:508)
    at com.android.bluetooth.btservice.AdapterService$AdapterServiceBinder.getBondedDevices(AdapterService.java:2745)
    at com.android.bluetooth.btservice.AdapterService$AdapterServiceBinder.getBondedDevices(AdapterService.java:2737)
    at android.bluetooth.IBluetooth$Stub.onTransact(IBluetooth.java:1109)
    at android.os.Binder.execTransactInternal(Binder.java:1331)
    at android.os.Binder.execTransact(Binder.java:1268)

I am selecting the first option.
B4X:
Private Sub ButtonPrintText_Click
    Select True
        Case RadioBlue.Checked
            If BTConnected Then
                Blue.ClearBuffer
                Blue.AddBuffer_Writeline(Chr(27) & Chr(97) & Chr(50))
                Blue.RightJustify
                Blue.AddBuffer_Writeline("TEST -RIGHT")
                Blue.LeftJustify
                Blue.AddBuffer_Writeline("TEST - LEFT")
                Blue.CenterJustify
                Blue.AddBuffer_Writeline("TEST - CENTER")
                Blue.AddBuffer_Writeline("PRINT Euros char on cinese printer")
                Blue.CodeTable=Encoding.Code_PC858
                Blue.Charset=Encoding.Windows1252
                Blue.AddBuffer_WriteLine("10 €.")
                
                
                Blue.SendBufferToPrinter
            Else
                ToastMessageShow("Not connected",False)
            End If
        Case RadioBLE.Checked
            If BLEConnected Then
                Bl_Printer.InitializePrinter
                Bl_Printer.RightJustify
                Bl_Printer.Writeline(ESC_POS.DoubleOn & "RIGHT PRINT" & ESC_POS.DoubleOff)
                Bl_Printer.CenterJustify
                Bl_Printer.Writeline(ESC_POS.FontA_DoubleHight & "CENTER PRINT" & ESC_POS.FontA_Normal)
                Bl_Printer.LeftJustify
                Bl_Printer.Writeline("LEFT PRINT")
            Else
                ToastMessageShow("Not connected",False)
            End If
        Case RadioUSB.Checked
            If USBConnected Then
                U_Printer.OpenConnection
                U_Printer.WriteLine("HALLO MY FRIENT")
                U_Printer.Writeline(ESC_POS.DoubleOn & "TEST OF TEXT" & ESC_POS.DoubleOff)
                U_Printer.Charset=Encoding.Windows1252
                U_Printer.WriteLine("€. 10")
                U_Printer.CloseConnection
            Else
                ToastMessageShow("Not connected",False)
            End If
        Case RadioLAN.Checked
            If LanConnected Then
                L_Printer.InitializePrinter
                L_Printer.RightJustify
                L_Printer.Writeline(ESC_POS.DoubleOn & "RIGHT PRINT" & ESC_POS.DoubleOff)
                L_Printer.CenterJustify
                L_Printer.Writeline(ESC_POS.FontA_DoubleHight & "CENTER PRINT" & ESC_POS.FontA_Normal)
                L_Printer.LeftJustify
                L_Printer.Writeline("LEFT PRINT")
            Else
                ToastMessageShow("Not connected",False)
            End If
    End Select
End Sub

When application is loaded it will display permission is granted but when start printing it crashed. Any help is much appreciated.
 

warayTek

Member
Licensed User
My mistake I forget to write explicit permission.
B4X:
B4XPages.MainPage.rp.CheckAndRequest("android.permission.BLUETOOTH_SCAN")
        Wait For B4XPage_PermissionResult(Permission As String, Result As Boolean)
        If Result = False Then
            ToastMessageShow("Bluetooth scan permission denied", False)
            Return
        End If
        B4XPages.MainPage.rp.CheckAndRequest("android.permission.BLUETOOTH_CONNECT")
        Wait For B4XPage_PermissionResult(Permission As String, Result As Boolean)
        If Result = False Then
            ToastMessageShow("Bluetooth permission denied", False)
            Return
        End If
        B4XPages.MainPage.rp.CheckAndRequest("android.permission.BLUETOOTH_ADVERTISE")
        Wait For B4XPage_PermissionResult(Permission As String, Result As Boolean)
        If Result = False Then
            ToastMessageShow("Bluetooth permission denied", False)
            Return
        End If
Working fine now.
 
Upvote 0
Top