BluetoothAdapter.getDefaultAdapter() завершается с ошибкой NullPointerException от uiautomator

Я пытаюсь проверить подключенные устройства Bluetooth на Android с помощью uiautomator.

  public void verByApi() throws UiObjectNotFoundException{
       boolean paired = false;
       Bundle params = getParams();
       String deviceName = params.getString("deviceName");//get device name for verification
       BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
       if (mBluetoothAdapter != null) {
           BluetoothDevice[] mAllBondedDevices = (BluetoothDevice[]) mBluetoothAdapter.getBondedDevices().toArray(new BluetoothDevice[0]);
           for (BluetoothDevice device : mAllBondedDevices) {
               if (device.getName().equals(deviceName)) {
                   System.out.println(deviceName + " is PAIRED");
                   paired = true;
               }

           }
           if (!paired) {
               System.out.println(deviceName + " is UNPAIRED");
           }
       } else {System.out.println("getDefaultAdapter() return null");}
   }

Но получите ошибку NullPointerException в BluetoothAdapter.getDefaultAdapter().

INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
bluetooth.Verification:
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=verByApi
INSTRUMENTATION_STATUS: class=bluetooth.Verification
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
Error in verByApi:
java.lang.NullPointerException
        at android.os.Handler.<init>(Handler.java:229)
        at android.os.Handler.<init>(Handler.java:137)
        at android.bluetooth.BluetoothAdapter.<init>(BluetoothAdapter.java:442)
        at android.bluetooth.BluetoothAdapter.getDefaultAdapter(BluetoothAdapter.java:421)
        at bluetooth.Verification.verByApi(Verification.java:66)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAutomatorTestRunner.java:160)
        at com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutomatorTestRunner.java:96)
        at com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.java:91)
        at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:243)
        at dalvik.system.NativeStart.main(Native Method)

INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=verByApi
INSTRUMENTATION_STATUS: class=bluetooth.Verification
INSTRUMENTATION_STATUS: stack=java.lang.NullPointerException
        at android.os.Handler.<init>(Handler.java:229)
        at android.os.Handler.<init>(Handler.java:137)
        at android.bluetooth.BluetoothAdapter.<init>(BluetoothAdapter.java:442)
        at android.bluetooth.BluetoothAdapter.getDefaultAdapter(BluetoothAdapter.java:421)
        at bluetooth.Verification.verByApi(Verification.java:66)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAutomatorTestRunner.java:160)
        at com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutomatorTestRunner.java:96)
        at com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.java:91)
        at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:243)
        at dalvik.system.NativeStart.main(Native Method)

INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: -1
INSTRUMENTATION_STATUS: stream=
Test results for WatcherResultPrinter=.E
Time: 0.115

FAILURES!!!
Tests run: 1,  Failures: 0,  Errors: 1


INSTRUMENTATION_STATUS_CODE: -1

Я тестирую этот код на Nexus 4 и Nexus 7 с Android 4.4.4 и 5.0.1 . Если я использую 5.0.1, он работает нормально, но на 4.4.4 я получаю ошибку. Может быть, у кого-то есть такая же проблема?

1 ответ

Из документации BlueToothAdapter:

Чтобы получить адаптер Bluetooth, представляющий локальный адаптер Bluetooth, при работе на JELLY_BEAN_MR1 и ниже вызовите статический метод getDefaultAdapter(); при работе на JELLY_BEAN_MR2 и выше, извлеките его через getSystemService(String) с BLUETOOTH_SERVICE.

Надеюсь это поможет

Другие вопросы по тегам