如何使用Android蓝牙设备选择器检索蓝牙设备信息?

Ric*_*ick 5 android bluetooth

这是我正在使用的测试代码:

public class IOConnectDirect extends Activity {

private static final String TAG = "IOConnectDirect";

private static final int REQCODE_BLUETOOTH_RESULT = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i(TAG, "onCreate");
    setTitle(getTitle() + "--" + TAG);
    Intent intentBluetooth = new Intent();
    intentBluetooth.setAction("android.bluetooth.devicepicker.action.LAUNCH");
    //android.bluetooth.devicepicker.action.DEVICE_SELECTED not working .
    startActivityForResult(intentBluetooth, REQCODE_BLUETOOTH_RESULT);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i(TAG, "onActivityResult(" + requestCode  +"," + resultCode + ")");

    switch (requestCode) {
    case REQCODE_BLUETOOTH_RESULT:
        Log.i(TAG, "requestCode = REQCODE_BLUETOOTH_RESULT");

        if(resultCode == RESULT_OK) {
            Log.i(TAG, "RESULT_OK");

            // Retrieve the Info
            Bundle extras = data.getExtras();

            if(extras != null) {
                Log.i(TAG, "Bundle ok");
            }
        }
        else {
            Log.i(TAG, "!RESULT_OK = FAILED(" + resultCode + ")");
            Toast.makeText(this, "Failed(" + resultCode +")", Toast.LENGTH_SHORT).show();
        }

        break;

    default:
        Log.i(TAG, "requestCode = ????");
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

这是Logcat输出:

I/IOConnectDirect(14956): onActivityResult(0,0)
I/IOConnectDirect(14956): requestCode = REQCODE_BLUETOOTH_RESULT
I/IOConnectDirect(14956): !RESULT_OK = FAILED(0)
Run Code Online (Sandbox Code Playgroud)

代码工作(你需要先激活蓝牙),我只是无法做它我想要的,检索我从活动中选择的蓝牙设备名称和地址.

注意 :

  • 我不想连接我只想要选择设备信息.
  • 我熟悉其他方法,例如Android蓝牙聊天示例

UPDATE

我最终使用了BroadcastReceiver

public class IOConnectDirect extends Activity {

    private static final String TAG = "IOConnectDirect";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate");

        BluetoothConnectActivityReceiver mBluetoothPickerReceiver = new BluetoothConnectActivityReceiver();
        registerReceiver(mBluetoothPickerReceiver, new IntentFilter(BluetoothDevicePicker.ACTION_DEVICE_SELECTED));
        startActivity(new Intent(BluetoothDevicePicker.ACTION_LAUNCH)
            .putExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH, false)
        .putExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE, BluetoothDevicePicker.FILTER_TYPE_ALL)
        .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS));

    }

    public class BluetoothConnectActivityReceiver extends BroadcastReceiver {


        @Override
        public void onReceive(Context context, Intent intent)  {
            if(BluetoothDevicePicker.ACTION_DEVICE_SELECTED.equals(intent.getAction())) {
                context.unregisterReceiver(this);
                BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                Toast.makeText(context, "device" + device.getAddress(), Toast.LENGTH_SHORT).show();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Sou*_*rma 0

试试这个代码:

private final BroadcastReceiver mBluetoothPickerReceiver = new BluetoothConnectActivityReceiver(this);

 void connectToService(String defaultAdapter) {
    if (defaultAdapter == null) {
        registerReceiver(mBluetoothPickerReceiver, new IntentFilter(BluetoothDevicePicker.ACTION_DEVICE_SELECTED));
        startActivity(new Intent(BluetoothDevicePicker.ACTION_LAUNCH)
            .putExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH, false)
            .putExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE, BluetoothDevicePicker.FILTER_TYPE_ALL)
            .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS));
    } else {
        mCardroid.getCardroidService().connectTo(defaultAdapter);
    }
}

public class BluetoothConnectActivityReceiver extends BroadcastReceiver {
    private BluetoothConnectActivity bluetoothConnectActivity;
 public BluetoothConnectActivityReceiver(BluetoothConnectActivity bluetoothConnectActivity) {
            this.bluetoothConnectActivity = bluetoothConnectActivity;
        }

     @Override
            public void onReceive(Context context, Intent intent)  {
                if(BluetoothDevicePicker.ACTION_DEVICE_SELECTED.equals(intent.getAction())) {
                    context.unregisterReceiver(this);
                    BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    bluetoothConnectActivity.connectToService(device.getAddress());
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

完整代码参考:

http://code.google.com/p/carbot/source/browse/trunk/src/net/cardroid/?r=8