Android Studio

[Android Studio] bluetooth 사용

nueog 2021. 6. 1. 15:20
반응형

과제에서 블루투스 연결해야해서 블루투스 기능을 깃허브에서 적당한 예제를 찾아서 따와서 고쳐보았다.

https://github.com/kai-morich/SimpleBluetoothLeTerminal

 

kai-morich/SimpleBluetoothLeTerminal

Android terminal app for Bluetooth LE devices using custom serial profiles - kai-morich/SimpleBluetoothLeTerminal

github.com

요걸 활용해서 개발해보았다.

 

그리고 여기서 제공하지 않는 새로고침/삭제/끊겼을시 자동연결 등의 기능을 새롭게 만들어봤다.

 

1. 끊겼을 시 자동연결

connect()함수로 블루투스 연결을 하는데 onSerialconnecterror()라는 함수와 onSerialIoError()라는 함수에 try~catch 문에 exception이 발생했을 경우 connect()함수를 불러와서 끊겼다가 다시 가까이 와서 연결가능한 상태가 되었을때 자동연결되도록 했다.

 

runOnUiThread(this::connect);

 

2. 새로고침

reble()이라는 함수를 새로 만들어서 서비스를 끊었다가 다시 시작하는 것으로 해결했다.

코드는 다음과 같다.

public void reBle(){
	if(isBind) {
		try {
			unbindService(this);
			isBind = false;
		}catch(Exception ignored) {
			Log.d("unbindservice", String.valueOf(ignored));
		}
	}
	stopService(new Intent(getApplicationContext(), SerialService.class));

	startService(new Intent(this, SerialService.class));

	isBind = bindService(new Intent(this, SerialService.class), this, Context.BIND_AUTO_CREATE);
	BluetoothFragment.rebleFlag = true;
}

 

3. 삭제

삭제 역시 서비스를 중단하는 것으로 해결했다.

private boolean bleDelFlag = false;
public void bleDel(){
	if(isBind){
		try {
			unbindService(this);
			isBind = false;
			bleDelFlag = true;
			sfDeviceInfoEditor.putBoolean("bleDelFlag", bleDelFlag);
			sfDeviceInfoEditor.commit();
		}
		catch(Exception ignored) {
			Log.d("unbindservice", String.valueOf(ignored));
		}
		isBind = false;
	}
	if(connected == Connected.True) {
		disconnect();
	}
	
	bleState.setProgress(0);
	blueToothBtn.setBackgroundResource(R.drawable.ble_off);

	//bleService.stopService(new Intent(getApplicationContext(), SerialService.class));
	stopService(new Intent(getApplicationContext(), SerialService.class));
}

 

끝!

반응형