Android – startActivityForResult之外的一个活动?

我有一个包装类(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类不是一个活动,我该如何注册这个接收器?

有没有解决这个问题?

谢谢安德烈亚斯

Solutions Collecting From Web of "Android – startActivityForResult之外的一个活动?"

startActivityForResult()只能从实际的屏幕活动中获得。 请重新devise您的应用程序,以便从活动中驱动用户界面, 然后让您的服务扫描设备。

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

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

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

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

然后,在onActivityResult()里面通过Messenger发送一条消息回你的服务。