我需要制作一款可以发现附近所有蓝牙设备并连接到它的应用。我有这个代码可能在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);
答案 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
值,你可能会采取某种行动 - 在日志或控制台中提及它以帮助你稍后调试。