Notice
Recent Posts
Recent Comments
Link
투케이2K
135. (AndroidStudio/android/java) getBluetoothLeScanner 사용해 블루투스 ble 신호 실시간 스캔 실시 본문
Android
135. (AndroidStudio/android/java) getBluetoothLeScanner 사용해 블루투스 ble 신호 실시간 스캔 실시
투케이2K 2021. 5. 7. 18:36/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : AndroidStudio
개발 언어 : java
/* =========================== */
/* =========================== */
[소스 코드]
[AndroidManifest.xml 파일]
<퍼미션 등록 부분>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<액티비티 등록 부분>
<activity
android:name=".A_BluetoothScan"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"/>
[JAVA 파일 : A_BluetoothScan]
//TODO [전역 변수 등록 부분]
BluetoothAdapter mBluetoothAdapter = null;
ArrayList bleList = new ArrayList<>();
//TODO [BluetoothAdapter 객체 매핑 부분]
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
//TODO [BLE 스캐닝 시작 명령 : 필수로 사전, 블루투스 활성 상태 체크 필요함]
public void BleScanStart(){
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_BluetoothScan > BleScanStart() 메소드 : 실시간 비콘 스캐닝 시작]");
Log.w("//===========//","================================================");
Log.d("---","---");
try {
if(bleList != null){
if(bleList.size() > 0){
bleList.clear();
}
}
}
catch (Exception e){
e.printStackTrace();
}
try {
//mBluetoothAdapter.startScan(mLeScanCallback); //TODO 롤리팝 이하
mBluetoothAdapter.getBluetoothLeScanner().startScan(leScanCallback); //TODO 롤리팝 이상
}
catch (Exception e){
e.printStackTrace();
}
}
//TODO [BLE 스캐닝 종료 명령]
public void BleScanStop(){
Log.d("---","---");
Log.e("//===========//","================================================");
Log.d("","\n"+"[A_BluetoothScan > BleScanStop() 메소드 : 실시간 비콘 스캐닝 종료]");
Log.e("//===========//","================================================");
Log.d("---","---");
try {
if(mBluetoothAdapter != null){
//mBluetoothAdapter.stopLeScan(mLeScanCallback); //TODO 롤리팝 이하
mBluetoothAdapter.getBluetoothLeScanner().stopScan(leScanCallback); //TODO 롤리팝 이상
}
}
catch (Exception e){
e.printStackTrace();
}
}
// TODO [블루투스 장치 발견 이벤트 - 롤리팝 이하]
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
runOnUiThread(new Runnable() {
public void run() {
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[A_BluetoothScan > mLeScanCallback() 메소드 : 실시간 BLE 스캔 [롤리팝 이하]]");
Log.d("","\n"+"[BLE 스캔 Name] "+" ["+String.valueOf(device.getName())+"]");
Log.d("","\n"+"[BLE 스캔 Addr] "+" ["+String.valueOf(device.getAddress())+"]");
Log.d("","\n"+"[BLE 스캔 UUID] "+" ["+String.valueOf(device.getUuids())+"]");
Log.d("","\n"+"[BLE 스캔 RSSI] "+" ["+String.valueOf(rssi)+"]");
Log.d("","\n"+"[BLE 스캔 Record] "+" ["+String.valueOf(new String(scanRecord))+"]");
Log.d("//===========//","================================================");
Log.d("---","---");
//TODO [데이터 조합 실시]
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("NAME",String.valueOf(device.getName()));
jsonObject.put("ADDR",String.valueOf(device.getAddress()));
bleList.add(jsonObject.toString());
}
catch (Exception e){
e.printStackTrace();
}
}
});
}
};
// TODO [블루투스 장치 발견 이벤트 - 롤리팝 이상]
private ScanCallback leScanCallback = new ScanCallback() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onScanResult(int callbackType, final ScanResult result) {
super.onScanResult(callbackType, result);
final BluetoothDevice device = result.getDevice();
runOnUiThread(new Runnable() {
public void run() {
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[A_BluetoothScan > leScanCallback() 메소드 : 실시간 BLE 스캔 [롤리팝 이상]]");
Log.d("","\n"+"[BLE 스캔 Name] "+" ["+String.valueOf(device.getName())+"]");
Log.d("","\n"+"[BLE 스캔 Addr] "+" ["+String.valueOf(device.getAddress())+"]");
Log.d("","\n"+"[BLE 스캔 UUID] "+" ["+String.valueOf(device.getUuids())+"]");
Log.d("","\n"+"[BLE 스캔 RSSI] "+" ["+String.valueOf(result.getRssi())+"]");
Log.d("","\n"+"[BLE 스캔 Record] "+" ["+String.valueOf(result.getScanRecord())+"]");
Log.d("//===========//","================================================");
Log.d("---","---");
//TODO [데이터 조합 실시]
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("NAME",String.valueOf(device.getName()));
jsonObject.put("ADDR",String.valueOf(device.getAddress()));
String data = jsonObject.toString();
data = data.replaceAll("[,]", "/");
if(bleList.contains(data) == false){ //TODO 값을 포함하지 않는 경우만 저장
bleList.add(data);
}
}
catch (Exception e){
e.printStackTrace();
}
}
});
}
};
/* =========================== */
/* =========================== */
[결과 출력]
/* =========================== */
반응형
'Android' 카테고리의 다른 글
Comments