Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Bluetooth example with Kivy. A more fleshed-out example here: https://github.com/tito/android-demo. A more modern way of doing it: https://github.com/kivy/plyer. And this guy used Kivy to connect to an Arduino: https://github.com/brean/arduino-kivy-bluetooth. Native Kivy code (?): https://groups.google.com/d/msg/kivy-users/n_cMbFzf_1A/5edKgQgycx0J
# Same as before, with a kivy-based UI
'''
Bluetooth/Pyjnius example
=========================
This was used to send some bytes to an arduino via bluetooth.
The app must have BLUETOOTH and BLUETOOTH_ADMIN permissions (well, i didn't
tested without BLUETOOTH_ADMIN, maybe it works.)
Connect your device to your phone, via the bluetooth menu. After the
pairing is done, you'll be able to use it in the app.
'''
from jnius import autoclass
BluetoothAdapter = autoclass('android.bluetooth.BluetoothAdapter')
BluetoothDevice = autoclass('android.bluetooth.BluetoothDevice')
BluetoothSocket = autoclass('android.bluetooth.BluetoothSocket')
UUID = autoclass('java.util.UUID')
def get_socket_stream(name):
paired_devices = BluetoothAdapter.getDefaultAdapter().getBondedDevices().toArray()
socket = None
for device in paired_devices:
if device.getName() == name:
socket = device.createRfcommSocketToServiceRecord(
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"))
recv_stream = socket.getInputStream()
send_stream = socket.getOutputStream()
break
socket.connect()
return recv_stream, send_stream
if __name__ == '__main__':
kv = '''
BoxLayout:
Button:
text: '0'
on_release: app.reset([b1, b2, b3, b4, b5])
ToggleButton:
id: b1
text: '1'
on_release: app.send(self.text)
ToggleButton:
id: b2
text: '2'
on_release: app.send(self.text)
ToggleButton:
id: b3
text: '3'
on_release: app.send(self.text)
ToggleButton:
id: b4
text: '4'
on_release: app.send(self.text)
ToggleButton:
id: b5
text: '5'
on_release: app.send(self.text)
'''
from kivy.lang import Builder
from kivy.app import App
class Bluetooth(App):
def build(self):
self.recv_stream, self.send_stream = get_socket_stream('linvor')
return Builder.load_string(kv)
def send(self, cmd):
self.send_stream.write('{}\n'.format(cmd))
self.send_stream.flush()
def reset(self, btns):
for btn in btns:
btn.state = 'normal'
self.send('0\n')
Bluetooth().run()
@rupikat
Copy link

rupikat commented Dec 8, 2018

How to install jnius on windows?

@ManasaJaddu
Copy link

ManasaJaddu commented May 1, 2019

The above code is not working in android mobile.I build the apk using buildozer in linux.

@piyush05124
Copy link

piyush05124 commented May 25, 2020

How to install jnius on windows?

using pip install jnius

@Chri5G
Copy link

Chri5G commented Nov 18, 2020

JAVA error

@xloem
Copy link

xloem commented Dec 15, 2020

prototype BLE interface in kivy at https://github.com/xloem/kivy-gattlib . gattlib is a c-based interface for ble on desktop. i just stumbled on it first kinda randomly when i needed to pick an interface.

@wladek1909
Copy link

wladek1909 commented Mar 31, 2021

Hi man, i have one problem. When i run app in android , app crashed. In adb logcat i have error
**AttributeError: 'Nonetype' object has no attribute 'connect'**
That is error on this line ? **socket = None**
Please help. Some fix ?

@Chri5G
Copy link

Chri5G commented Apr 6, 2021

You need to change the socket to rfcomm
I used my laptop with regular bluetooth but for android you will need ble and different socket

@xloem
Copy link

xloem commented Apr 6, 2021

Note: https://github.com/hbldh/bleak has an open pull request with example code for ble android support at hbldh/bleak#422

@ps2229
Copy link

ps2229 commented Mar 30, 2022

You need to change the socket to rfcomm
I used my laptop with regular bluetooth but for android you will need ble and different socket

Were you able to solve this error? I am stuck in the same situation with no avail.

@NewAge12
Copy link

NewAge12 commented Apr 2, 2022

Why am I getting jnius.jnius.JavaException: JVM exception occurred: read failed, socket might closed or timeout, read ret: -1 java.io.IOException

@imvickykumar999
Copy link

imvickykumar999 commented May 28, 2022

I am getting this error.

Traceback (most recent call last):
  File "C:\Users\Vicky\Desktop\Repository\Android-with-Kivy-Framework\Examples\bluetooth_.py", line 15, in <module>
    BluetoothAdapter = autoclass('android.bluetooth.BluetoothAdapter')
  File "C:\Users\Vicky\AppData\Local\Programs\Python\Python39\lib\site-packages\jnius\reflect.py", line 211, in autoclass
    c = find_javaclass(clsname)
  File "jnius\jnius_export_func.pxi", line 26, in jnius.find_javaclass
  File "jnius\jnius_utils.pxi", line 91, in jnius.check_exception
jnius.JavaException: JVM exception occurred: android/bluetooth/BluetoothAdapter java.lang.NoClassDefFoundError

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment