질문: JSR 82 Bluetooth API를 프로그래밍으로 어떻게 감지할 수 있습니까?
답변: 아래와 같은 내용으로 답변을 드릴 수 있겠습니다.
import javax.microedition.*; import javax.bluetooth.*; .... String BluetoothVersion = System.getProperty( "bluetooth.api.version" ); boolean isBluetoothHere = false; .... if ( BluetoothVersion != null ) isBluetoothHere = true;
Bluetooth v1.0 장치의 경우 위의 코드의 결과는 항상 다음과 같습니다.
BluetoothVersion = null; isBluetoothHere = false;
즉, 블루투스가 없는 것으로 감지되는 것입니다.
이는 JSR 82 Bluetooth API의 첫번째 버전에서 앞의 코드 샘플이 거짓말을 한다든가 하는 단순한 이유 때문은 아닙니다. 최초의 블루투스 스펙, JSR 82 v1.0a(2002년 4월 5일), 섹션 3.3.4 '장치 속성(Device Properties)'에는 다음과 같이 나와 있습니다. "이 API는 테이블 3-2에 표시된 바와 같이, LocalDevice.getProperty()에 대한 호출에 의해 검색될 수 있는 추가 시스템 속성을 정의합니다."
해당 테이블에는 블루투스가 지원되면 1.0을 반환하는 bluetooth.api.version 속성이 들어 있습니다. v1.0 장치에서 블루투스를 올바로 검색하기 위해서는 다음과 같은 코드가 필요합니다.
import javax.bluetooth.*;
....
String BluetoothVersion = null;
boolean isBluetoothHere = true;
....
try {
Class.forName( "javax.bluetooth.LocalDevice" ); // does the class exist?
BluetoothVersion = javax.bluetooth.LocalDevice.getProperty( "bluetooth.api.version" );
} catch( ClassNotFoundException cnf ) { // class does not exist -> no Bluetooth
isBluetoothHere = false;
}
블루투스가 존재하는지 파악하려면 javax.bluetooth.LocalDevice에 대한 액세스가 필요합니다. Class.forName() 메소드는 런타임 환경에서 클래스의 존재를 테스트하는 데 사용됩니다. 클래스가 발견되면 LocalDevice가 안전하게 액세스되어 블루투스 버전을 조회하게 됩니다.
이처럼 다소 비직관적인 감지 방법이 JSR 82 v1.1(2006년 9월 2일, 유지보수 릴리스 2)에서 변경되었습니다. 3.3.4 섹션이 수정되어 다음과 같은 문장이 추가되었습니다. "또는 Bluetooth API에 정의되고 LocalDevice.getProperty 메소드를 통해 이용할 수 있는 모든 속성들은 반드시 CLDC System.getProperty() 메소드를 통해서도 이용할 수 있어야 합니다."
이 섹션에서는 테이블 3-2의 속성/값 쌍도 정의하고 있습니다.
bluetooth.api.version "1.1" obex.api.version "1.1"
이것은 System.getProperty() 메소드가 예상대로 작동한다는 것을 의미합니다.
JSR 248 MSA의 경우, 블루투스는 조건부로 필수 사항입니다. 즉, 블루투스 하드웨어가 있다면 JSR 82 API가 존재합니다. Bluetooth v1.1은 MSA 및 MSA 서브세트의 일부입니다.
마지막으로 맨 처음 예로든 코드 샘플은 여전히 작동하며 Bluetooth 1.0 장치와 1.1 장치 모두에 대해 정확한 답을 반환합니다. 블루투스가 없을 경우, 결과는 다음과 같습니다.
isBluetoothHere = false; BluetoothVersion = null;
블루투스가 있을 경우, 결과는 다음 중 하나입니다.
isBluetoothHere = true; BluetoothVersion = "1.0";
또는
isBluetoothHere = true; BluetoothVersion = "1.1";
이 글의 영문 원본은
The Bluetooth Conundrum
에서 보실 수 있습니다.
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
한국 썬 마이크로시스템즈 서울시 강남구 삼성동 159-1 무역센터 아셈타워 15-16층(135-798)
Copyright 1994-2008 Sun Microsystems, Inc.
댓글을 달아 주세요