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));
}
끝!
반응형