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.
Надеюсь это поможет