1

Bluetooth経由で他のAndroidデバイスを検出するための非常に単純なアクティビティがあります:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

     // Get the local Bluetooth adapter
    FrameLayout f = new FrameLayout(this);
    setContentView(f);
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

    this.registerReceiver(mReceiver, filter);
     // Register for broadcasts when discovery has finished
    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    this.registerReceiver(mReceiver, filter);

    mBtAdapter = BluetoothAdapter.getDefaultAdapter();

    // Get a set of currently paired devices
    Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();


    // Request discover from BluetoothAdapter
    Log.i("bluetooth", "about to start device discovery");
    mBtAdapter.startDiscovery();

    //start receiving stuff
    mReceiver = new BluetoothReceiver();

}

問題は、アクティビティの onCreate() の最後に呼び出された BluetoothReciiver クラスがデバイスを見つけられないように見えることですが、これをデバッグしているときに近くでオンになっています。

 public class BluetoothReceiver extends BroadcastReceiver {
public ArrayAdapter<String> mNewDevicesArrayAdapter;
 @Override
 public void onReceive(Context context, Intent intent) {
     String action = intent.getAction();

     // When discovery finds a device
     if (BluetoothDevice.ACTION_FOUND.equals(action)) {
         // Get the BluetoothDevice object from the Intent
         BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
         // If it's already paired, skip it, because it's been listed already
         if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
            Log.i("face", device.getName() + "\n" + device.getAddress());
             mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
         }
     // When discovery is finished, change the Activity title
     } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {

         if (mNewDevicesArrayAdapter.getCount() == 0) {
                Log.i("face", "found NOTHING!");
             mNewDevicesArrayAdapter.add("no devices found");
         }
      }
   }
}

ここに欠けているものはありますか?

4

1 に答える 1

0

それは、呼び出しregisterReceiver() mReceiverが nullの場合mReceiver = new BluetoothReceiver();、最初の上 に移動すると、次this.registerReceiver(mReceiver, filter);のようなこともできるからだと思います

filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

this.registerReceiver(mReceiver, filter);その後、 1回だけ呼び出します

于 2013-07-03T14:44:54.843 に答える