我正在使用Bluecove API为我的计算机构建一个简单的Java蓝牙服务器.我正在构建一个Android客户端应用程序,但问题似乎源于服务器端应用程序.
我确定有人已经在某处发布了任何答案,过去几天我已经严格尝试了不同的解决方案并查看了所有可能的论坛,但我似乎无法保持套接字线程上的连接.
我可以在从android到计算机建立连接之后交换消息,反之亦然,从计算机到android,但是在交换字节后,Bluecove堆栈关闭并关闭套接字连接,即使我没有明确告诉它connection.close()时.
我试图使用一段时间(某些陈述是真的)循环来保持连接活动,它不再在收到第一条消息后关闭套接字但它无法接收我从智能手机发送到我的计算机的任何后续消息无论是.虽然它基本上是活着的,但当我尝试从智能手机发送它们时,它无法接收任何新消息.不知道为什么.
对不起,这是我第一次发帖,我不确定为什么代码的第一部分无法在页面上正确显示.
代码连接:
public BluetoothServer()
{
try
{
service = (StreamConnectionNotifier)
Connector.open("btspp://localhost:" + new UUID(0x1101).toString() +
";name=SampleServer");
System.out.println("open connection");
while(runState == true){
connection = (StreamConnection) service.acceptAndOpen();
//send a greeting across to android
outputStream = connection.openOutputStream();
String greeting = "JSR-82 RFCOMM server says hello";
outputStream.write(greeting.getBytes());
//run thread that listens for incoming bytes through socket connection
Thread t = new Thread(new ConnectedThread(connection));
t.start();
}
} catch(IOException e) {}
}
Run Code Online (Sandbox Code Playgroud)
用于收听数据的线程代码
public void run()
{
try
{
//open input …Run Code Online (Sandbox Code Playgroud) 我只需要一个基本的例子或教程,让手机和电脑通过蓝牙进行通信.
一个很好的链接/网站开始也很感激.
服务器部分(计算机部分)可以在许多编程语言(Java,C++,Python甚至其他东西)上制作.
客户端部分(移动电话)必须是Java Micro Edition MIDlet.
如何在Ubuntu 11/Eclipse IDE中安装Bluecove?
据我所知,我所要做的就是将bluecove.jar和bluecove-gpl.jar添加到Eclipse中项目的Build-Path中.
我正在使用一些示例Bluecove代码:http://bluecove.sourceforge.net/bluecove/apidocs/overview-summary.html#DeviceDiscovery
当我编译它时,我收到一个错误:本机库bluecove_x64不可用线程"main"中的异常javax.bluetooth.BluetoothStateException:BlueCove库bluecove不可用
显然,当我这样做时,我的蓝牙USB加密狗插入...我肯定安装了BlueZ协议栈.
我究竟做错了什么?Bluecove是否受64位Linux支持?我也一直在尝试将它安装在CentOS 5.5机器上,但没有运气.
任何帮助将不胜感激.谢谢
所以有很多与此问题相关的SO帖子 -
其他职位 -
尝试从反射到没有反思但没有工作的一切 -
if(!mDeviceAddress.equals("") && BluetoothAdapter.checkBluetoothAddress(mDeviceAddress))
{
Log.i(TAG, "Remote Device Name "+mDeviceName);
bdDevice = mBluetoothAdapter.getRemoteDevice(mDeviceAddress);
getConnected(bdDevice);
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void getConnected(BluetoothDevice bdDevice)
{
if(bdDevice == null)
{
setSetting("STATUS", "Disconnected");
Toast.makeText(getActivity(),
"Unable to get Remote Device!", Toast.LENGTH_SHORT).show();
return;
}
else
{
Log.i(TAG, "Connecting Address--"+ bdDevice.getAddress());
boolean isConnected = createInsecureRfcommSocket(bdDevice, 1);
if(!isConnected)
{
for(int i=2;i<4;i++)
{
if(!isConnected)
isConnected = createInsecureRfcommSocket(bdDevice, i);
else
break;
}
}
if(isConnected)
{
Log.i(TAG, "Connected Socket");
setSetting("STATUS", "Connected");
mConnectedThread = …Run Code Online (Sandbox Code Playgroud) 蓝牙FTP规范说我需要使用ACTION操作,这是一个页面 http://i47.tinypic.com/2425t2v.png
但是ClentSession只提供GET和PUT操作,而javadocs中没有提到任何内容.
这是创建文件操作的外观,非常简单
public void create() throws IOException {
HeaderSet hs = cs.createHeaderSet();
hs.setHeader(HeaderSet.NAME, file);
op = cs.put(hs);
OutputStream os = op.openOutputStream();
os.close();
op.close();
}
Run Code Online (Sandbox Code Playgroud)
问题1:如何使用自定义标头实施ACTION操作以执行移动/重命名和设置权限?没有JSR82 OBEX API就应该可以.请帮我这样做.
问题2:我是否了解如何设置权限?根据OBEX_Errata Compiled For 1.3.pdf(感谢alanjmcf!)
1 http://i45.tinypic.com/2h84led.jpg
2 http://i49.tinypic.com/2wgysmx.png
因此,要设置只读,我应该执行以下操作:
int a = 0;
//byte 0 //zero
//byte 1 //user
//byte 2 //group
//byte 3 //other
//set read for user
a |= (1 << 7); //8th bit - byte 1, bit 0 -> set to 1
// a = 10000000 …Run Code Online (Sandbox Code Playgroud)