# BluetoothChatCompose01 **Repository Path**: suncunlu2/BluetoothChatCompose01 ## Basic Information - **Project Name**: BluetoothChatCompose01 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-30 - **Last Updated**: 2023-12-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BluetoothChatCompose01 ## Developed by Mahdi Razzaghi Ghaleh ## Still working on it... #### **Simple chat application by bluetooth socket in jetpack compose and MVI Architecture, Which is not finished yet since it has some small issues** ## Give a Star! ⭐ If you like or are using this project to learn or start your solution, please give it a star. Thanks! | Main Screen | Chat Screen | | :---: | :---: | | | | ### BluetoothAdapter: **Represents the local device Bluetooth adapter.** The BluetoothAdapter lets you perform fundamental Bluetooth tasks, such as initiate device discovery, query a list of bonded (paired) devices, instantiate a BluetoothDevice using a known MAC address, and create a BluetoothServerSocket to listen for connection requests from other devices, and start a scan for Bluetooth LE devices. - To get a BluetoothAdapter representing the local Bluetooth adapter, call the BluetoothManager#getAdapter function on BluetoothManager. **On JELLY_BEAN_MR1 and below you will need to use the static getDefaultAdapter() method instead.** **Fundamentally, this is your starting point for all Bluetooth actions.** - Once you have the local adapter, you can get a set of BluetoothDevice objects representing all paired devices with getBondedDevices(); start device discovery with startDiscovery(); or create a BluetoothServerSocket to listen for incoming RFComm connection requests with listenUsingRfcommWithServiceRecord(java.lang.String, java.util.UUID); listen for incoming L2CAP Connection-oriented Channels (CoC) connection requests with listenUsingL2capChannel(); or start a scan for Bluetooth LE devices with startLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback). **This class is thread safe.** ### BluetoothSocket: **A connected or connecting Bluetooth socket.** - The interface for Bluetooth Sockets is similar to that of TCP sockets: Socket and ServerSocket. - On the server side, use a BluetoothServerSocket to create a listening server socket. - When a connection is accepted by the BluetoothServerSocket, it will return a new BluetoothSocket to manage the connection. - On the client side, use a single BluetoothSocket to both initiate an outgoing connection and to manage the connection. - The most common type of Bluetooth socket is RFCOMM, which is the type supported by the Android APIs. - RFCOMM is a connection-oriented, streaming transport over Bluetooth. It is also known as the Serial Port Profile (SPP). - To create a BluetoothSocket for connecting to a known device, use BluetoothDevice.createRfcommSocketToServiceRecord(). - Then call connect() to attempt a connection to the remote device. - This call will block until a connection is established or the connection fails. - To create a BluetoothSocket as a server (or "host"), see the BluetoothServerSocket documentation. - Once the socket is connected, whether initiated as a client or accepted as a server, open the IO streams by calling getInputStream() and getOutputStream() in order to retrieve InputStream and OutputStream objects, respectively, which are automatically connected to the socket. **BluetoothSocket is thread safe.** - In particular, close() will always immediately abort ongoing operations and close the socket. ### BluetoothServerSocket: **A listening Bluetooth socket.** - The interface for Bluetooth Sockets is similar to that of TCP sockets: Socket and ServerSocket. - On the server side, use a BluetoothServerSocket to create a listening server socket. - When a connection is accepted by the BluetoothServerSocket, it will return a new BluetoothSocket to manage the connection. On the client side, use a single BluetoothSocket to both initiate an outgoing connection and to manage the connection. - For Bluetooth BR/EDR, the most common type of socket is RFCOMM, which is the type supported by the Android APIs. RFCOMM is a connection-oriented, streaming transport over Bluetooth BR/EDR. - It is also known as the Serial Port Profile (SPP). - To create a listening BluetoothServerSocket that's ready for incoming Bluetooth BR/EDR connections, use BluetoothAdapter.listenUsingRfcommWithServiceRecord(). - For Bluetooth LE, the socket uses LE Connection-oriented Channel (CoC). - LE CoC is a connection-oriented, streaming transport over Bluetooth LE and has a credit-based flow control. - Correspondingly, use BluetoothAdapter.listenUsingL2capChannel() to create a listening BluetoothServerSocket that's ready for incoming Bluetooth LE CoC connections. For LE CoC, you can use getPsm() to get the protocol/service multiplexer (PSM) value that the peer needs to use to connect to your socket. After the listening BluetoothServerSocket is created, call accept() to listen for incoming connection requests. - This call will block until a connection is established, at which point, it will return a BluetoothSocket to manage the connection. Once the BluetoothSocket is acquired, it's a good idea to call close() on the BluetoothServerSocket when it's no longer needed for accepting connections. - Closing the BluetoothServerSocket will not close the returned BluetoothSocket. **BluetoothServerSocket is thread safe.** - In particular, close() will always immediately abort ongoing operations and close the server socket. #### **Ideas**: https://developer.android.com