我有一个在服务中实例化的包装类 (BluetoothDiscoverer)。此类获取一个 BluetoothAdapter 并在扫描邻近设备之前检查蓝牙是否已启用。
现在,如果未启用蓝牙,我希望能够在此类 (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,我该如何注册这个接收器?
有解决办法吗?
谢谢 安德烈亚斯
最佳答案
startActivityForResult()
仅适用于真实的屏幕 Activity 。请重新设计您的应用程序,以便用户界面由 Activity 驱动,然后让您的服务扫描设备。
I also need to register a broadcast receiver for retrieving neighbouring devices when a scan is initiated. If the BluetoothDiscoverer class is not an Activity, how do I register this receiver?
您摆脱了 BluetoothDiscoverer
并将其逻辑移动到 Service
中,这是一个 Context
因此可以注册接收器。
关于Android - Activity 之外的 startActivityForResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218544/