이 문제를 직접 해결해야합니다. 중요한 단계는 내 프로젝트에 android.bluetooth 패키지를 추가하고 IBluetooth.aidl 및 IBluetoothCallback.aidl (링크에서 찾을 수 있음) 파일을 추가하라고 알려준 this code을 찾는 것입니다.
IBluetooth 개체를 인스턴스화하면 BluetoothService 클래스에 액세스 할 수 있으며 IBluetooth.aidl의 모든 방법을 사용할 수 있습니다. 나는에 관심이 방법은 다른 블루투스 코드가 페어링 대화 상자가 이미 호출 된 것으로 예상, 그리고 BluetoothEventLoop 클래스는 HashMap에 그 추적 사용하여
setPin(String address, byte[] pin)
문제였다.
setPin(<address>) called but no native data available, ignoring. Maybe the PasskeyAgent Request was cancelled by the remote device or by bluez.
그래서 (채팅 예제를 사용하여) 나에 대한 해결 방법은 페어링을 시작하기 위해 연결 스레드를 시작했다 : 당신이 페어링 요청을 시작하지 않고 setPin()를 호출하려고하면이 같은 오류를 볼 수 있습니다 요청한 다음 스레드가 시작되었는지 확인하기 위해 500ms 동안 기다린 다음 setPin()을 호출합니다.
예 위의 내용을 모두 알고 있습니다. Bluez 코드를 변경하려면 지금까지해야합니까? 이 작업을 리플렉션을 사용하여 수행 할 수 있기를 희망했습니다. 키를 설정하는 것으로 보이는이 기능을 안드로이드 소스에서 발견했습니다. http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2 /android/bluetooth/BluetoothDevice.java#BluetoothDevice.setPasskey%28int%29 –
궁극적으로 기본 BlueZ 코드와 통신하는 비공개 API/래퍼입니다. 여기에서 링크 키를 설정하는 데는 아무 것도 없습니다. –
그래서 이전에 언급 한 setPasskey 래퍼를 사용하여 자바 API에서 링크 키를 설정할 수 없습니까? 아니면 이것이 올바른 매개 변수 (패스 키! = 링크 키)가 아니며 링크 키와 관련된 모든 것이 BlueZ에서 처리된다고 말하고 있습니까? –