在阅读了dot42注释并拖拽Java示例后,我设法建立了蓝牙连接但无法打开连接。我无法确定问题。我一步一步地跟着文档。
我的目标设备是在2.3 Gingerbread上运行的HTC Explorer。这是我的代码。
//Target 2.3 (Gingerbread)
[assembly: Application("dot42Application1")]
[assembly: UsesPermission(Android.Manifest.Permission.BLUETOOTH)]
[assembly: UsesPermission(Android.Manifest.Permission.BLUETOOTH_ADMIN)]
namespace dot42Application1
{
[Activity]
public class MainActivity : Activity
{
private TextView txStatus;
protected override void OnCreate(Bundle savedInstance)
{
base.OnCreate(savedInstance);
SetContentView(R.Layouts.MainLayout);
// Find UI controls
txStatus = FindViewById<TextView>(R.Ids.txStatus);
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
var bt = BluetoothAdapter.GetDefaultAdapter();
if (bt != null) //If device has not Bluetooth this will be null
{
if (bt.IsEnabled()) //Is Bluetooth device enabled?
{
var BT_My_Addr = bt.Address; //Get the devices MAC
var BT_Bonded = bt.GetBondedDevices().ToList(); //Get a list of bonded devices- I bonded to a BT2TTL Board earlier.
txStatus.Text = BT_My_Addr + System.Environment.NewLine; //Shows my MAC on screen.
string BT_Remote_Address = string.Empty;
foreach (var BTDevice in BT_Bonded) //Just searchging for string in bonded list
{
if (BTDevice.Name.Contains("linvor"))
{
BT_Remote_Address = BTDevice.Address;
}
}
//Gets remote device
var BT_Remote_Device = bt.GetRemoteDevice(BT_Remote_Address);
//Create a RFCOMM Socket to remote device using popular UUID ofr BT Serial boards
var BTsocket = BT_Remote_Device.CreateInsecureRfcommSocketToServiceRecord(Java.Util.UUID.FromString("00001101-0000-1000-8000-00805F9B34FB"));
//Call anyway to make sure there is no discvoerry in the backgorund. It slows stuff down.
bt.CancelDiscovery();
//Exception here? Dont know why :(
BTsocket.Connect();
//Suppsoed to dump 0 to 99999 to my listening serial device but I never get this far.
var BT_Out = BTsocket.GetOutputStream();
for (int i = 0; i < 99999; i++)
{
BT_Out.Write(Encoding.ASCII.GetBytes(i.ToString()));
}
}
else
{
txStatus.Text = "Bluetooth is disabled :(";
}
}
}
}
这就是它在创建套接字后显示的内容
和错误......
我做错了什么? :(
答案 0 :(得分:1)
我似乎通过分析互联网上的各种代码片段解决了这个问题。我认为问题是试图用OnCreate
方法做所有事情。我遵循的步骤如下:
OnCreate
方法的所有代码。 (我认为这允许应用程序完全初始化。)使用两种方法为按钮创建了一个事件处理程序。
findBT()
获取默认适配器。检查蓝牙是否已启用,如果没有意图过滤器。或者如果是,它将遍历绑定列表并匹配设备名称并将BluetoohDevice存储在变量中。 这是另一件与我的代码不同的东西。我不使用GetRemoteDevice我只是将BondedList中的设备分配给我的全局变量。
openBT()
创建了RFCOMM套接字(这不适用于不安全 - 它引发了异常,但使用了安全方法!)
您必须使用Androids蓝牙控制面板与远程设备配对。此代码不会扫描或连接到未配对的设备。它只会抛出空例外。
我还离开了目标SDK 2.3.x,但我使用的是4.x API。
-Disclosure。我不是一个经验丰富的Android开发人员,只是在Android环境中了解Java应用程序的生命周期。我希望这可以帮助其他C#开发人员尝试这样做。