Checking if internet is available, before sending location to telegram.

This commit is contained in:
Filip Strajnar 2024-10-26 14:56:06 +02:00
parent 6cefb98c9b
commit c2787d179a
2 changed files with 41 additions and 3 deletions

View file

@ -3,6 +3,8 @@
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

View file

@ -9,7 +9,10 @@ import android.content.pm.ServiceInfo;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Build;
import android.os.IBinder;
import android.util.Log;
@ -17,11 +20,9 @@ import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.core.app.ServiceCompat;
import androidx.core.location.LocationManagerCompat;
import androidx.room.Room;
import com.pengrad.telegrambot.TelegramBot;
import com.pengrad.telegrambot.model.Chat;
import com.pengrad.telegrambot.request.SendLocation;
import java.time.Duration;
@ -35,6 +36,13 @@ public class LocationLoggingService extends Service implements LocationListener
Duration durationBetweenTelegramUpdates = Duration.ofMinutes(6);
long metersDistanceBetweenTelegramUpdates = 1000;
private boolean internetAvailable = false;
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build();
public LocationLoggingService() {
}
@ -70,10 +78,31 @@ public class LocationLoggingService extends Service implements LocationListener
locationDao = database.locationDao();
subscribeToLocationUpdates(this);
subscribeToNetworkUpdates();
return super.onStartCommand(intent, flags, startId);
}
public void subscribeToNetworkUpdates(){
ConnectivityManager connectivityManager =
(ConnectivityManager) getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback(){
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
Log.i(TAG, "Internet connection lost.");
internetAvailable = false;
}
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
Log.i(TAG, "Internet connection obtained.");
internetAvailable = true;
}
});
}
public List<LocationEntity> allLocations(){
return locationDao.getAll();
}
@ -135,6 +164,12 @@ public class LocationLoggingService extends Service implements LocationListener
return;
}
if(!internetAvailable)
{
Log.i(TAG, "Internet is not available.");
return;
}
lastLocation = newLocation;
sendLocationToTelegram(lastLocation);
}
@ -144,6 +179,7 @@ public class LocationLoggingService extends Service implements LocationListener
String telegramChat = getResources().getString(R.string.telegramChat);
TelegramBot bot = new TelegramBot(botToken);
Log.i(TAG, "Sending to telegram.");
new Thread(()->{
bot.execute(new SendLocation(telegramChat,
Double.valueOf(location.getLatitude()).floatValue(),