Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package hu.company.testproject.service;
- import hu.company.testproject.async.requests.SendLocationAsync;
- import hu.company.testproject.async.requests.SendLocationAsync.SendLocationListener;
- import hu.company.testproject.async.util.AsyncResult;
- import hu.company.testproject.async.util.Boat;
- import hu.company.testproject.async.util.Boat.LaunchQueeListener;
- import hu.company.testproject.database.DatabaseHelper;
- import hu.company.testproject.debug.BatteryUtil;
- import hu.company.testproject.debug.FileLogger;
- import hu.company.testproject.modul.LocationWrapper;
- import hu.company.testproject.modul.StageUnit;
- import hu.company.testproject.modul.User;
- import hu.company.testproject.util.Bear;
- import hu.company.testproject.util.LocationJSONMaker;
- import hu.company.testproject.util.NotificationUtil;
- import hu.company.testproject.util.NumFormatter;
- import hu.company.testproject.util.ScreenUtil;
- import java.util.Random;
- import java.util.Set;
- import org.json.JSONException;
- import org.json.JSONObject;
- import android.app.Service;
- import android.content.Intent;
- import android.location.Location;
- import android.os.Build;
- import android.os.Bundle;
- import android.os.Debug;
- import android.os.IBinder;
- import android.support.v4.content.LocalBroadcastManager;
- import android.util.Log;
- import com.google.android.gms.common.ConnectionResult;
- import com.google.android.gms.common.api.GoogleApiClient;
- import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
- import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
- import com.google.android.gms.location.LocationListener;
- import com.google.android.gms.location.LocationRequest;
- import com.google.android.gms.location.LocationServices;
- import com.google.android.gms.maps.LocationSource;
- public class GpsService extends Service implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener, LaunchQueeListener, SendLocationListener {
- private static long UPDATE_INTERVAL = 5000; // /< location update interval
- // private static long FASTEST_INTERVAL = 3000; // /< fatest location update interval
- // private static float DISPLACE_METERS = 0.0f; // displacement in meters
- private LocationRequest mLocationRequest;
- private final String TAG = "Locationing_GpsService_testproject";
- private final boolean DEBUG = true;
- private GoogleApiClient mGoogleApiClient;
- private LocationWrapper mLastLocation;
- private Boat boat;
- private User user;
- private StageUnit stageUnit;
- private String TAG2 = "Debug_service";
- public static final String LOCATION_CHANGED = "location_changed";
- private void log(Object o) {
- if (DEBUG) {
- Log.i(TAG, o.toString());
- FileLogger.appendToLog(o);
- }
- }
- @Override
- public void onCreate() {
- Log.i(TAG2, "onCreate!");
- log("======================================================================");
- log("onCreate:SESSION_START|===============================================");
- log("======================================================================");
- log("Device_manufacturer:" + Build.MANUFACTURER);
- log("Device_model:" + Build.MODEL);
- log("Android_ver_number:" + Build.VERSION.RELEASE);
- log("Android_SDK_ver:" + Build.VERSION.SDK_INT);
- log("State:onCreate");
- log("VmHeapSizeLimit: " + Runtime.getRuntime().maxMemory() / 1048576);
- user = DatabaseHelper.getInstance(this).readLoggedInUser();
- if (user == null) {
- stopSelf();
- } else {
- stageUnit = DatabaseHelper.getInstance(this).readRunningStageForUser(user);
- //
- boat = new Boat(1, 5);
- boat.addListener(this);
- }
- }
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- log("onStartCommand:now");
- Log.i(TAG2, "onStartCommand!");
- Bundle extras = intent.getExtras();
- String userIdParam = extras.getString("user_id");
- // A paraméterből kapott user nem egyezik a bejelentkezett userrel, így nem futtatható a location service
- if (user != null && user.getUserId().equals(userIdParam)) {
- log("userCheck:" + "logged in user is equals param user");
- } else {
- log("userCheck:" + "logged in user is NOT equals param user");
- stopSelf();
- }
- initGoogleApiClient();
- googleApiClientConnect();
- return START_REDELIVER_INTENT;
- }
- /**
- * initing google api client
- */
- private void initGoogleApiClient() {
- Log.i(TAG2, "initGoogleApiClient!");
- mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(LocationServices.API).addConnectionCallbacks(this).addOnConnectionFailedListener(this).build();
- log("Google_API_client:initing");
- }
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- /**
- * Creating location request object with locationing parameters
- * */
- private void initLocationRequest() {
- if (mLocationRequest == null) {
- mLocationRequest = new LocationRequest();
- mLocationRequest.setInterval(UPDATE_INTERVAL);
- mLocationRequest.setFastestInterval(UPDATE_INTERVAL);
- // mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
- mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
- // mLocationRequest.setSmallestDisplacement(DISPLACE_METERS); // 10 meters
- log("initLocationRequest:initing_now");
- } else {
- log("initLocationRequest:already_inited");
- }
- log("initLocationRequest:interval_" + mLocationRequest.getInterval());
- log("initLocationRequest:priority_" + mLocationRequest.getPriority());
- }
- /**
- * Starts location listenint
- */
- private void startLocationListening() {
- Log.i(TAG2, "startLocationListening!");
- log("Starting_location_listening:now");
- LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
- }
- /**
- * Stops location listening
- */
- private void stopLocationListening() {
- Log.i(TAG2, "Stopping_location_listening:now!");
- log("Stopping_location_listening:now");
- if (mGoogleApiClient.isConnected())
- LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
- }
- @Override
- public void onDestroy() {
- Log.i(TAG2, "onDestroy!");
- log("State:onDestroy");
- BatteryUtil.unregister(getApplicationContext());
- if (boat != null) {
- boat.removeListener();
- }
- stopLocationListening();
- mGoogleApiClient.disconnect();
- }
- /**
- *
- * Calls when location is changed
- */
- @Override
- public void onLocationChanged(Location location) {
- NotificationUtil.showLocationNotification(this, stageUnit, user);
- float bearing = 0;
- // Már volt legalább 1 mérés
- if (mLastLocation != null) {
- bearing = Bear.getBearing(mLastLocation.getLatitude(), mLastLocation.getLongitude(), location.getLatitude(), location.getLongitude());
- Log.i("bearing_szamitva", bearing + "");
- }
- if (location.getAccuracy() <= 99) {
- mLastLocation = new LocationWrapper(location);
- mLastLocation.setBearing(bearing);
- mLastLocation.setStageId(stageUnit.id);
- mLastLocation.setUserId(user.getUserId());
- DatabaseHelper.getInstance(this).insertLocation(mLastLocation);
- boat.addAll(DatabaseHelper.getInstance(this).readNotSentLocations(stageUnit, user));
- Intent locationChangedIntent = new Intent(LOCATION_CHANGED);
- locationChangedIntent.putExtra("location", mLastLocation);
- LocalBroadcastManager.getInstance(this).sendBroadcast(locationChangedIntent);
- logLocation(mLastLocation);
- } else {
- log("LocationAccuracyWasTooHigh:droppingLocation");
- }
- }
- private void logLocation(LocationWrapper lw) {
- log("onLC:" + lw.toString());
- log("screenIsOn:" + ScreenUtil.isScreenOn(this));
- log("VmHeapSize:" + Runtime.getRuntime().totalMemory() / 1048576);
- log("VmAllocMem:" + ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576));
- log("NativeAllocMem:" + Debug.getNativeHeapAllocatedSize() / 1048576);
- try {
- BatteryUtil.logBatteryPercentage(this);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- private void googleApiClientConnect() {
- Log.i(TAG2, "Google_Api_Client:tries_to_connect!!");
- log("Google_Api_Client:tries_to_connect!");
- mGoogleApiClient.connect();
- }
- /**
- *
- * Google API client connected, init location request instance with params like interval, accuracy, etc
- */
- @Override
- public void onConnected(Bundle bundle) {
- Log.i(TAG2, "Google_Api_Client:connected.");
- log("Google_Api_Client:connected.");
- if (mGoogleApiClient.isConnected()) {
- log("Google_Api_Client: It was connected on (onConnected) function, working as it should.");
- initLocationRequest();
- startLocationListening();
- } else {
- log("Google_Api_Client: It was NOT connected on (onConnected) function, It is definetly bugged.");
- }
- }
- /**
- *
- * Google API client suspended
- */
- @Override
- public void onConnectionSuspended(int arg) {
- log("Google_Api_Client:connection_suspended:" + arg);
- }
- @Override
- public void onConnectionFailed(ConnectionResult connectionResult) {
- log("Google_Api_Client:connection_failed:" + connectionResult.getErrorCode());
- googleApiClientConnect();
- }
- @Override
- public void handleQueeIsFull(Set<LocationWrapper> locationSet) {
- log("Handling launch with: " + locationSet);
- SendLocationAsync sa = new SendLocationAsync(getApplicationContext(), locationSet, stageUnit);
- sa.addListener(this);
- sa.execute();
- }
- @Override
- public void handleSendLocation(AsyncResult result) {
- if (result.equals(AsyncResult.succes)) {
- log("Status:data_sent_to_server");
- // Adatbázisban átállítja "sent" re azokat a lokációkat amiket felküldtük a szerverre sikeresen.
- DatabaseHelper.getInstance(this).setLocationsToSent(boat.getAllLocations());
- boat.clear();
- } else {
- log("Status:data_FAILED_to_sent_to_server");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement