带OBEX推送的Android RFComm不工作
我正试图将java应用程序改造成android应用程序,但我无法让它正常工作。该应用程序旨在与使用OBEX推送的设备进行对话。该设备无法进行任何传入连接,并且没有用户界面,只有一些指示灯 我试图重新制作的java代码片段如下:带OBEX推送的Android RFComm不工作,android,bluetooth,obex,Android,Bluetooth,Obex,我正试图将java应用程序改造成android应用程序,但我无法让它正常工作。该应用程序旨在与使用OBEX推送的设备进行对话。该设备无法进行任何传入连接,并且没有用户界面,只有一些指示灯 我试图重新制作的java代码片段如下: LocalDevice local; local = LocalDevice.getLocalDevice(); local.setDiscoverable(DiscoveryAgent.LIAC); String sConnectionURL = "btspp://lo
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英雄,也不是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");
}
}
关于代码的注释:跟踪函数是一个同步函数,将文本提供给处理程序对象,提供UI信息。
成功连接后,应用程序故意不做任何事情,只是关闭连接。
应用程序到达“等待套接字接受”,但此后再也没有到达跟踪 我有一个PC.NET应用程序,可以将自己伪装成设备,通过使用正确的UUID,它可以完美地工作,但是PC已经与手机配对,并且没有一个位说如果找不到指定的OBEX,它应该通过正常的OBEX发送 我已经研究这个问题好几天了,还没有找到解决办法。有人有什么想法吗 提前感谢,
/Trygg
关于第二条信息,我的意思是:
LocalDevice local;
local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.LIAC);
String sConnectionURL = "btspp://localhost:" + myUUID + ";name=" + obexName;
this.server = (StreamConnectionNotifier) Connector.open(sConnectionURL);
当设备与手机联系时,下拉菜单中会显示一条通知,告知设备正在联系。几秒钟后(取决于文件大小),文件被传输,并且会出现第二个通知,告知文件已传输。这是第二条“信息”
因为我监听设备的断开连接,然后客户通过我的程序已经知道文件被传输了,所以第二次通知完全没有用。不过,每次设备向手机发送文件时,它都会出现
不过,在我们对传奇和英雄的测试中,我们从未收到过第二次通知。这就是那些手机出现故障的地方。第一个通知出现,然后什么都没有,几秒钟后设备返回一个错误
希望这有助于澄清我的意思
/Trygg
我没有让它工作,但做了一些变通。我在事件BluetoothDevice.ACTION\u ACL\u上注册了一个BroadcastReceiver,然后检查断开连接的设备。如果是“我的”,我会在蓝牙收件箱中搜索文件
我从设备制造商那里得到一条消息,说它还不能工作,但他们正在开发新的固件。这就是为什么我没有在这里活动,也没有为更好的解决方案而工作。请确定,您在Android清单中设置了正确的权限了吗 是的,我做了,或者至少我认为是这样。我认为如果它与PC一起工作,它应该是正确的?我在这方面取得了中等成功: