2011-12-06 5 views
2

임베디드 장치에 연결하려고하는데 블루투스 핀이 1234인데 임베디드 보드에 연결하면 임베디드 보드에 000000을 입력하고 올바른 핀을 입력하라는 메시지는 표시되지 않습니다. 내 장치에서. 내가 뭘 잘못하고 있는지 모르겠다. 나는 manageThread에서 밖으로 전화createRfcommSocketToServiceRecord 블루투스 페어링

public void connectBluetooth() throws IOException{ 
     device = bluetoothAdapter.getRemoteDevice(MAC); 
     try { 
      mSocket = device.createRfcommSocketToServiceRecord(MY_UUID); 
     } catch (IOException e) { 
      Log.e(tag, "+++++Failed to create RFCOMM connection+++++"); 
     } 
     try{ 
      mSocket.connect(); 
      Log.e(tag, "+++++connecting+++++"); 
      manageBluetooth manageThread = new manageBluetooth(); 
      manageThread.start(); 
      threadCheck = true; 
     }catch(IOException e){ 
      Log.e(tag, "+++++Failed to connect+++++"); 
     } 
     Log.e(tag, "+++++After catch+++++"); 
    } 
} 

는, 내가 올바른 MAC뿐만 아니라 주소를 언급했다. 반드시 휴대 전화에 핀을 넣고 내장 보드에는 넣지 말아야합니다.

답변

0

사용중인 임베디드 보드를 설명 할 수 있습니까?

pairing이 발생하면 장치는 원하는 연결에 대한 입력/출력 가능성을 서로 나타냅니다.

문제는 두 장치가 다른 신호를 보내고 있다는 것입니다. 아마 안드로이드는 패스 키 입력이있는 SPP를 원하고 임베디드 디바이스는 레거시 페어링을 시도합니다. 보다 명확한 응답을 얻으려면 코드를 더 게시해야합니다.

여기 내 시나리오 : - 안드로이드는 RFCOMM 서버 입니다 - 임베디드 보드는 RFCOMM 클라이언트 (연결을 시작) 들이 짝입니다 상상이다.

  1. 임베디드 보드는 Android SDP를 탐색하여 UUID와 일치하는 RFCOMM 소켓 (실제로 채널)을 찾습니다.
  2. 임베디드 보드가 연결을 시도합니다.
  3. 임베디드 보드는 I/O 기능 및 본딩 설정 (본딩 용)을 상세하게 요청합니다. 응답해야합니다. 그것이 MITM 보호, 본딩 요구로 응답한다고 가정 해 봅시다. 또한 I/O 기능이 없음을 말합니다..
  4. 임베디드 보드는 Android의 인증 요구 사항을받습니다 (MITM 보호, 본딩 필요)
  5. Android는 승인/거부 대화 상자를 표시합니다.
  6. 이제 연결이 완료됩니다. 디바이스의 블루투스 어댑터 중 하나의 전원을 잃을 때까지

페어링은 더 이상 새로운 RFCOMM 연결을위한 필요하지 않을 것이다, 또는 해당 링크 키를 다른 방법으로 (unpairs)을 삭제합니다. Android RFCOMM 소켓이 안전하기 때문에 연결하기 전에 내장 보드에 인증 요청이 수신됩니다. Android RFCOMM의 경우 내 프로젝트에서 안드로이드가 "예/아니오"(PIN이 아님)로만 응답하도록 할 수 있습니다. (제한된 I/O)

사용자 작업없이 즉시 페어링을 만들 수도 있지만 Android API에 대한 것이므로 권장하지 않습니다. 안드로이드 폰의 블루투스 칩을 더 잘 제어하려면 aidl 파일을 사용하십시오.

투표를 잊지 마세요 !!

관련 문제