繁体   English   中英

Android-活动之外的startActivityForResult?

[英]Android - startActivityForResult outside an Activity?

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

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

Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);

现在,我已阅读以下内容: 从非活动状态使用startActivityForResult

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

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

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

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

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

有没有解决的办法?

谢谢你安德烈亚斯

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

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

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

在您的Service ,创建一个Activity其目的是请求蓝牙可发现性。 Messenger与该ActivityIntent一起传递,并让该Activity开始可发现性活动:

Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);

然后,在onActivityResult()内部,通过Messenger将消息发送回您的服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM