androidpythonbluetoothsl4a

Using SL4A (Python) and bluetooth


Looking for some pointers to get me started.

In my left hand I have a SGS2 running ICS. I've got SL4A up and running and have installed Python 2.6.2

In my right hand I've got a generic chinese bluetooth RFID reader. It works, it reads tags (it has a display) and it's paired with the phone.

I'd like them to play nicely - I want to script something that will keep watching the device and capture the codes as they are transmitted.

I'm no Python expert but I've been using it for some time now for building simple I/O jobs on web servers so I can just about find my way around.

Unusually though, I'm having real problems getting going with this - I can't find any 'getting started with Bluetooth and SL4A' resources to get over that first step of establishing a persistent connection and monitoring output.

Any tips?


Solution

  • it seems that what you need is the bluetooth facade. Here are some commands pertaining to bluetooth that might be helpful to you:

    bluetoothAccept
    bluetoothActiveConnections
    bluetoothConnect
    bluetoothDiscoveryCancel
    bluetoothDiscoveryStart
    bluetoothGetConnectedDeviceName
    bluetoothGetLocalAddress
    bluetoothGetLocalName
    bluetoothGetRemoteDeviceName
    bluetoothGetScanMode
    bluetoothIsDiscovering
    bluetoothMakeDiscoverable
    bluetoothRead
    bluetoothReadBinary
    bluetoothReadLine
    bluetoothReadReady
    bluetoothSetLocalName
    bluetoothStop
    bluetoothWrite
    bluetoothWriteBinary
    checkBluetoothState
    toggleBluetoothState
    


    To call any of these commands you would do something like

    import android
    droid = android.Android()
    #call your commands with droid.bluetoothcommand
    droid.bluetoothDiscoveryStart()
    #or
    droid.toggleBluetoothState(True)
    


    Here is an example of some bluetooth functions, it is included with SL4A, but I added the comments for clarity:

    import android #for bluetooth functions
    import time #for waiting
    
    #get everything setup
    droid = android.Android()
    
    #turn on bluetooth
    droid.toggleBluetoothState(True)
    
    #ask user
    droid.dialogCreateAlert('Be a server?')
    droid.dialogSetPositiveButtonText('Yes')
    droid.dialogSetNegativeButtonText('No')
    droid.dialogShow()
    
    #get user response to question
    result = droid.dialogGetResponse()
    
    #if the result is 'Yes' ('positive') then is_server is set to True
    is_server = result.result['which'] == 'positive'
    
    if is_server:
      #so if is_server is true make the device discoverable and accept the next connection
      droid.bluetoothMakeDiscoverable()
      droid.bluetoothAccept()
    else:
      #attempts to connect to a device over bluetooth, the logic being that if the phone
      #is not receiving a connection then the user is attempting to connect to something
      droid.bluetoothConnect()
    
    
    if is_server:
      result = droid.getInput('Chat', 'Enter a message').result #Gets a message to send 
      #via bluetooth
      if result is None:
        droid.exit() #exit if nothing is in the message
      droid.bluetoothWrite(result + '\n') #otherwise write the message
    
    while True: #receives a message
      message = droid.bluetoothReadLine().result
      droid.dialogCreateAlert('Chat Received', message)
      droid.dialogSetPositiveButtonText('Ok')
      droid.dialogShow()
      droid.dialogGetResponse()
      result = droid.getInput('Chat', 'Enter a message').result
      if result is None:
        break
      droid.bluetoothWrite(result + '\n')
    
    droid.exit()
    


    Finally, for a full list of bluetooth commands, check out http://code.google.com/p/android-scripting/wiki/ApiReference and scroll down to the bluetooth facade. Best of luck!