블루투스에 대한 궁금증 해결

Java ME 2008/06/09 09:21 Posted by Sun

질문: 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
에서 보실 수 있습니다.

"Java ME" 카테고리의 다른 글

2008/06/09 09:21 2008/06/09 09:21

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/585

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 86 87 88 89 90 91 92 93 94  ... 641  Next ▶