자바 ME 에서 블 루 투 스 를 통 해 장 치 를 발견 하고 파일 을 전송 합 니 다.
자바 ME 장치 에서 블 루 투 스 프로그램 을 실행 하 는 첫 번 째 단계 중 하 나 는 발견 과정 (discovery process) 이다.한 마디 로 블 루 투 스 가 있 는 장치 가 서로 서 로 를 찾 는 과정 을 발견 하고 지원 할 수 있 는 서 비 스 를 함께 찾 는 것 이다.다음 단 계 는 이 두 장치 사이 에서 데 이 터 를 어떻게 전송 하 는 지 배 워 야 한다.
이 기술 의 작은 글 에서 저 는 서로 장 치 를 찾 을 수 있 는 MIDlet 을 만 드 는 방법 을 보 여 드 리 고 찾 은 장치 에 간단 한 메 시 지 를 보 낼 것 입 니 다.나 는 Nokia N95 의 기계 에서 이 MIDlet 의 작업 을 테스트 하고 확인 했다. 블 루 투 스 지원 을 사용 하면 윈도 비 스타 를 실행 하 는 컴퓨터 에 연결 할 수 있다.
나 는 전체 과정 을 다음 과 같은 몇 가지 절차 로 나 누 었 다.
1. 발견 과정 을 시작한다.
2. 발견 과정 에서 찾 은 장치 가 지원 하 는 서 비 스 를 조회 합 니 다.
3. 서 비 스 를 지원 하 는 URL 로 OBEX 데이터 교환 을 시작 하고 처리 합 니 다.
아래 각 단락 은 이 절차 들 을 상세 하 게 설명 할 것 이다.이 단계 에서 코드 세 션 을 따 르 면 이 MIDlet 의 전체 소스 코드 를 찾 아 볼 수 있 습 니 다.원본 코드 는 마지막 Resources 의 압축 파일 에서 얻 을 수 있 습 니 다.
STEP 1: 발견 과정 시작
발견 과정 은 로 컬 블 루 투 스 스 택 이 근처에 있 는 모든 블 루 투 스 장치 와 짝 을 이 룰 수 있다 는 것 을 알려 주 는 데 사용 된다.이 MIDlet 에서 이 스 택 은 장치 공급 자가 제공 하 는 JSR 82 를 통 해 완성 할 수 있 습 니 다.이 발견 과정 은 로 컬 장치 에 있 는 에이 전 트 를 발견 함으로써 시 작 됩 니 다. 다음 코드 와 같 습 니 다.
// get the local discovery agent
agent = LocalDevice.getLocalDevice().getDiscoveryAgent();
// start the inquiry for general unlimited inquiry
agent.startInquiry(DiscoveryAgent.GIAC, this);
프 록 시 시작 발견 과정 이 발견 되면 Discovery Listener 인 터 페 이 스 를 실행 하 는 클래스 에서 여러 가지 호출 방법 을 사용 합 니 다.우리 로 서 는 우리 의 MIDlet 류 다.
구체 적 으로 말 하면 이 인터페이스의 네 가지 방법 을 실행 해 야 한다. 그 중에서 두 가 지 는 발견 단계 에서 우리 가 관심 을 가 지 는 것 이다. device Discovered (RemoteDevice btDevice, DeviceClass cod) 와 inquiry Complete (int discType) 이다.이 두 가지 방법 은 한 설비 의 발견 을 처리 하고 발견 과정 을 완성 한다.아래 에 보 여 주 는 MIDlet 코드 에서 발견 되 거나 프로그램 이 끝 날 때 이 방법 을 사용 하여 장치 의 UI 를 추가 합 니 다.
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
try {
// add the devices using the friendly names
listofDevices.append(btDevice.getFriendlyName(false), null);
// add to the devices hashtable
devices.put(new Long(listofDevices.size()), btDevice);
} catch(Exception ex) { handleError(ex); }
}
public void inquiryCompleted(int discType) {
// once the inquiry is completed, show the list of devices to the user
if(listofDevices.size() == 0) {
display.setCurrent(nothing, noteBox);
} else {
display.setCurrent(listofDevices);
}
}
두 번 째 단계: 발 견 된 장치 에서 서비스 발견 시작 (service discovery)
본 논문 의 목적 은 데 이 터 를 우리 의 MIDlet 에서 호 환 되 는 장치 로 전송 하 는 것 이기 때문에 우 리 는 이미 발 견 된 장치 에서 이 서 비 스 를 찾 아 이 목 표를 실현 해 야 한다.이 목적 을 달성 하기 위해 서 는 서비스 발견 과정 에서 정확 한 속성 과 UUIDs 를 정의 해 야 합 니 다.다음 코드 는 이것 을 어떻게 하 는 지 보 여 줍 니 다.
agent.searchServices(
null,
new UUID[] {new UUID(0x1105L)}, // we want the OBEX PUSH Profile
device,
this);
당신 이 예상 한 바 와 같이, 이 코드 들 은 우리 가 이전에 사 용 했 던 로 컬 에이 전 트 를 사용 하여 장 치 를 찾 습 니 다.우 리 는 특정한 속성 뒤에 있 지 않 기 때문에 null 을 첫 번 째 매개 변수 로 사용 해 야 합 니 다. 그러나 UUID 는 OBEX PUSH 설정 파일 이 어야 합 니 다. 이것 은 데 이 터 를 전송 하 는 가장 개방 적 인 방법 이기 때 문 입 니 다.
우 리 는 발견 한 서 비 스 를 이용 할 수 있 는 두 가지 다른 방법 이 있다 고 말 했다.이 두 가지 방법 은 services Discovered (int transID, ServiceRecord [] servRecord) 와 serviceSearchComplete (int transID, int respCode) 이다.이름 에서 보 듯 이 첫 번 째 방법 은 서비스 가 발 견 될 때마다 호출 되 고 두 번 째 방법 은 서비스 과정 이 끝 날 때 호출 되 는 것 입 니 다.
서비스 가 발 견 될 때마다 모든 장치 의 특정한 URL 서비스 연결 을 찾 아야 합 니 다.이 URL 연결 은 OBEX 연결 을 우리 의 데이터 전송 에 사용 하고 블 루 투 스 하드웨어, 장치 주소 로 구성 합 니 다.다음 코드 에서 이 URL 연결 은 services Discovered 방법 에서 추출 되 었 습 니 다.
String connURL = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
이 URL 을 통 해 연결 하면 이제 데 이 터 를 전송 하 는 프로그램 을 발 견 된 장치 로 이동 할 수 있 습 니 다.
STEP 3: PBEX PUT 로 데이터 전송
이 MIDlet 에 서 는 사용자 가 메시지 로 텍스트 를 입력 한 다음 발 견 된 장치 나 서비스 로 전송 할 것 입 니 다.이 를 위해 서 는 이전 단계 에서 얻 은 URL 연결 이 필요 합 니 다. (물론 메시지 데 이 터 는 String 입 니 다.)
// open a client session
ClientSession clientSession =
(ClientSession) Connector.open(connURL);
// connect using no headers
clientSession.connect(null);
if(rHeaders.getResponseCode() != ResponseCodes.OBEX_HTTP_OK) {
// the connection could not be established
handleError(
new Exception("Remote client returned invalid response code: " +
rHeaders.getResponseCode()));
return;
}
// if we are here, then response code was ok
// create a new set of headers
HeaderSet headers = clientSession.createHeaderSet();
headers.setHeader(
HeaderSet.LENGTH,
new Long(noteBox.getString().length()));
headers.setHeader(HeaderSet.NAME, "myNote.txt");
headers.setHeader(HeaderSet.TYPE, "text/plain");
// create an operation using the headers we have just created
Operation op = clientSession.put(headers);
// on this operation, create the output stream
OutputStream out = op.openOutputStream();
// and send the note
out.write(noteBox.getString().getBytes());
이 데 이 터 를 보 내기 위해 client session 이 열 리 고 빈 제목 의 연결 을 만 듭 니 다.이 점 에서 목표 장 치 는 새로운 장치 의 데이터 수신 확인 을 요구 합 니 다.이전에 짝 짓 기 장치 가 없 었 다 면 키 를 요구 할 수도 있 습 니 다.
연결 이 구축 되면 데이터 목적 지 를 설명 하 는 제목 이 생 성 되 고 새로운 작업 이 이 제목 을 통 해 생 성 됩 니 다.이 조작 은 OutputStream 을 통 해 데 이 터 를 전송 하 는 것 이다.
받 은 메 시 지 는 대상 장치 의 기본 블 루 투 스 교환 폴 더 에 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.