Android - Activity 之外的 startActivityForResult?

标签 android service android-activity bluetooth

我有一个在服务中实例化的包装类 (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/

相关文章:

android - 专为HTC手机打造

java - 以最小的质量损失减小 android 中的视频大小

c# - WCF Restful服务性能不佳

service - 看不到添加到 Prometheus Operator 服务监视器的目标

java - 如何制作一个记分板,在另一项 Activity 中计算结果?

java - 媒体样式 : RemoteServiceException: Bad notification posted from package

android - Activity在后台时如何接收eventbus事件

java - 如何让后台服务始终在后台运行

android - 获取调用我的应用程序的应用程序的包名称

android - Android MVP架构中如何分离Service和Activity?