我正在尝试将java应用程序重制为Android应用程序,但我无法使其工作。该应用程序旨在与使用OBEX Push的设备进行通信。设备无法接收任何传入连接,并且没有用户界面,只有一些LED。
我想重新制作的java代码片段如下:
LocalDevice local;
local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.LIAC);
String sConnectionURL = "btspp://localhost:" + myUUID + ";name=" + obexName;
this.server = (StreamConnectionNotifier) Connector.open(sConnectionURL);
我不是Java专家,但据我所知,此代码段应注册一个名为obexName的SPP服务,并开始通过UUID myUUID侦听传入连接。这可以按预期工作。
当设备与运行java midlet的手机配对时,它会设置一个位以发送到手机上带有UUID的SPP或根本不发送。如果在配对期间找不到任何带有UUID的SPP,它将尝试使用普通OBEX连接到手机。
这是我无法在Android手机上工作的技术,无论是HTC Hero还是HTC Desire,都是2.1-update1版本。无论我如何尝试,手机只能连接到手机,而不是根据需要连接到应用程序。
我创建了一个类似于developer.android.com上的示例:
private class AcceptThread extends Thread
{
private final BluetoothServerSocket __serverSocket;
public AcceptThread()
{
BluetoothServerSocket tmpSocket = null;
trace("Creating AcceptThread");
try
{
trace("Starting to listen");
tmpSocket = _bluetoothAdapter.listenUsingRfcommWithServiceRecord(obexName, myUUID);
trace("Listening successful");
}
catch (Exception e)
{
trace("Listening NOT successful");
// TODO: handle exception
}
__serverSocket = tmpSocket;
trace("AcceptThread created");
}
public void run()
{
BluetoothSocket socket = null;
trace("AcceptThread started");
while(true)
{
try
{
trace("Waiting for socket acceptance");
socket = __serverSocket.accept();
trace( "Socket accepted");
}
catch (Exception e)
{
trace("Error when accepting socket: " + e.getLocalizedMessage());
break;
// TODO: handle exception
}
if (socket != null)
{
synchronized (BTTransfer.this)
{
trace("Socket exists");
try
{
__serverSocket.close();
trace("Socket successfully closed");
}
catch (Exception e) {}
break;
}
}
trace("Socket does not exist");
}
}
public void cancel()
{
try
{
__serverSocket.close();
}
catch (Exception e) {}
trace("AcceptThread cancelled and Socket successfully closed");
}
}
关于代码的评论:
trace函数是一个同步函数,用于向Handler对象提供文本,提供UI信息
在成功连接后,应用程序明知不做任何事情,只是关闭连接
应用程序达到“等待套接字接受”但在此之后永远不会跟踪。
我有一个可以伪装成设备的PC .NET应用程序,并且通过使用正确的UUID它可以完美地工作,但是PC已经与手机配对,并且没有说它应该发送超过正常OBEX,如果找不到指定的。
我已经使用了好几天了,无法提出解决方案。那里有人有什么想法吗?
提前致谢,
/ Trygg
我的意思是第二条消息:
当设备与手机联系时,下拉菜单中会显示通知,告知设备正在联系。几秒钟后(取决于文件大小)文件被传输,并且有第二个通知告诉文件被传输。这是第二个“消息”。
由于我收听设备断开连接,然后客户通过我的程序已经知道文件被传输,这第二个通知完全没用。不过,每当设备将文件发送到手机时,它都会出现。
在我们对Legend和Hero的测试中,我们从未接受过第二次通知。这就是那些手机失败的地方。第一个通知来了,然后什么都没有,设备在几秒钟后返回错误。
希望这有助于澄清我的意思。
/ Trygg
我没有得到这个工作,但做了一些解决方法。我在事件BluetoothDevice.ACTION_ACL_DISCONNECTED上注册了一个BroadcastReceiver,然后检查了哪些设备已断开连接。如果它是“我的”,我搜索了蓝牙收件箱中的文件。
我收到设备制造商发来的消息称它无法正常工作,但他们正在开发新固件。这就是为什么我没有在这里活跃,也没有为更好的解决方案而努力。
答案 0 :(得分:0)
可以肯定的是,您是否在Android清单中设置了正确的权限?