2016-08-07 9 views
0

Ich versuche, eine grundlegende Android-App einzurichten, die Bluetooth LE-Funktionalität gemäß der Dokumentation auf der Android-Entwickler-Website haben wird. Ich kann erfolgreich zu dem Punkt kommen, an dem ich einen Scan starte, aber ich finde kein Peripheriegerät, das ich zum Testen verwendet habe. Hier ist der Code so wie er ist:Android Bluetooth Low Energy Geräte nicht finden

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

@Bind(R.id.button) Button mButton; 
@Bind(R.id.listView) ListView mListView; 

private BluetoothAdapter mBluetoothAdapter; 
private boolean mScanning = true; 
private Handler mHandler; 
private static final long SCAN_PERIOD = 10000; 
BluetoothLeScanner mBluetoothAdapterBluetoothLeScanner; 
ArrayList<String> bluetoothArray = new ArrayList<>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ButterKnife.bind(this); 
    mButton.setOnClickListener(this); 
    Context mContext = getBaseContext(); 
    final BluetoothManager bluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE); 
    mBluetoothAdapter = bluetoothManager.getAdapter(); 
    mBluetoothAdapterBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); 

    if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { 
     Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     startActivityForResult(enableBtIntent, 1900); 
    } 
} 

@Override 
public void onClick(View view) { 
    scanLeDevice(mScanning); 
} 

private void scanLeDevice(final boolean enable) { 

    if (enable) { 
     // Stops scanning after a pre-defined scan period. 
//   mHandler.postDelayed(new Runnable() { 
//    @Override 
//    public void run() { 
//     mScanning = false; 
//     mBluetoothAdapter.stopLeScan(mLeScanCallback); 
//    } 
//   }, SCAN_PERIOD); 

     mScanning = true; 
     mBluetoothAdapter.startLeScan(mLeScanCallback); 

    } else { 
     mScanning = false; 
     mBluetoothAdapter.stopLeScan(mLeScanCallback); 
    } 
} 

private BluetoothAdapter.LeScanCallback mLeScanCallback = 
     new BluetoothAdapter.LeScanCallback() { 
      @Override 
      public void onLeScan(final BluetoothDevice device, int rssi, 
           byte[] scanRecord) { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Log.d("test" ,device.getName()); 

        } 
       }); 
      } 
     }; 
} 

Antwort

0

Wissen Sie genau, was der Inhalt der Werbedaten ist? Möglicherweise wird es vom Bluetooth-Stack blockiert (bluetooth.default.so). Wenn das Werbemittel beispielsweise das "entdeckbare Bit" im AD-Flag nicht gesetzt hat, wird es blockiert und Sie erhalten den Bericht nicht in Ihrer Callback-Funktion.

Verwandte Themen