当我尝试在不处于活动状态,但在TimerTask
中(在Service
中创建)获取默认蓝牙适配器时,请使用:
BluetoothAdapter.getDefaultAdapter();
我得到以下异常:
Exception while invoking java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
我的应用程序没有任何活动-那么有没有可能让这个适配器远离活动?
最佳答案
这似乎是android中的一个bug,在android 4.0(冰激凌三明治)中仍然存在。
要解决此问题并能够从工作线程(例如asyncttask)调用BluetoothAdapter.getDefaultAdapter()
,只需在主ui线程(例如,在当前活动的BluetoothAdapter.getDefaultAdapter()
内)上调用一次onCreate()
。
runtimeexception只在初始化期间抛出,而BluetoothAdapter.getDefaultAdapter()
只在您第一次调用它时初始化。即使在后台线程中,对它的后续调用也将成功。