2014-06-26 27 views
5

Tôi đang cố gắng tìm tất cả các thiết bị bluetooth có sẵn trong một phạm vi. Nhưng tôi nhận được chỉ có một thiết bị tôi đang sử dụng nó trong thread trong phương pháp chạy. Tôi đã kiểm tra nhiều liên kết cho vấn đề này trên nó nhưng không thể giải quyết vấn đề này. Đây là mã của tôiCách tìm thiết bị bluetooth có sẵn trong phạm vi?

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

} 

Trong Ngoài ra tôi muốn giá trị RSSI của từng thiết bị tìm thấy, nhưng xin vui lòng bỏ qua các cú pháp

Trả lời

2

Đây là cách tôi tìm kiếm các thiết bị Bluetooth trong một Activity và hiển thị tên của họ và địa chỉ mac trong một ListView. Ngoài việc hiển thị các thiết bị trong một ListView, bạn có thể thực hiện bất cứ điều gì thực tế với đối tượng được phát hiện BluetoothDevice.

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 tập tin .xml:

<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 file:

<?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> 

thông tin bổ sung:

  • Hãy chắc chắn Bluetooth là kích hoạt trên thiết bị của bạn
  • Add quyền android.permission.BLUETOOTHandroid.permission.BLUETOOTH_ADMIN đến file manifest.xml bạn
  • Hãy chắc chắn để unregister phát sóng nhận của bạn khi phá hủy Activity
  • Hãy nhớ rằng các thiết bị Bluetooth trong phạm vi cần phải được khám phá để được tìm thấy bởi ứng dụng của bạn ation. Kích hoạt bluetooth trên chúng một mình có thể không đủ. Nó thường là trường hợp một số loại "có thể phát hiện" chế độ cần phải được kích hoạt bởi người sử dụng trước khi thiết bị có thể được phát hiện bởi các thiết bị khác.
  • Hãy nhận biết rằng phạm vi trong đó thiết bị này có thể phát hiện qua Bluetooth thường là khoảng 10m là trong nhà và xung quanh 50m ngoài trời
+0

Nhưng nếu bạn nhìn thấy mã của tôi ... nó là giống như của bạn. ..i không thấy bất kỳ sự khác biệt nào thì tại sao mã của tôi không hoạt động –

+0

Chính xác thì mã nào không hoạt động? Đang onReceive (...) được gọi là? –

+0

vấn đề đôi khi ứng dụng bị treo sau khi tiếp cận trong thiết bị phát sóng này không biết tại sao và vấn đề lớn khác là tôi chỉ nhận được một thiết bị bluetooth hoạt động thay vì tôi muốn tất cả thiết bị bluetooth hoạt động avaible ... –

Các vấn đề liên quan