Android - 活动外的startActivityForResult?

时间:2011-03-07 10:33:26

标签: 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

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

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

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

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

我还需要注册广播接收器,以便在启动扫描时检索相邻设备。如果BluetoothDiscoverer类不是Activity,我该如何注册此接收器?

有解决方法吗?

谢谢 安德烈亚斯

2 个答案:

答案 0 :(得分:6)

startActivityForResult()仅适用于真实的屏幕活动。请重新设计您的应用程序,以便用户界面来自活动,然后让您的服务扫描设备。

  

我还需要注册广播接收器,以便在启动扫描时检索相邻设备。如果BluetoothDiscoverer类不是Activity,我该如何注册此接收器?

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

答案 1 :(得分:0)

Service中,创建一个Activity,其目的是请求蓝牙可发现性。为此Messenger传递IntentActivity,并让Activity启动可发现性活动:

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

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