我有一个在服务中实例化的包装类(BluetoothDiscoverer)。此类获得BluetoothAdapter并在扫描相邻设备之前检查是否启用了Bluetooth。

现在,如果未启用蓝牙,我希望能够在此类(BluetoothDiscoverer)中执行以下操作:

Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);

现在,我已阅读:use startActivityForResult from non-activity

但是我不想将我的主 Activity 传递给该对象,因为我想处理结果(用户是否接受启用蓝牙)
在BluetoothDiscoverer类中。

现在,如果我将BluetoothDiscoverer设为Activity的子类

即将调用startActivityForResult时,我似乎正在收到NullPointerException。

我认为这是因为我需要添加onCreate()/onDestroy()方法,
但这违反了我正在做的目的,因为我需要能够在实例化此类的服务中的BluetoothDiscoverer对象上调用方法。

启动扫描时,我还需要注册一个广播接收器以检索附近的设备。如果BluetoothDiscoverer类不是 Activity ,如何注册此接收器?

有没有解决的办法?

谢谢
安德烈亚斯(Andreas)

最佳答案

startActivityForResult()仅在实际的屏幕 Activity 中可用。请重新设计您的应用程序,以便从 Activity 中驱动用户界面,然后对设备进行服务扫描。



您可以摆脱BluetoothDiscoverer并将其逻辑移至Service,它是Context,因此可以注册接收者。

10-05 18:28