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

问题描述:

这里是我使用的测试代码:如何使用Android蓝牙设备选取器检索蓝牙设备信息?

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; 
    } 
} 

}

这里是logcat的输出:

I/IOConnectDirect(14956): onActivityResult(0,0) 
I/IOConnectDirect(14956): requestCode = REQCODE_BLUETOOTH_RESULT 
I/IOConnectDirect(14956): !RESULT_OK = FAILED(0) 

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

注:

  • 我没有尝试连接到我只是想选择的设备信息。
  • 我熟悉的其他方法来做到这一点像在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(); 
      } 
     } 
    } 

试试这个代码:

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()); 
       } 
      } 
     } 

的完整代码的参考是:

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

Try this code: 


private ArrayAdapter<String> bondedAdapter = null,newScanedAdapter = null; 


listViewPairedDevices.setAdapter(bondedAdapter);//oncreate 
listViewScanedDevices.setAdapter(newScanedAdapter);//oncreate 

public void doDiscovery(){ 
      setProgressBarIndeterminateVisibility(true); 
      setTitle("Scanning.."); 
      textViewScanedDevices.setVisibility(View.VISIBLE); 
      if(!BluetoothDemoActivity.bluetoothAdapter.isDiscovering()){ 
       BluetoothDemoActivity.bluetoothAdapter.cancelDiscovery(); 
      } 
      BluetoothDemoActivity.bluetoothAdapter.startDiscovery(); 
     }//doDiscovery() ends 


    IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
      this.registerReceiver(myBroadcastReceiver, intentFilter); 

      intentFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
      this.registerReceiver(myBroadcastReceiver, intentFilter); 

    Set<BluetoothDevice> bondedSet = BluetoothDemoActivity.bluetoothAdapter.getBondedDevices(); 
       Log.v(BluetoothDemoActivity.LOG, "BluetoothDemo : bondedSet: "+bondedSet); 

       int count = 0; 
       if(bondedSet.size() > 0){ 
        for(BluetoothDevice device : bondedSet){ 
         textViewPairedDevice.setVisibility(View.VISIBLE); 
         bondedAdapter.add(device.getName()+"\n"+device.getAddress()); 
         Log.v(BluetoothDemoActivity.LOG, " count = "+count++); 
        } 
       }else{ 
        bondedAdapter.add("No Devices"); 
       } 



    private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       // TODO Auto-generated method stub 
       String action = intent.getAction(); 

       if(BluetoothDevice.ACTION_FOUND.equals(action)){ 
        buttonScanScanDevices.setVisibility(View.GONE); 
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
        if(device.getBondState()!= BluetoothDevice.BOND_BONDED){ 
         newScanedAdapter.add(device.getName()+"\n"+device.getAddress()); 
        } 
       }else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){ 
        setProgressBarIndeterminateVisibility(false); 
        setTitle("Select Device"); 
        if(newScanedAdapter.getCount() == 0){ 
         newScanedAdapter.add("no new device"); 
        } 
       }else if(intent.getAction().equals("android.bluetooth.device.action.PAIRING_REQUEST")){ 
        System.out.println("Pairing request came"); 
        pair(); 
       } 
      } 
     };//BroadcastReceiverends 
+0

我已经有工作的选择,但我想使用Android提供了一个。 – Rick 2012-01-03 15:10:47