투케이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();
        }
    }

/* =========================== */

/* =========================== */

[결과 출력]

[실시간 비콘 신호 스캔]

[실시간 비콘 신호 활성]

/* =========================== */

/* =========================== */

[파일 첨부 : 전체 소스코드]

비콘스캔 소스코드.txt
0.02MB

 

비콘신호활성 소스코드.txt
0.02MB

/* =========================== */

 

반응형
Comments