Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Bluetooth application works on Android 5 api22 but not on Android 6 api 23
Forum Updated to NodeBB v4.3 + New Features

Bluetooth application works on Android 5 api22 but not on Android 6 api 23

Scheduled Pinned Locked Moved Solved Mobile and Embedded
2 Posts 1 Posters 2.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    Cornelio
    wrote on 20 Sept 2016, 10:10 last edited by
    #1

    Hi,
    I developed a Bluetooth application on Qt5.5.1 C++ and QML, Android 5 api 22 and everything worked fine.
    Now I'm trying to test it on Android 6 api 23 but I'm not able to connect to external Bluetooth device.
    This is what I made:

    • Upgrade to Qt5.7
    • Download api 23 SDK
    • In project build settings, Android build APK set to Android-23
    • In AndroidManifest.xml, Minimum required SDK API 16
    • In AndroidManifest.xml, Target SDK API 23
    • In AndroidManifest.xml, android.permission.ACCESS_COARSE_LOCATION
    • In AndroidManifest.xml, android.permission.ACCESS_FINE_LOCATION
    • In AndroidManifest.xml, android.permission.BLUETOOTH
    • In AndroidManifest.xml, android.permission.BLUETOOTH_ADMIN

    The code used to connect to Bluetooth is:

    #if isScan
    void blue::startClient(const QBluetoothServiceInfo &remoteService)
    #else
    void blue::startClient()
    #endif
    {
    if (socket)
    return;

    socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
    socket->setPreferredSecurityFlags(QBluetooth::NoSecurity);
    

    #if isScan
    socket->connectToService(remoteService,QIODevice::ReadWrite);
    #else
    QBluetoothAddress indirizzo("00:12:6F:90:6A:DA");

    #if isAndroid
    btUuid = new QBluetoothUuid;
    btUuid->fromRfc4122("00000000-0000-0000-0000-000000000000");
    socket->connectToService(indirizzo,*btUuid,QIODevice::ReadWrite);
    #else
    socket->connectToService(indirizzo,1,QIODevice::ReadWrite);
    #endif

    #endif
    connect(socket, SIGNAL(readyRead()), this, SLOT(leggiSocket()));
    connect(socket, SIGNAL(connected()), this, SLOT(connesso()));
    connect(socket, SIGNAL(disconnected()), this, SLOT(disconnesso()));
    }

    When I deploy on an Android 5 device with these settings everything works fine and I get this:

    I/InputDispatcher( 906): Delivering touch to (11222): action: 0x0, toolType: 1
    D/ViewRootImpl(11222): ViewPostImeInputStage ACTION_DOWN
    I/InputDispatcher( 906): Delivering touch to (11222): action: 0x1, toolType: 1
    D/libMGplus.so(11222): (null):0 ((null)): Connesso bluetooth...
    D/BluetoothUtils(11222): isSocketAllowedBySecurityPolicy start : device null
    W/BluetoothAdapter(11222): getBluetoothService() called with no BluetoothManagerCallback
    D/BluetoothSocket(11222): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[51]}
    W/System.err(11222): java.io.IOException: bt socket connect failed
    W/System.err(11222): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:402)
    W/libMGplus.so(11222): (null):0 ((null)): qt.bluetooth.android: Falling back to workaround.
    W/libMGplus.so(11222): (null):0 ((null)): qt.bluetooth.android: Cannot determine RFCOMM service channel.
    W/libMGplus.so(11222): (null):0 ((null)): qt.bluetooth.android: Workaround thread invoked.
    W/BluetoothAdapter(11222): getBluetoothService() called with no BluetoothManagerCallback
    D/BluetoothSocket(11222): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[52]}

    When I deploy on an Android 6 device this is the result:

    I ViewRootImpl: ViewRoot's Touch Event : ACTION_DOWN
    I ViewRootImpl: ViewRoot's Touch Event : ACTION_UP
    D libMGplus.so: (null):0 ((null)): Connesso bluetooth...
    W BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
    W System.err: java.io.IOException: bt socket connect failed
    W System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:390)
    W libMGplus.so: (null):0 ((null)): qt.bluetooth.android: Falling back to workaround.
    W libMGplus.so: (null):0 ((null)): qt.bluetooth.android: Using found rfcomm channel 0
    W libMGplus.so: (null):0 ((null)): qt.bluetooth.android: Invoke Resulted with error.
    W System.err: java.lang.reflect.InvocationTargetException
    W System.err: at java.lang.reflect.Method.invoke(Native Method)
    W System.err: Caused by: java.io.IOException: Invalid RFCOMM channel: 0
    W System.err: at android.bluetooth.BluetoothSocket.<init>(BluetoothSocket.java:189)
    W System.err: at android.bluetooth.BluetoothSocket.<init>(BluetoothSocket.java:165)
    W System.err: at android.bluetooth.BluetoothDevice.createInsecureRfcommSocket(BluetoothDevice.java:1518)
    W System.err: ... 1 more
    W libMGplus.so: (null):0 ((null)): qt.bluetooth.android: Workaround failed

    I find the same result even after the app permissions are manually forced to "Allow" on the phone.
    Is a permissions problem? Where do I'm doing wrong?
    Many thanks in advance

    C 1 Reply Last reply 20 Sept 2016, 13:03
    0
    • C Cornelio
      20 Sept 2016, 10:10

      Hi,
      I developed a Bluetooth application on Qt5.5.1 C++ and QML, Android 5 api 22 and everything worked fine.
      Now I'm trying to test it on Android 6 api 23 but I'm not able to connect to external Bluetooth device.
      This is what I made:

      • Upgrade to Qt5.7
      • Download api 23 SDK
      • In project build settings, Android build APK set to Android-23
      • In AndroidManifest.xml, Minimum required SDK API 16
      • In AndroidManifest.xml, Target SDK API 23
      • In AndroidManifest.xml, android.permission.ACCESS_COARSE_LOCATION
      • In AndroidManifest.xml, android.permission.ACCESS_FINE_LOCATION
      • In AndroidManifest.xml, android.permission.BLUETOOTH
      • In AndroidManifest.xml, android.permission.BLUETOOTH_ADMIN

      The code used to connect to Bluetooth is:

      #if isScan
      void blue::startClient(const QBluetoothServiceInfo &remoteService)
      #else
      void blue::startClient()
      #endif
      {
      if (socket)
      return;

      socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
      socket->setPreferredSecurityFlags(QBluetooth::NoSecurity);
      

      #if isScan
      socket->connectToService(remoteService,QIODevice::ReadWrite);
      #else
      QBluetoothAddress indirizzo("00:12:6F:90:6A:DA");

      #if isAndroid
      btUuid = new QBluetoothUuid;
      btUuid->fromRfc4122("00000000-0000-0000-0000-000000000000");
      socket->connectToService(indirizzo,*btUuid,QIODevice::ReadWrite);
      #else
      socket->connectToService(indirizzo,1,QIODevice::ReadWrite);
      #endif

      #endif
      connect(socket, SIGNAL(readyRead()), this, SLOT(leggiSocket()));
      connect(socket, SIGNAL(connected()), this, SLOT(connesso()));
      connect(socket, SIGNAL(disconnected()), this, SLOT(disconnesso()));
      }

      When I deploy on an Android 5 device with these settings everything works fine and I get this:

      I/InputDispatcher( 906): Delivering touch to (11222): action: 0x0, toolType: 1
      D/ViewRootImpl(11222): ViewPostImeInputStage ACTION_DOWN
      I/InputDispatcher( 906): Delivering touch to (11222): action: 0x1, toolType: 1
      D/libMGplus.so(11222): (null):0 ((null)): Connesso bluetooth...
      D/BluetoothUtils(11222): isSocketAllowedBySecurityPolicy start : device null
      W/BluetoothAdapter(11222): getBluetoothService() called with no BluetoothManagerCallback
      D/BluetoothSocket(11222): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[51]}
      W/System.err(11222): java.io.IOException: bt socket connect failed
      W/System.err(11222): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:402)
      W/libMGplus.so(11222): (null):0 ((null)): qt.bluetooth.android: Falling back to workaround.
      W/libMGplus.so(11222): (null):0 ((null)): qt.bluetooth.android: Cannot determine RFCOMM service channel.
      W/libMGplus.so(11222): (null):0 ((null)): qt.bluetooth.android: Workaround thread invoked.
      W/BluetoothAdapter(11222): getBluetoothService() called with no BluetoothManagerCallback
      D/BluetoothSocket(11222): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[52]}

      When I deploy on an Android 6 device this is the result:

      I ViewRootImpl: ViewRoot's Touch Event : ACTION_DOWN
      I ViewRootImpl: ViewRoot's Touch Event : ACTION_UP
      D libMGplus.so: (null):0 ((null)): Connesso bluetooth...
      W BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
      W System.err: java.io.IOException: bt socket connect failed
      W System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:390)
      W libMGplus.so: (null):0 ((null)): qt.bluetooth.android: Falling back to workaround.
      W libMGplus.so: (null):0 ((null)): qt.bluetooth.android: Using found rfcomm channel 0
      W libMGplus.so: (null):0 ((null)): qt.bluetooth.android: Invoke Resulted with error.
      W System.err: java.lang.reflect.InvocationTargetException
      W System.err: at java.lang.reflect.Method.invoke(Native Method)
      W System.err: Caused by: java.io.IOException: Invalid RFCOMM channel: 0
      W System.err: at android.bluetooth.BluetoothSocket.<init>(BluetoothSocket.java:189)
      W System.err: at android.bluetooth.BluetoothSocket.<init>(BluetoothSocket.java:165)
      W System.err: at android.bluetooth.BluetoothDevice.createInsecureRfcommSocket(BluetoothDevice.java:1518)
      W System.err: ... 1 more
      W libMGplus.so: (null):0 ((null)): qt.bluetooth.android: Workaround failed

      I find the same result even after the app permissions are manually forced to "Allow" on the phone.
      Is a permissions problem? Where do I'm doing wrong?
      Many thanks in advance

      C Offline
      C Offline
      Cornelio
      wrote on 20 Sept 2016, 13:03 last edited by
      #2

      @Cornelio

      QBluetoothAddress indirizzo("00:12:6F:90:6A:DA");

      The problem is solved replacing

      btUuid = new QBluetoothUuid;
      btUuid->fromRfc4122("00000000-0000-0000-0000-000000000000");
      socket->connectToService(indirizzo,*btUuid,QIODevice::ReadWrite);
      

      with

      socket->connectToService(indirizzo,QBluetoothUuid(QBluetoothUuid::SerialPort));
      
      1 Reply Last reply
      1

      1/2

      20 Sept 2016, 10:10

      • Login

      • Login or register to search.
      1 out of 2
      • First post
        1/2
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved