2016-11-01 3 views
1

Мне нужно создать приложение, которое обнаружит все ближайшие Bluetooth-устройства и подключится к нему. У меня есть этот код, вероятно, будет работать в Java, но мне нужно работать в C#:Получите рядом устройства Bluetooth в android 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

GetParcelableExtra общий метод, который может быть использован для возвращения многих вещей. Экземпляры BluetoothDevice являются лишь одной из вещей, которые он может вернуть.

Во время компиляции компилятор не знает, что то, что вышло из вашего звонка до GetPardelableExtra, является экземпляром BluetoothDevice. Он знает только, что из него выйдет объект. Итак, по-видимому, в Xamarin для Android он просто возвращает java.lang.Object. Только во время выполнения известно, что этот Объект содержит экземпляр BluetoothDevice.

Решение представлено в сообщении об ошибке; вам нужно бросить возвращаемое значение BluetoothDevice:

Object obj = intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); 
BluetoothDevice device = obj as BluetoothDevice; 
if (device != null) 
{ 
    // Rest of your code. 
} 

Если бросок терпит неудачу, то он вернет null, поэтому нулевая проверка важна.
Если вы получили это значение null, вы, вероятно, предпримете какое-то действие - упомяните об этом в журналах или консоли, чтобы позже отлаживать их.

+0

Теперь, когда он находит устройство, предоставляющее Java.NullPointerException во время выполнения – KillGeek

+0

@KillGeek Вы проверяете значения «null»? Кроме того, в этих примерах экземпляр 'device' объявляется внутри блока' if (BluetoothDevice.ActionFound.Equals (action)). Если вы хотите использовать его вне этого блока 'if', вы должны объявить его вне этого блока' if'. –

+0

Спасибо, это работает – KillGeek

Смежные вопросы