我有一个在服务中实例化的包装类(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
,因此可以注册接收者。