반응형
어플을 실행하면 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 |