1

Когда активность открывается на телефон с API < 18 дает исключениеНе удалось найти класс «android.bluetooth.BluetoothManager»

Could not find class 'android.bluetooth.BluetoothManager' 

Несмотря на следующей проверки:

private void activateBluetoothSmart() { 

    if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE) && (Build.VERSION.SDK_INT >= 18)) { 
     final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); 
     myBluetoothAdapter = bluetoothManager.getAdapter(); 

     if (myBluetoothAdapter == null || myBluetoothAdapter.isEnabled() == false) { 
      Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableBluetoothIntent, REQUEST_ENABLE_BT); 
     } else { 
      scanForHrm(); 
     } 
    } 
} 

Кроме от того, почему проверка версии игнорируется. Я не понимаю, почему код вызывается при открытии активности, его следует вызывать только тогда, когда пользователь нажимает кнопку.

Все классы «предварительно загружены» при открытии активности? Я рассмотрел этот вопрос: NoClassDefFoundError during class load for BLE scanning callback, который предлагает проверку кода версии, а также проверку функции, но ничего не нашел.

ответ

0

Таким образом, проблема в том, что все ссылочные классы импортируются при открытии активности. Решение состояло в том, чтобы создать новый класс и поместить весь связанный с Bluetooth LE код в этот новый класс, а затем вызвать методы этого нового класса с правильными проверками условий.

Я думаю, что это работает из-за «ленивой загрузки класса», ссылочные классы теперь находятся в новом классе, и они импортируются только при вызове этого класса.

+0

Я ответил на вопрос, с чем я работал, я знаю, что ответ неадекватен, но думал, что кто-то может найти что-то лучше, чем ничего! – user1977132

Смежные вопросы