본문 바로가기
Study/Android

nRF Beacon 앱 분석 - beacon 추가하기!!

by Answer Choi 2015. 3. 20.
반응형


어플을 실행하면 SplashscreenActivity가 1초간 나타난 후 


MainActivity로 넘어갑니다.


MainActivity는 총 3개의 fragment로 이루어져 있으며, 


BEACONS, UPDATE, DFU가 있습니다.


아직 전체적으로 다보지는 못했지만, 


BEACONS쪽을 보면 이렇습니다.


MAINActivity


onCreate


DEVICE가 BLE를 지원하는지 여부 확인


1
2
3
4
5
6
7
8
9
if (!ensureBleExists())
    finish();
private boolean ensureBleExists() {
    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
        Toast.makeText(this, R.string.no_ble, Toast.LENGTH_LONG).show();
        return false;
    }
    return true;
}
cs


Toolbar, slidingtab, viewpager등의 custom view를 만들어준 후, action button인 fab_add를 추가합니다.


onResume


DEVICE의 블루투스가 켜지있는지 확인


1
2
3
4
5
6
7
8
9
10
11
12
13
if (!isBleEnabled())
    enableBle();
 
private boolean isBleEnabled() {
    final BluetoothManager bm = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
    final BluetoothAdapter ba = bm.getAdapter();
    return ba != null && ba.isEnabled();
}
   
private void enableBle() {
    final Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
}
cs


onActivityResult


블루투스 enable요청시 결과받아오는 곳


1
2
3
4
5
6
7
8
9
10
11
12
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    switch (requestCode) {
    case REQUEST_ENABLE_BT:
        if (resultCode == RESULT_OK) {
        } else
            finish();
        break;
    default:
        super.onActivityResult(requestCode, resultCode, data);
    }
}
cs



fab_add(beacon 추가버튼) 눌렀을때


1
2
3
4
5
6
7
8
9
10
11
12
13
fabAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
    if (mBeaconsFragment != null)
        mBeaconsFragment.onAddOrEditRegion();
    }
});
public void onAddOrEditRegion() {
    stopScanning();
    final BeaconScannerFragment fragment = mScannerFragment = new BeaconScannerFragment();
    fragment.show(getChildFragmentManager(), SCANNER_FRAGMENT);
    mServiceConnection.startRangingBeaconsInRegion(BeaconRegion.ANY_UUID, fragment);
}
cs


이 부분에서 beacon을 찾습니다.



1
2
3
4
5
6
7
8
9
10
11
12
public void onBeaconsInRegion(final Beacon[] beacons, final BeaconRegion region) {
    if (!mCompleted) {
        for (final Beacon beacon : beacons)
            if (Proximity.IMMEDIATE == beacon.getProximity()) {
                mCompleted = true;
                final BeaconsFragment parentFragment = (BeaconsFragment) getParentFragment();
                parentFragment.onScannerClosedWithResult(beacon);
                dismiss();
                break;
            }
    }
}
cs


beacon의 proximity가 immediate이면 리스트에 추가하고, progress를 종료하게 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void onScannerClosedWithResult(final Beacon beacon) {
    mServiceConnection.stopRangingBeaconsInRegion(mScannerFragment);
    mScannerFragment = null;
 
    final Cursor cursor = mDatabaseHelper.findRegionByBeacon(beacon);
    try {
        long id;
        if (cursor.moveToNext()) {
            // Update beacon
            id = cursor.getLong(0 /* _ID */);
        } else {
            // Add new beacon
            id = mDatabaseHelper.addRegion(beacon, getString(R.string.default_beacon_name), BeaconContract.EVENT_GET_NEAR, BeaconContract.ACTION_MONA_LISA, null);
        }
        onEditRegion(id);
    } finally {
        cursor.close();
    }
}
cs



여기서 DB에 가져온 beacon의 정보와 default 이름, 이벤트조건, 이벤트액션등을 입력해 줍니다.





반응형

'Study > Android' 카테고리의 다른 글

좌표계 변환하기  (0) 2015.04.28
nRF Beacon 앱 분석 - beacon 정보받아오기!!  (0) 2015.03.23
android imageview  (0) 2015.02.12
android의 uri값 전달하기  (4) 2015.02.12
android studio에 daum map(so라이브러리) 적용  (8) 2015.02.12

인기글