Notice
Recent Posts
Recent Comments
Link
투케이2K
138. (AndroidStudio/android/java) altbeacon 라이브러리 사용해 실시간 비콘 신호 스캔 및 비콘 신호 활성 실시 본문
Android
138. (AndroidStudio/android/java) altbeacon 라이브러리 사용해 실시간 비콘 신호 스캔 및 비콘 신호 활성 실시
투케이2K 2021. 5. 11. 16:00/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : AndroidStudio
개발 언어 : java
/* =========================== */
/* =========================== */
[소스 코드]
[필요 퍼미션]
<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"/>
[필요 라이브러리]
implementation 'org.altbeacon:android-beacon-library:2.+'
//noinspection GradleCompatible
implementation 'com.android.support:localbroadcastmanager:28.0.0'
[실시간 비콘 스캔 코드]
Handler BeaconHandler = new Handler() {
public void handleMessage(Message msg) {
try {
//TODO [기존에 저장된 배열 데이터 초기화 실시]
if(beaconFormatList.size() > 0){
beaconFormatList.clear();
}
//TODO [for 문 사용해 실시간 스캔된 비콘 개별 정보 확인]
for(Beacon beacon : beaconList){
/** TODO [비콘 스캔 정보 추출 참고]
Log.d("//===========//","================================================");
Log.d("","\n"+"[비콘 스캔 Name] "+" ["+String.valueOf(beacon.getBluetoothName())+"]");
Log.d("","\n"+"[비콘 스캔 MAC] "+" ["+String.valueOf(beacon.getBluetoothAddress())+"]");
Log.d("","\n"+"[비콘 스캔 UUID] "+" ["+String.valueOf(beacon.getId1().toString())+"]");
Log.d("","\n"+"[비콘 스캔 Major] "+" ["+String.valueOf(beacon.getId2().toString())+"]");
Log.d("","\n"+"[비콘 스캔 Minor] "+" ["+String.valueOf(beacon.getId3().toString())+"]");
Log.d("","\n"+"[비콘 스캔 MPower] "+" ["+String.valueOf(beacon.getTxPower())+"]");
Log.d("","\n"+"[비콘 스캔 RSSI] "+" ["+String.valueOf(beacon.getRssi())+"]");
Log.d("","\n"+"[비콘 스캔 ServiceUuid] "+" ["+String.valueOf(beacon.getServiceUuid())+"]");
Log.d("","\n"+"[비콘 스캔 beacon] "+" ["+String.valueOf(beacon.toString())+"]");
Log.d("//===========//","================================================");
*/
//TODO [스캔한 비콘 정보 포맷 실시]
JSONObject jsonBeacon = new JSONObject();
jsonBeacon.put("UUID", String.valueOf(beacon.getBluetoothName()));
jsonBeacon.put("MAJOR", String.valueOf(beacon.getId2().toString()));
jsonBeacon.put("MINOR", String.valueOf(beacon.getId3().toString()));
//TODO [배열에 데이터 저장 실시]
beaconFormatList.add(jsonBeacon.toString());
}//TODO [for 문 종료]
//TODO [실시간 스캔된 비콘 정보 확인 실시]
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[비콘 스캔 실행 횟수] "+" ["+String.valueOf(beaconScanCount)+"]");
Log.d("","\n"+"[비콘 스캔 개수 확인] "+" ["+String.valueOf(beaconFormatList.size())+"]");
Log.d("","\n"+"[비콘 스캔 정보 확인] "+" ["+String.valueOf(beaconFormatList.toString())+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
//TODO [중간 필요한 로직 처리 실시]
//TODO [비콘 스캔 카운트 증가]
beaconScanCount ++;
}
catch (Exception e){
e.printStackTrace();
}
//TODO [자기 자신을 1초마다 호출]
BeaconHandler.sendEmptyMessageDelayed(0, 1000);
}
};
[실시간 비콘 신호 활성 코드]
//TODO [실시간 비콘 신호 활성 시작]
public void BeaconSendStart(final String UUID, final String MAJOR, final String MINOR){
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[BeaconSend > BeaconScanStart() 메소드 : 실시간 비콘 신호 활성 수행]");
Log.d("//===========//","================================================");
Log.d("---","---");
try {
//TODO [beacon 객체 설정 실시]
beacon = new Beacon.Builder()
.setId1(UUID.toLowerCase()) //TODO [UUID 지정]
.setId2(MAJOR) //TODO [major 지정]
.setId3(MINOR) //TODO [minor 지정]
.setManufacturer(0x004c) //TODO [제조사 지정 : IOS 호환]
//.setManufacturer(0x0118) // [제조사 지정]
.setTxPower(-59) //TODO [신호 세기]
//.setTxPower(59) //[신호 세기]
.setDataFields(Arrays.asList(new Long[]{0L})) //TODO [레이아웃 필드]
.build();
//TODO [레이아웃 지정 : IOS 호환 (ibeacon)]
beaconParser = new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
//beaconParser = new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
//TODO [비콘 신호 활성 상태 확인 실시]
beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() {
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
super.onStartSuccess(settingsInEffect);
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[BeaconSend > BeaconScanStart() 메소드 : 실시간 비콘 신호 활성 성공]");
Log.d("","\n"+"[UUID : "+String.valueOf(UUID)+"]");
Log.d("","\n"+"[MAJOR : "+String.valueOf(MAJOR)+"]");
Log.d("","\n"+"[MINOR : "+String.valueOf(MINOR)+"]");
Log.d("","\n"+"[시작 시간 : "+String.valueOf(getNowTime())+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
}
@Override
public void onStartFailure(int errorCode) {
super.onStartFailure(errorCode);
Log.d("---","---");
Log.e("//===========//","================================================");
Log.d("","\n"+"[BeaconSend > BeaconScanStart() 메소드 : 실시간 비콘 신호 활성 실패]");
Log.d("","\n"+"[UUID : "+String.valueOf(UUID)+"]");
Log.d("","\n"+"[MAJOR : "+String.valueOf(MAJOR)+"]");
Log.d("","\n"+"[MINOR : "+String.valueOf(MINOR)+"]");
Log.d("","\n"+"[Error : "+String.valueOf(errorCode)+"]");
Log.e("//===========//","================================================");
Log.d("---","---");
}
});
}
catch (Exception e){
e.printStackTrace();
}
}
/* =========================== */
/* =========================== */
[결과 출력]
[실시간 비콘 신호 스캔]
[실시간 비콘 신호 활성]
/* =========================== */
/* =========================== */
[파일 첨부 : 전체 소스코드]
/* =========================== */
반응형
'Android' 카테고리의 다른 글
Comments