2014-06-26 2 views
5

Ich versuche, alle verfügbaren Bluetooth-Geräte in einer Reihe zu finden. Aber ich bekomme nur ein Gerät, ich benutze es in Thread in Run-Methode. Ich habe bereits viele Links zu diesem Problem überprüft, konnte dieses Problem jedoch nicht beheben. Hier ist mein CodeWie finden Sie verfügbare Bluetooth-Geräte in Reichweite?

public void run() { 


if(service != null) { 
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
    service.registerReceiver(this.bReceiver, filter); 
     bluetooth.startDiscovery(); 
} 

} 
class BluetoothReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent) { 

    Set<BluetoothDevice> pairedDevices = bluetooth.getBondedDevices(); 

    String action = intent.getAction(); 
    if (pairedDevices.size() > 0) { 
      for (BluetoothDevice device : pairedDevices) { 
       int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); 
     Log.d(TAG, device.getName()); 
    } 
    } 

    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); 
    Log.d(TAG, device.getName()); 
    } 
    } 

} 

Zusätzlich I RSSI-Wert jedes gefundene Gerät wollen, aber bitte die Syntax

Antwort

2

Dies ist, wie ich Suche nach Bluetooth-Geräten in einem Activity und zeigen ihren Namen ignorieren und MAC-Adresse in einem ListView. Abgesehen von der Anzeige der Geräte in einer ListView, können Sie praktisch alles mit dem gefundenen BluetoothDevice Objekt tun.

FindBluetoothActivity.java

public class FindBluetoothActivity extends Activity { 

    private BluetoothAdapter mBtAdapter; 
    private ListView mLvDevices; 
    private ArrayList<String> mDeviceList = new ArrayList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_find_bluetooth); 

     mLvDevices = (ListView) findViewById(R.id.lvDevices); 

     IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);   
     registerReceiver(mBtReceiver, filter); 

     // Getting the Bluetooth adapter 
     mBtAdapter = BluetoothAdapter.getDefaultAdapter(); 
     if(mBtAdapter != null) { 
      mBtAdapter.startDiscovery(); 
      Toast.makeText(this, "Starting discovery...", Toast.LENGTH_SHORT).show(); 
     } 
     else { 
      Toast.makeText(this, "Bluetooth disabled or not available.", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if (mBtAdapter != null) { 
      mBtAdapter.cancelDiscovery(); 
     } 
     unregisterReceiver(mBtReceiver); 
    } 

    private final BroadcastReceiver mBtReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       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); 
      } 
     } 
    }; 
} 

Layout- .xml-Datei:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".FindBluetoothActivity" > 

    <ListView 
     android:id="@+id/lvDevices" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 
    </ListView> 

</RelativeLayout> 

Android Manifest.xml Datei:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.bluetoothexample" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="18" /> 
    <uses-permission android:name="android.permission.BLUETOOTH"/> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Holo.Light" > 
     <activity 
      android:name="com.example.bluetoothexample.FindBluetoothActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Zusätzliche Informationen:

  • Stellen Sie sicher, Bluetooth auf Ihrem Gerät
  • Achten Sie darauf, zu austragen Broadcast-Empfänger aktiviert ist, wenn die
  • Berechtigungen hinzufügen android.permission.BLUETOOTH und android.permission.BLUETOOTH_ADMIN auf Ihre Manifest.xml Datei zu zerstören Activity
  • Denken Sie daran, dass die Bluetooth-Geräte im Bereich auffindbar sein müssen, um von Ihrer Anwendung gefunden werden aktion. Das Aktivieren von Bluetooth allein reicht möglicherweise nicht aus. Es ist sehr oft der Fall, dass eine Art "erkennbarer" Modus vom Benutzer aktiviert werden muss, bevor das Gerät von anderen Geräten erkannt werden kann.
  • Seien Sie sich bewusst, dass der Bereich, in denen Geräte erkennbar via Bluetooth sind in der Regel um 10m drinnen und um 50m im Freien
+0

Aber wenn Sie meinen Code zu sehen ... ist es wie bei Ihnen gleich. ..i sehe keinen Unterschied dann, warum mein Code nicht funktioniert –

+0

Was genau funktioniert nicht in Ihrem Code? Wird onReceive (...) aufgerufen? –

+0

Das Problem ist irgendwann die Anwendung wird hängt nach dem Erreichen in dieser Sendung Empfänger wissen nicht, warum und andere wichtige Problem ist, ich bekomme nur eine aktive Bluetooth-Gerät stattdessen möchte ich alle verfügbaren Bluetooth-Geräte ... –

Verwandte Themen