2016-11-01 4 views
1

近くのすべてのBluetoothデバイスを検出して接続するアプリを作成する必要があります。私はおそらく、Javaで動作するこのコードを持っていますが、私はそれがC#で作業する必要があります。近くのBluetoothデバイスをAndroidで取得する#

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のインスタンスは、返される可能性のあるものの1つに過ぎません。

コンパイル時に、GetPardelableExtraへの呼び出しの内容がBluetoothDeviceのインスタンスであることをコンパイラーは認識しません。それはいくつかオブジェクトが出てくることを知っているだけです。 Xamarin for 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を返します。
nullという値を取得した場合、おそらく何らかのアクションが起こります。後でデバッグするために、ログやコンソールで言及してください。

+0

ここで、デバイスがランタイムでJava.NullPointerExceptionを検出した場合 – KillGeek

+0

@KillGeek 'null'値をテストしますか?また、これらの例では 'device'インスタンスは' if(BluetoothDevice.ActionFound.Equals(action)) 'ブロックの中で宣言されています。その 'if'ブロックの外で使用したい場合は、' if'ブロックの外で宣言する必要があります。 –

+0

ありがとうございました – KillGeek

関連する問題