2014-10-02 27 views
5

Sto provando a visualizzare i dispositivi bluetooth continuamente e mostrandoli sullo schermo, ma non mi mostra mai tutti i dispositivi, ma solo 1 alla volta. Non riesco a trovare quello che sto facendo male. ecco il mio codice, potrebbe essere possibile trovare qualsiasi problema in esso. Grazienon riesco a trovare tutti i dispositivi bluetooth android

class monitorBluetooth extends monitor { 
private ListView mLvDevices; 
private ArrayList<String> mDeviceList = new ArrayList<String>(); 

public monitorBluetooth(service service) { 

super(service); 
    bluetooth = BluetoothAdapter.getDefaultAdapter(); 

this.bReceiver = new BluetoothReceiver(); 
} 

public void finalize() throws Throwable { 

super.finalize(); 
} 

public void run() {   

    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
    service.registerReceiver(this.bReceiver, filter); 

if(service != null) { 
     bluetooth = BluetoothAdapter.getDefaultAdapter(); 
     bluetooth.startDiscovery(); 
}  
} 
class BluetoothReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent) { 
    Set<BluetoothDevice> pairedDevices = bluetooth.getBondedDevices(); 

    String action = intent.getAction(); 

    if(BluetoothDevice.ACTION_FOUND.equals(action)) { 
    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
    String uuid = intent.getStringExtra(BluetoothDevice.EXTRA_UUID); 
    int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); 
    mDeviceList.add(device.getAddress() + ", " + device.getName()); // get mac address 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, mDeviceList); 
      mLvDevices.setAdapter(adapter); 
    } 

    } 

} 
} 

BluetoothAdapter bluetooth; 
private BluetoothReceiver bReceiver; 

risposta

1

Il tuo codice sembra funzionare. Ho scritto a LogCat ciò che aggiungi a mDeviceList e ho ottenuto più dispositivi.

Forse è come si visualizzano i nomi o forse non ci sono più di un dispositivo BT visibile in giro?

EDIT: codice Aggiunto

public class MonitorBluetooth extends Thread{ 
BluetoothAdapter bluetooth; 
private BluetoothReceiver bReceiver; 
private Context mContext; 

public MonitorBluetooth(Context context){ 
    bluetooth=BluetoothAdapter.getDefaultAdapter(); 
    this.bReceiver=new BluetoothReceiver(); 
    this.mContext=context; 
} 

public void finalize() throws Throwable{ 
    super.finalize(); 
} 

public void run(){ 
    { 
    IntentFilter filter=new IntentFilter(BluetoothDevice.ACTION_FOUND); 
    mContext.registerReceiver(this.bReceiver,filter); 
    } 
    { 
    IntentFilter filter=new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED); 
    mContext.registerReceiver(this.bReceiver,filter); 
    } 
    { 
    IntentFilter filter=new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
    mContext.registerReceiver(this.bReceiver,filter); 
    } 
    bluetooth=BluetoothAdapter.getDefaultAdapter(); 
    bluetooth.startDiscovery(); 
} 

class BluetoothReceiver extends BroadcastReceiver{ 
    public void onReceive(Context context,Intent intent){ 
    String action=intent.getAction(); 
    if(BluetoothDevice.ACTION_FOUND.equals(action)){ 
    BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
    Log.d("BluetoothReceiver","found "+device.getAddress()+", "+device.getName()); 
    } 
    else if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){ 
    Log.d("BluetoothReceiver","discovery started"); 
    } 
    else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){ 
    Log.d("BluetoothReceiver","discovery finished"); 
    context.unregisterReceiver(this); 
    } 
    } 
} 
} 

Con questo codice ottengo tutti i dispositivi in ​​giro chiamando

MonitorBluetooth monitor=new MonitorBluetooth(this.getApplicationContext()); 
monitor.start(); 

da Activity.onCreate (bundle)

+0

Ho controllato con due dispositivi vicino a me con abilitazione Bluetooth ma posso essere solo uno, ho provato più volte abilitato –

+0

! = Visibile, assicurarsi che siano visibili anche. È possibile aggiungere un messaggio Log.d sopra mDeviceList.add per vedere cosa succede. Potrebbe anche essere utile registrarsi a BluetoothAdapter.ACTION_DISCOVERY_STARTED e BluetoothAdapter.ACTION_DISCOVERY_FINISHED. – mikkokoo

+0

di sicuro li ho resi visibili fammi provare con Log.d e altri filtri di intent che hai proposto –

1

provare qualcosa di questo ordine:

public void displayDetectedDevices(){ 
    mBluetoothAdapter.startDiscovery(); 

    // Create a BroadcastReceiver for ACTION_FOUND 
    mReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      // When discovery finds a device 
      if(BluetoothDevice.ACTION_FOUND.equals(action)){ 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       String deviceName = device.getName(); 
       String deviceAddress = device.getAddress(); 
       String s = " "; 
       unpairedDevices.add(deviceName + s + deviceAddress +" \n"); 
       unpairedDevicesList = new ArrayList<String>(unpairedDevices); 
       Toast.makeText(getActivity(), unpairedDevicesList.toString(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    }; 
} 

Ricorda in onCreate() di dichiarare quanto segue:

public void onCreate(Bundle savedInstance){ 
    super.onCreate(savedInstance); 
    unpairedDevicesList = new ArrayList<String>(); 
    unpairedDevices = new HashSet<String>(); 
} 

Ricordate # 2 di dichiarare quanto segue prima onCreate():

ArrayList<String> unpairedDevicesList; 
Set<String> unpairedDevices; 

Considerazioni finali:

ho usato sia un Set e a arrayList per posizionare i dispositivi rilevati. Un Set non conterrà duplicati. A seconda di ciò che si vuole fare avendo entrambi definiti è utile in quanto forniscono diverse funzioni. Anche here è la mia pagina github che contiene più informazioni e una completa app bluetooth funzionante.

Mentre il set si popola, i dispositivi inizieranno a popolare lo schermo a seconda di come si desidera che l'interfaccia utente funzioni. Ho usato una lista semplice.

0

Ho avuto lo stesso problema con le cuffie Bluetooth. Avevo due auricolari bluetooth ed entrambi erano accesi, ma non sono stati rilevati dallo blueToothAdapter.startDiscovery().

Successivamente ho scoperto che, in caso di auricolari bluetooth, è necessario premere a lungo il pulsante di avvio per attivare la modalità di abbinamento per essere rilevati dal rilevamento bluetooth Android.

Ecco un bell'esempio di rilevamento dei dispositivi Bluetooth nelle vicinanze da developer.android.com.

Problemi correlati