Android - 如何在Activity之外使用startActivityForResult?

7

我有一个包装类(BluetoothDiscoverer),它在服务中实例化。该类获取一个BluetoothAdapter,并在扫描附近设备之前检查蓝牙是否启用。

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

Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);

现在我已经阅读了这篇文章:使用非活动的startActivityForResult,但是我不想将我的主要活动传递到这个对象中,因为我想在BluetoothDiscoverer类中处理结果(无论用户是否接受启用蓝牙)。
如果我将BluetoothDiscoverer作为Activity的子类,似乎在调用startActivityForResult时会出现NullPointerException。
我认为这是因为我需要添加一个onCreate()/onDestroy()方法,但这违背了我所做的事情的目的,因为我需要能够在实例化此类的服务中调用BluetoothDiscoverer对象上的方法。
我还需要注册广播接收器以在启动扫描时检索相邻设备。 如果BluetoothDiscoverer类不是Activity,则如何注册此接收器?
有没有解决方法?
谢谢 Andreas
2个回答

6

startActivityForResult()只能在真正的屏幕活动中使用。请重新设计您的应用程序,使用户界面由活动驱动,然后让您的服务扫描设备。

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

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


0
在您的Service中,创建一个目的是请求蓝牙可发现性的Activity。将一个Messenger与此ActivityIntent一起传递,并让Activity启动可发现性活动:
Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接