2012-01-03 3 views
5

est le code de test ici que j'utilise:Comment récupérer des informations sur le périphérique Bluetooth avec le sélecteur de périphérique Bluetooth 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; 
    } 
} 

}

est ici la sortie Logcat:

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

Le code fonctionne (vous devez activer d'abord Bluetooth), je suis juste incapable de faire ce que je veux qui est de récupérer le nom de l'appareil Bluetooth et l'adresse que j'ai choisi dans l'activité.

Note:

  • Je ne cherche pas à se connecter, je veux juste les informations de dispositif de sélection.
  • Je connais d'autres méthodes pour le faire comme dans l'Android Bluetooth chat Sample

MISE À JOUR

je finis à l'aide d'un 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(); 
      } 
     } 
    } 

Répondre

0

Essayez ce code:

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

La référence du code complet est:

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

0
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

J'ai déjà une alternative qui fonctionne, mais je veux utiliser celui qui fournit Android. – Rick

Questions connexes