在android c#中获取附近的蓝牙设备

时间:2016-11-01 09:23:30

标签: c# android xamarin

我需要制作一款可以发现附近所有蓝牙设备并连接到它的应用。我有这个代码可能在Java中工作,但我需要它在C#中工作:

public class BroadcastReciverClass : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        String action = intent.Action;

        // When discovery finds a device
        if (BluetoothDevice.ActionFound.Equals(action))
        {     
            BluetoothDevice device = intent.GetParcelableExtra(BluetoothDevice.ExtraDevice);
            // Add the name and address to an array adapter to show in a ListView
            mArrayAdapter.Add(device.Name+"  ->  "+device.Address);
            lv.Adapter = mArrayAdapter;
        }   
    }   
}

问题是Visual Studio说:

  

无法将Java.Lang.Object隐式转换为Android.Bluetooth.BluetoothDevice。
  你错过了演员吗?

在这一行:

BluetoothDevice device = intent.GetParcelableExtra(BluetoothDevice.ExtraDevice);

1 个答案:

答案 0 :(得分:0)

<paper-dropdown-menu>是一种可用于返回许多内容的通用方法。 GetParcelableExtra的实例只是它可能返回的事情之一。

在编译期间,编译器不知道您对BluetoothDevice的调用产生的内容是GetPardelableExtra的实例。它只知道某些对象将会出现。所以,显然在Xamarin for Android中,它只返回一个BluetoothDevice。仅在运行时才知道此Object包含java.lang.Object的实例。

解决方案在错误消息中提供;您需要将返回的值转换为BluetoothDevice

BluetoothDevice

如果演员表失败,它将返回Object obj = intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); BluetoothDevice device = obj as BluetoothDevice; if (device != null) { // Rest of your code. } ,因此空检查很重要 如果你得到null值,你可能会采取某种行动 - 在日志或控制台中提及它以帮助你稍后调试。