일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 안드로이드 푸시
- 안드로이드
- C#
- html5
- dovecot
- mysql
- chart.js
- 안드로이드 gcm
- 폼메일
- soundpool
- Android
- FCM
- roundcube
- javascript
- php 시큐어코딩
- 자동 생성
- Mail Server
- xe
- 안드로이드 푸쉬
- 설치
- php 취약점
- C# IO
- android 효과음
- UML
- WebView
- PHP
- not working
- curl
- 우분투
- 자바스크립트
- Today
- Total
그러냐
안드로이드 블루투스 신호강도 측정하기 본문
출처 : http://zxcyc.egloos.com/viewer/175671
블루투스에 신호강도 (RSSI) 측정법이 있어 작성합니다.
WI-FI에는 접속을 할 경우 흔히 게이지를 표시가 되어 누구나 알고 있지만,
잘쓰지 않는 블루투스에도 측정이 가능합니다.
간단하게 안드로이드 SDK에 있는 Bluetooth Chat 샘플소스로 살펴봤습니다.
이클립스에 File > New > Project 를 선택합니다.
샘플 프로젝트를 선택 후 안드로이드 버전을 선택하시고 다음을 누릅니다. (4.0 버전을 선택 했습니다.)
BluetoothChat 선택 후 Finish 선택.
프로젝트에 보시면 src에 파일 3개가 있는데 이 중 DeviceListActivity.java 파일이 Bluetooth Scan을 담당하는 파일입니다.
우선 IntentFilter 등록 하는 부분은 onCreate에 있습니다.
1
2
3
4
5
6
7
8
9 |
// Register for broadcasts when a device is discovered
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, filter);
// Register for broadcasts when discovery has finished
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver, filter);
|
그리고 아래로 내려오시면 Receiver가 있는데, BluetoothDevice.ACTION_FOUND.equals(action) if문에
Scan으로 발견한 deviceName()과 deviceAddress()를 List에 추가 하는 부분에
신호 측정과 관련된 소스를 추가 합니다.
1
2
3
4
5
6
7 |
short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE);
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress() + " (RSSI : "+rssi +"dBm)");
}
|
그리고 실행합니다.
메뉴 > Connect a device 선택 (두개가 동일함)
Scan for devices 버튼 터치
아래와 같은 결과가 나옵니다.
아 그리고 실행하실때
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
12-23 21:30:56.686: E/AndroidRuntime(7069): FATAL EXCEPTION: main
12-23 21:30:56.686: E/AndroidRuntime(7069): java.lang.NullPointerException
12-23 21:30:56.686: E/AndroidRuntime(7069): at com.example.android.BluetoothChat.BluetoothChat.setStatus(BluetoothChat.java:235)
12-23 21:30:56.686: E/AndroidRuntime(7069): at com.example.android.BluetoothChat.BluetoothChat.access$4(BluetoothChat.java:233)
12-23 21:30:56.686: E/AndroidRuntime(7069): at com.example.android.BluetoothChat.BluetoothChat$2.handleMessage(BluetoothChat.java:260)
12-23 21:30:56.686: E/AndroidRuntime(7069): at android.os.Handler.dispatchMessage(Handler.java:99)
12-23 21:30:56.686: E/AndroidRuntime(7069): at android.os.Looper.loop(Looper.java:137)
12-23 21:30:56.686: E/AndroidRuntime(7069): at android.app.ActivityThread.main(ActivityThread.java:4950)
12-23 21:30:56.686: E/AndroidRuntime(7069): at java.lang.reflect.Method.invokeNative(Native Method)
12-23 21:30:56.686: E/AndroidRuntime(7069): at java.lang.reflect.Method.invoke(Method.java:511)
12-23 21:30:56.686: E/AndroidRuntime(7069): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997)
12-23 21:30:56.686: E/AndroidRuntime(7069): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
12-23 21:30:56.686: E/AndroidRuntime(7069): at dalvik.system.NativeStart.main(Native Method)
|
이런 오류가 난다면, BluetoothChat.java 파일의
private final void setStatus(int resId) {
//final ActionBar actionBar = getActionBar();
//actionBar.setSubtitle(resId);
}private final void setStatus(CharSequence subTitle) {
// final ActionBar actionBar = getActionBar();
//actionBar.setSubtitle(subTitle);
}
요 두함수에 주석처리하면 실행 됩니다. (먼가 설정이 필요한 듯 합니다.)
'android' 카테고리의 다른 글
안드로이드 service에서 포스트로 데이터 주고 받기 httppost 통신 (0) | 2016.01.28 |
---|---|
안드로이드 service에서 alert dialog 띄우기 (0) | 2016.01.28 |
sendEmptyMessageDelayed 핸들러 재귀호출 (0) | 2016.01.28 |
Handler와 AlarmManager를 통한 Timer 작업 처리 (0) | 2016.01.28 |
안드로이드 boot 실행 (0) | 2016.01.28 |