I have a background Android Service that's purpose is to communicate with another device (non-phone) using a Bluetooth socket. Everything works fine except that the service gets stopped and restarted by the OS when the phone display is sleeping. This restart sometimes leaves a 15-20 minute gaps where there is no communication between the Service and the Bluetooth device and I need to be able to query the device every minute. Is startForeground the proper approach?
Attempted to use:
startForeground(int, Notification) //still see gaps when phone sleeps
Service:
public class ForegroundBluetoothService extends Service{
private boolean isStarted = false;
@Override
public void onDestroy() {
super.onDestroy();
stop();
}
/**
* @see android.app.Service#onBind(android.content.Intent)
*/
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* @see android.app.Service#onStartCommand(android.content.Intent, int, int)
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
loadServiceInForeground();
return(START_STICKY);
}
private void loadServiceInForeground() {
if (!isStarted) {
isStarted=true;
Notification notification = new Notification(R.drawable.icon, "Service is Running...", System.currentTimeMillis());
Intent notificationIntent = new Intent(this, MainScreen.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, "Notification Title",
"Service is Running...", pendingIntent);
startForeground(12345, notification);
try{
queryTheBluetoothDevice();
} catch(Exception ex){
ex.printStackTrace();
}
}
}
private void stop() {
if (isStarted) {
isStarted=false;
stopForeground(true);
}
}
}