Доступ к Android-серверу OBEX и чтение данных
Мне было интересно, можно ли считывать данные (контакты, пропущенные звонки и т. Д.) С Android-сервера OBEX из окон с Bluecove. Я попробовал следующий код из Windows, но он возвращает OBEX_HTTP_NOT_ACCEPTABLE
при подключении. Как я могу судить, адрес и канал устройства верны, так как при запуске этого теста у Android появляется диалоговое окно с вопросом, разрешить ли другому устройству доступ к его контактам. Спасибо!
код:
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.obex.*;
public class PBAPTest1 {
public static void main(String[] args) {
String deviceAddress = "001122334455";
int channel = 19;
String serverURL = "btgoep://" + deviceAddress + ":" + channel + ";authenticate=false;encrypt=false;master=false";
System.out.println("Connecting to " + serverURL);
ClientSession clientSession = null;
Operation op = null;
HeaderSet hdr = null;
try {
clientSession = (ClientSession) Connector.open(serverURL);
hdr = clientSession.connect(clientSession.createHeaderSet());
if (hdr.getResponseCode() != ResponseCodes.OBEX_HTTP_OK) {
System.out.println("Failed to connect: "
+ hdr.getResponseCode()); // response: 198 OBEX_HTTP_NOT_ACCEPTABLE
return;
}
} catch (IOException e) {
e.printStackTrace();
return;
}
byte[] PBAP_TARGET = new byte[] { 0x79, 0x61, 0x35, (byte) 0xf0,
(byte) 0xf0, (byte) 0xc5, 0x11, (byte) 0xd8, 0x09, 0x66, 0x08,
0x00, 0x20, 0x0c, (byte) 0x9a, 0x66 };
hdr.setHeader(HeaderSet.TARGET, PBAP_TARGET);
hdr.setHeader(HeaderSet.NAME, "pb.vcf");
hdr.setHeader(HeaderSet.TYPE, "x-bt/vcard-listing");
try {
op = clientSession.get(hdr);
} catch (IOException e) {
e.printStackTrace();
}
}
}
LogCat:
D/BluetoothEventLoop( 1551): Device property changed: XX:XX:XX:XX:XX:XX property: Connected value: true
D/BluetoothService( 1551): CONNECTION_STATE_CHANGE: XX:XX:XX:XX:XX:XX: 0 -> 2
D/Obex ServerSession( 1948): java.io.IOException: Software caused connection abort
D/BluetoothAdapterStateMachine( 1551): BluetoothOn process message: 52
D/BluetoothService( 1551): CONNECTION_STATE_CHANGE: XX:XX:XX:XX:XX:XX: 2 -> 0
D/BluetoothEventLoop( 1551): Device property changed: XX:XX:XX:XX:XX:XX property: Connected value: false
2 ответа
hdr = clientSession.connect(clientSession.createHeaderSet());
заголовок должен быть установлен целью со значением байтового массива pbap_target.
"clientSession
msgstr "для подключения нужен целевой заголовок.