Created
November 5, 2019 20:57
-
-
Save bkhezry/d2629a64e4a0d9318962a53b60d9ff17 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.github.bkhezry.buildingcollection.service; | |
import android.app.IntentService; | |
import android.app.Notification; | |
import android.app.NotificationChannel; | |
import android.app.NotificationManager; | |
import android.app.Service; | |
import android.content.Intent; | |
import android.location.Location; | |
import android.os.Build; | |
import androidx.annotation.Nullable; | |
import androidx.localbroadcastmanager.content.LocalBroadcastManager; | |
import com.github.bkhezry.buildingcollection.util.Constants; | |
import io.nlopez.smartlocation.OnLocationUpdatedListener; | |
import io.nlopez.smartlocation.SmartLocation; | |
import io.nlopez.smartlocation.location.config.LocationAccuracy; | |
import io.nlopez.smartlocation.location.config.LocationParams; | |
import io.nlopez.smartlocation.location.providers.LocationGooglePlayServicesProvider; | |
public class LocationService extends IntentService implements OnLocationUpdatedListener { | |
private static final LocationAccuracy ACCURACY_HIGH = LocationAccuracy.HIGH; //HIGH | |
private SmartLocation smartLocation; | |
/** | |
* Creates an IntentService. Invoked by your subclass's constructor. | |
*/ | |
public LocationService() { | |
super("location-service"); | |
} | |
@Override | |
protected void onHandleIntent(@Nullable Intent intent) { | |
} | |
@Override | |
public void onLocationUpdated(Location location) { | |
Intent intent = new Intent(Constants.GPS_LOCATION); | |
intent.putExtra(Constants.GPS_LOCATION, location); | |
LocalBroadcastManager.getInstance(this).sendBroadcast(intent); | |
} | |
@Override | |
public void onCreate() { | |
super.onCreate(); | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | |
NotificationChannel channel = new NotificationChannel("channel_01", "My Channel", NotificationManager.IMPORTANCE_DEFAULT); | |
NotificationManager notificationManager = getSystemService(NotificationManager.class); | |
notificationManager.createNotificationChannel(channel); | |
Notification.Builder builder = new Notification.Builder(getApplicationContext(), "channel_01").setAutoCancel(true); | |
startForeground(1, builder.build()); | |
} | |
} | |
@Override | |
public int onStartCommand(Intent intent, int flags, int startId) { | |
if (intent != null) { | |
boolean toStart = intent.getBooleanExtra("toStart", true); | |
if (toStart) { | |
smartLocation = new SmartLocation.Builder(getApplicationContext()).build(); | |
startLocation(); | |
} else { | |
SmartLocation.with(getApplicationContext()).location().stop(); | |
stopSelf(); | |
} | |
} else { | |
SmartLocation.with(getApplicationContext()).location().stop(); | |
stopSelf(); | |
} | |
return Service.START_STICKY; | |
} | |
private void startLocation() { | |
float distanceHigh = 1f; | |
long intervalHigh = 1L; | |
LocationParams locationParams = new LocationParams.Builder() | |
.setAccuracy(ACCURACY_HIGH) | |
.setInterval(intervalHigh * 1000) | |
.setDistance(distanceHigh).build(); | |
LocationGooglePlayServicesProvider provider = new LocationGooglePlayServicesProvider(); | |
provider.setCheckLocationSettings(true); | |
smartLocation.location(provider).config(locationParams).start(this); | |
} | |
@Override | |
public void onDestroy() { | |
super.onDestroy(); | |
SmartLocation.with(getApplicationContext()).location().stop(); | |
} | |
} |
Author
bkhezry
commented
Nov 5, 2019
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment