I have a wrapper class (BluetoothDiscoverer) which is instantiated within a Service. This class obtains a BluetoothAdapter and checks whether Bluetooth is enabled before scanning for neighbouring devices.
Now if Bluetooth is not enabled I want to be able to do the following within this class (BluetoothDiscoverer):
Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);
Now I have read this: use startActivityForResult from non-activity
but I don’t want to pass my Main Activity into this object since I want to deal with the result (whether the user accepts to enable bluetooth or not)
within the BluetoothDiscoverer class.
Now If I make BluetoothDiscoverer a subclass of Activity
I seem to be getting a NullPointerException when the startActivityForResult is about to be called.
I think this is because I need to add an onCreate()/onDestroy() method,
but this defeats the purpose of what I am doing as I need to be able to call methods on the BluetoothDiscoverer object within the service that instantiates this class.
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?
Is there a work around for this?
Thank you
Andreas
startActivityForResult()is only available from real on-screen activities. Please redesign your application so that the user interface is driven from activities, then have your service scan for devices.You get rid of
BluetoothDiscovererand move its logic into theService, which is aContextand therefore can register receivers.