我需要用藍牙編寫某種客戶端 - 服務器應用程序。我需要在我的筆記本電腦上創建一些服務器(我使用java和bluecove),這將嚮應用程序發送一些數據(在android上)。這裏是我的代碼:android和bluecove
服務器:
public class OBEXPutServer {
static final String serverUUID = "11111111111111111111111111111123";
public static void main(String[] args) throws IOException {
LocalDevice.getLocalDevice().setDiscoverable(DiscoveryAgent.GIAC);
SessionNotifier serverConnection = (SessionNotifier) Connector.open("btgoep://localhost:"
+ serverUUID + ";name=ObexExample");
int count = 0;
while(count < 2) {
RequestHandler handler = new RequestHandler();
serverConnection.acceptAndOpen(handler);
System.out.println("Received OBEX connection " + (++count));
}
}
private static class RequestHandler extends ServerRequestHandler {
public int onPut(Operation op) {
try {
HeaderSet hs = op.getReceivedHeaders();
String name = (String) hs.getHeader(HeaderSet.NAME);
if (name != null) {
System.out.println("put name:" + name);
}
return ResponseCodes.OBEX_HTTP_OK;
} catch (IOException e) {
e.printStackTrace();
return ResponseCodes.OBEX_HTTP_UNAVAILABLE;
}
}
}
}
應用:
public class BTTestActivity extends Activity {
String dStarted = BluetoothAdapter.ACTION_DISCOVERY_STARTED;
String dFinished = BluetoothAdapter.ACTION_DISCOVERY_FINISHED;
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
static final String serverUUID = "11111111111111111111111111111123";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
BroadcastReceiver discoveryResult = new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent)
{
String remoteDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
BluetoothDevice remoteDevice;
remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.i("@#$%^&*(*&^%$#@#$%^&*(", "WYSWIETLAM");
Toast.makeText(getApplicationContext(), "Discovered: " + remoteDeviceName + " address " + remoteDevice.getAddress(), Toast.LENGTH_SHORT).show();
try{
BluetoothDevice device = bluetooth.getRemoteDevice(remoteDevice.getAddress());
BluetoothSocket clientSocket = device.createRfcommSocketToServiceRecord(UUID.fromString(serverUUID));
clientSocket.connect();
} catch (IOException e) {
Log.d("BLUETOOTH", e.getMessage());
}
}
};
registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND));
}
public void fun(View view)
{
bluetooth.enable();
if (!bluetooth.isDiscovering())
bluetooth.startDiscovery();
}
}
我的問題是,當我嘗試連接到從應用服務我得到這樣的事情:
11-26 13:41:04.959: E/AndroidRuntime(8830): FATAL EXCEPTION: main
11-26 13:41:04.959: E/AndroidRuntime(8830): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.device.action.FOUND (has extras) } in [email protected]
11-26 13:41:04.959: E/AndroidRuntime(8830): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722)
11-26 13:41:04.959: E/AndroidRuntime(8830): at android.os.Handler.handleCallback(Handler.java:587)
11-26 13:41:04.959: E/AndroidRuntime(8830): at android.os.Handler.dispatchMessage(Handler.java:92)
11-26 13:41:04.959: E/AndroidRuntime(8830): at android.os.Looper.loop(Looper.java:130)
11-26 13:41:04.959: E/AndroidRuntime(8830): at android.app.ActivityThread.main(ActivityThread.java:3835)
11-26 13:41:04.959: E/AndroidRuntime(8830): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 13:41:04.959: E/AndroidRuntime(8830): at java.lang.reflect.Method.invoke(Method.java:507)
11-26 13:41:04.959: E/AndroidRuntime(8830): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
11-26 13:41:04.959: E/AndroidRuntime(8830): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
11-26 13:41:04.959: E/AndroidRuntime(8830): at dalvik.system.NativeStart.main(Native Method)
11-26 13:41:04.959: E/AndroidRuntime(8830): Caused by: java.lang.IllegalArgumentException: Invalid UUID: 11111111111111111111111111111133
11-26 13:41:04.959: E/AndroidRuntime(8830): at java.util.UUID.fromString(UUID.java:226)
11-26 13:41:04.959: E/AndroidRuntime(8830): at andr.andr.BTTestActivity$1.onReceive(BTTestActivity.java:44)
11-26 13:41:04.959: E/AndroidRuntime(8830): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709)
11-26 13:41:04.959: E/AndroidRuntime(8830): ... 9 more
有人知道這段代碼有什麼問題嗎?謝謝你的幫助。
編輯:
我會運行這個例子告訴你,我和我運行它,但它不是工作:(我有問題wyth服務器什麼他是「的StreamConnection的StreamConnection = connectionNotifier.acceptAndOpen停止() ;」在啓動方法線和野兔日誌從您的Android應用:
11-26 16:08:32.569: D/MyActivity(2725): ON CREATE
11-26 16:08:32.569: D/MyActivity(2725): ON START
11-26 16:08:32.569: D/MyActivity(2725): INSIDE WHILE STATE ON
11-26 16:08:32.589: D/MyActivity(2725): Start discovery = true
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.619: D/MyActivity(2725): about to connect
11-26 16:18:18.529: D/MyActivity(3166): Connected!
,當我點擊按鈕,我得到的日誌
11-26 16:19:02.389: D/MyActivity(3166): In listener button.
在你的應用程序代碼中,我改變藍牙地址到筆記本電腦上的藍牙設備。你知道什麼是錯的,也許我需要用你的代碼做別的事情?我有一個問題。你在哪裏的應用程序代碼你設置服務器的UUID?
我注意到,即使我不運行服務器,來自你的應用程序的日誌也是一樣的。它看起來像應用程序看到我的筆記本電腦上只有藍牙適配器,並沒有看到我的筆記本電腦上運行的服務器應用程序。
順便說一句。我使用BlueSoleil 6.4.149.0作爲藍牙堆棧,我的「東芝for windows」堆棧不適用於bluecove。也許這是問題?
我在文章中做了一些修改,你能看看這個嗎? – klemens