当我尝试在不处于活动状态,但在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()只在您第一次调用它时初始化。即使在后台线程中,对它的后续调用也将成功。

07-25 22:19