beiliubei/BlueCon


BlueCon - Android BT SPP Server & Client Library

Download


Step 1. Add the JitPack repository to your build file

Add it in your root settings.gradle at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url 'https://jitpack.io' }
		}
	}

Add it in your settings.gradle.kts at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url = uri("https://jitpack.io") }
		}
	}

Add to pom.xml

	<repositories>
		<repository>
		    <id>jitpack.io</id>
		    <url>https://jitpack.io</url>
		</repository>
	</repositories>

Add it in your build.sbt at the end of resolvers:

 
    resolvers += "jitpack" at "https://jitpack.io"
        
    

Add it in your project.clj at the end of repositories:

 
    :repositories [["jitpack" "https://jitpack.io"]]
        
    

Step 2. Add the dependency

	dependencies {
		implementation 'com.github.beiliubei:BlueCon:v1.0'
	}
	dependencies {
		implementation("com.github.beiliubei:BlueCon:v1.0")
	}
	<dependency>
	    <groupId>com.github.beiliubei</groupId>
	    <artifactId>BlueCon</artifactId>
	    <version>v1.0</version>
	</dependency>

                            
    libraryDependencies += "com.github.beiliubei" % "BlueCon" % "v1.0"
        
        

                            
    :dependencies [[com.github.beiliubei/BlueCon "v1.0"]]
        
        

Readme


BlueCon

Download

BlueCon is SPP Server & Client Library for Android.

this Service is support Android 4.4 and grater environment.

Installation

if you use jcenter repository, just add dependency your app.

dependencies {
    ...
    compile 'me.kudryavka:bluecon:0.2.1'
    ...
}

Usage

just simple.

Add permission in your manifest file for using BLUETOOTH like this.

<uses-permission android:name="android.permission.BLUETOOTH" />

Client

as a Service

for using client service, Using SPPClientService. Define Binder and Service connect condition.

private SPPClientService.SPPBinder svBinder;
private boolean isSVConned;

Bind service to Application's context.

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    bindService(new Intent(this, SPPClientService.class), serviceConnection, BIND_AUTO_CREATE);
    ...
}

Unbind service when app is dead

@Override
protected void onDestroy() {
    ... 
    unbindService(serviceConnection);
    ...
}

Make ServiceConnection and add SPPLietner to the Service.

public ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        Log.e("SERVICE", "CONNNECTED");
        svBinder = (SPPClientService.SPPBinder)service;
        isSVConned = true;
        svBinder.addSPPListener(new SPPListener() {
            @Override
            public void onPacketReceived(String address, byte[] packet) {
                // Received packets
            }

            @Override
            public void onPacketSended(String address, byte[] packet) {
                // Sended packets
            }

            @Override
            public void onBluetoothDeviceConnected(String name, String address) {
                // on bluetooth device connected
            }

            @Override
            public void onBluetoothDeviceConnecting(@Nullable String name) {
                // on connecting to device
            }

            @Override
            public void onBluetoothDeviceDisconnected(@Nullable String name) {
                // on disconnected from device
            }

            @Override
            public void onBluetoothDisabled() {
                // if bluetooth is off
            }

            @Override
            public void onBluetoothNotSupported() {
                // Android device has not bluetooth module
            }
        });
    }
    
    @Override
    public void onServiceDisconnected(ComponentName name) {
        Log.e("SERVICE", "DISCONNNECTED");
        isSVConned = false;
    }
};

You can get Paird device list.

ArrayList<BluetoothDevice> devices = svBinder.getPairedDevices();

You can connect to device using BluetoothDevice or Device's MAC address

svBinder.connect(BluetoothDevice device);
svBinder.connect(String address);

Sending a packet

svBinder.sendPacket(byte[] data)

As a instance

Get Controller's Instance

SPPClientController sppClientController = SPPClientController.getInstance(getApplicationContext());

Add SPPListener to Instance

sppClientController.addSPPListener(new SPPListener() {
    @Override
    public void onPacketReceived(String address, byte[] packet) {
        // Received packets
    }

    @Override
    public void onPacketSended(String address, byte[] packet) {
        // Sended packets
    }

    @Override
    public void onBluetoothDeviceConnected(String name, String address) {
        // on bluetooth device connected
    }

    @Override
    public void onBluetoothDeviceConnecting(@Nullable String name) {
        // on connecting to device
    }

    @Override
    public void onBluetoothDeviceDisconnected(@Nullable String name) {
        // on disconnected from device
    }

    @Override
    public void onBluetoothDisabled() {
        // if bluetooth is off
    }

    @Override
    public void onBluetoothNotSupported() {
        // Android device has not bluetooth module
    }
});

You can get Paird device list.

ArrayList<BluetoothDevice> devices = sppClientController.getPairedDevices();

You can connect to device using BluetoothDevice or Device's MAC address

sppClientController.connect(BluetoothDevice device);
sppClientController.connect(String address);

Sending a packet

sppClientController.sendPacket(byte[] data)

Server

as a Service

for using server service, Using SPPServerService. Define Binder and Service connect condition.

private SPPServerService.SPPBinder svBinder;
private boolean isSVConned;

Bind service to Application's context.

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    bindService(new Intent(this, SPPServerService.class), serviceConnection, BIND_AUTO_CREATE);
    ...
}

Unbind service when app is dead

@Override
protected void onDestroy() {
    ... 
    unbindService(serviceConnection);
    ...
}

Make ServiceConnection and add SPPLietner to the Service.

public ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        Log.e("SERVICE", "CONNNECTED");
        svBinder = (SPPServerController.SPPBinder)service;
        isSVConned = true;
        svBinder.addSPPListener(new SPPListener() {
            @Override
            public void onPacketReceived(String address, byte[] packet) {
                // Received packets
            }

            @Override
            public void onPacketSended(String address, byte[] packet) {
                // Sended packets
            }

            @Override
            public void onBluetoothDeviceConnected(String name, String address) {
                // on bluetooth device connected
            }

            @Override
            public void onBluetoothDeviceConnecting(@Nullable String name) {
                // on connecting to device
            }

            @Override
            public void onBluetoothDeviceDisconnected(@Nullable String name) {
                // on disconnected from device
            }

            @Override
            public void onBluetoothDisabled() {
                // if bluetooth is off
            }

            @Override
            public void onBluetoothNotSupported() {
                // Android device has not bluetooth module
            }
        });
    }
    
    @Override
    public void onServiceDisconnected(ComponentName name) {
        Log.e("SERVICE", "DISCONNNECTED");
        isSVConned = false;
    }
};

You can get Connecte device list.

ArrayList<BluetoothDevice> devices = svBinder.getConnectedDevice()

You can start server with server's name, inputStream buffersize, server mode.

SERVER_MODE{SINGLE_CONNECTION, MULTIPLE_CONNECTION}
svBinder.startServer(String serverName, int bufferSize, ENUMS.SERVER_MODE serverMode);

Sending a packet

svBinder.sendPacket(String addressbyte[] data);

or broadcast

svBinder.broadcastPacket(byte[] data);

As a instance

Get Controller's Instance

SPPServerController sppServerController = SPPServerController.getInstance(getApplicationContext());

Add SPPListener to Instance

sppServerController.addSPPListener(new SPPListener() {
    @Override
    public void onPacketReceived(String address, byte[] packet) {
        // Received packets
    }

    @Override
    public void onPacketSended(String address, byte[] packet) {
        // Sended packets
    }

    @Override
    public void onBluetoothDeviceConnected(String name, String address) {
        // on bluetooth device connected
    }

    @Override
    public void onBluetoothDeviceConnecting(@Nullable String name) {
        // on connecting to device
    }

    @Override
    public void onBluetoothDeviceDisconnected(@Nullable String name) {
        // on disconnected from device
    }

    @Override
    public void onBluetoothDisabled() {
        // if bluetooth is off
    }

    @Override
    public void onBluetoothNotSupported() {
        // Android device has not bluetooth module
    }
});

You can get Connecte device list.

ArrayList<BluetoothDevice> devices = sppServerController.getConnectedDevice()

You can start server with server's name, inputStream buffersize, server mode.

SERVER_MODE{SINGLE_CONNECTION, MULTIPLE_CONNECTION}
sppServerController.startServer(String serverName, int bufferSize, ENUMS.SERVER_MODE serverMode);

Sending a packet

sppServerController.sendPacket(String addressbyte[] data);

or broadcast

sppServerController.broadcastPacket(byte[] data);