2

Ich habe BLE startLescan verwendet, aber es ist jetzt veraltet. Jetzt habe ich meine API level to 23 (from 20) geändert und BluetoothLeScanner für den Zweck verwendet. Mein Start-Scan-Funktion ist:NoSuchMethod Ausnahme

public void startScan(){ 
    mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); 

    mBluetoothLeScanner.startScan(new ScanCallback() { 
      @Override 
      public void onScanResult(int callbackType, ScanResult result) { 
       super.onScanResult(callbackType, result); 

       String s = "\nRssi : "+result.getRssi()+"" + 
         "\nName (Get Device) : "+result.getDevice().getName()+"" + 
         "\nBytes"+result.getScanRecord().getBytes()+"" + 
         "\nGet Device : " + result.getDevice()+"" + 
         "\nAddress : "+result.getDevice().getAddress()+"" + 
         "\nService UUIds : "+result.getScanRecord().getServiceUuids().get(0)+"" +  //Unique 
         "\nName (Scan Record) : "+result.getScanRecord().getDeviceName()+"" + 
         "\nUuids device : "+result.getDevice().getUuids()+"" + 
         "\nDescribe contents : "+result.describeContents(); 

       //This will show you all the data in logs. 
       Log.e("All Data",s); 



      } 

      @Override 
      public void onBatchScanResults(List<ScanResult> results) { 
       super.onBatchScanResults(results); 
      } 

      @Override 
      public void onScanFailed(int errorCode) { 
       super.onScanFailed(errorCode); 
      } 
     }); 

Wenn ich die erste Zeile erreichen,

java eine nosuchmethod Ausnahme auslöst:

Methode Lookup für Wähler "getBluetoothLeScanner" mit Unterschrift „nicht bestanden () Landroid/Bluetooth/le/BluetoothLeScanner; "

+0

zeigen Sie uns den Code über "startScan" -Methode. Wie initialisierst du 'mBluetoothAdapter'?/ –

Antwort

0

Wenn Ihr Gerät API-Version 20 oder niedriger hat, kann es die neue API nicht verwenden. Sie müssen also beide Scan-Methoden implementieren und prüfen, welche Version verwendet werden soll, basierend auf der Geräte-Version. (Kitkat unterstützt die neue Scan-API nicht!)

1

In diesem Fall ist eine Instanz des BluetoothAdapters erforderlich. Gehen Sie folgendermaßen vor:

Context mContext = getBaseContext(); 
BluetoothAdapter mBluetoothAdapter = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE).getAdapter(); 
BluetoothLeScanner mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); 

mBluetoothLeScanner.startScan(new ScanCallback() {…. 

} 
+0

Der Bluetooth Adapter ist da, ich habe ihn am Anfang instanziiert: BluetoothManager Manager = (BluetoothManager) getSystemService (BLUETOOTH_SERVICE); \t \t \t \t \t \t mBluetoothAdapter = manager.getAdapter(); – Samra