Android Servis Arka Planda Çalışmıyor
05.08.2017 - 06:48
Merhaba Arkadaşlar Android servis oluşturdum. Bu servis konum güncellenince api çağırıyor ve veri kaydediyor. Uygulama ön planda olunca sorun yok ancak arka plana alınca servisim çalışmıyor . Sebebi ne olabilir ? Servisim aşağıdaki gibidir.
public class VehicleGPSTrackerService extends Service { private LocationListener listener; private LocationManager locationManager; boolean gps_enabled = false; private Location llocation; private static final long MIN_TIME_BW_UPDATES = 1000 * 5 * 1; // 5 saniye public Coordinate lastCoordinate; TelephonyManager mTelephonyManager; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this,getBaseContext().getResources().getString(R.string.tracking_on_started), Toast.LENGTH_SHORT).show(); Log.e("onStartCommand", "GPS Service onStartCommand"); lastCoordinate = new Coordinate(); lastCoordinate.Latitude =0; lastCoordinate.Longitude = 0; try { locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if(!isNetworkAvailable(getBaseContext())) { Intent i = new Intent("location_update"); i.putExtra("status", getBaseContext().getResources().getString(R.string.internet_connection_notfound)); sendBroadcast(i); } if(!gps_enabled) { Intent i = new Intent("location_update"); i.putExtra("status", getBaseContext().getResources().getString(R.string.cannot_gps_data)); sendBroadcast(i); } if (isNetworkAvailable(getBaseContext()) && gps_enabled) { if (locationManager != null) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return Service.START_STICKY; } llocation = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER); updateWithNewLocation(llocation); //locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,MIN_TIME_BW_UPDATES,0, this.listener); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MIN_TIME_BW_UPDATES,0, this.listener); } } } catch (Exception e) { Log.e("gpsserviceexception",e.getMessage()); } return super.onStartCommand(intent, flags, startId); } public boolean isNetworkAvailable(final Context context) { final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)); return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected(); } public void updateWithNewLocation(Location location) { listener = new LocationListener() { @Override public void onLocationChanged(Location location) { lastCoordinate = new Coordinate(); double lat = location.getLatitude(); double longi = location.getLongitude(); lastCoordinate.Latitude =lat; lastCoordinate.Longitude = longi; DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(location.getTime()); String formatted = format.format(date); final JSONObject headerObject = new JSONObject(); final JSONObject params = new JSONObject(); try { JSONObject coordinate = new JSONObject(); coordinate.put("Latitude",lastCoordinate.Latitude); coordinate.put("Longitude",lastCoordinate.Longitude); JSONArray jsonArrayLogs = new JSONArray(); params.put("Status", EnumHelpers.EnumStatus.Active.getValue()); params.put("Coordinate", coordinate); params.put("LastInfoDate",formatted); jsonArrayLogs.put(params); headerObject.put("UserId", AppEngine.CURRENT_USER.getId()); headerObject.put("ActiveDeviceId",getDeviceImei()); headerObject.put("Details",jsonArrayLogs); Log.e("AktiveData",headerObject.toString()); SentDataToVolley(headerObject); } catch (Exception e){} Intent i = new Intent("location_update"); i.putExtra("status", getBaseContext().getResources().getString(R.string.active)); sendBroadcast(i); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { Intent i = new Intent("location_update"); i.putExtra("status", getBaseContext().getResources().getString(R.string.active)); sendBroadcast(i); } @Override public void onProviderDisabled(String provider) { final JSONObject headerObject = new JSONObject(); final JSONObject params = new JSONObject(); try { JSONObject coordinate = new JSONObject(); coordinate.put("Latitude",0); coordinate.put("Longitude",0); JSONArray jsonArrayLogs = new JSONArray(); params.put("Status", EnumHelpers.EnumStatus.NoGpsSignal.getValue()); params.put("Coordinate", coordinate); params.put("LastInfoDate",getCurrentDate()); jsonArrayLogs.put(params); headerObject.put("UserId", AppEngine.CURRENT_USER.getId()); headerObject.put("ActiveDeviceId",getDeviceImei()); headerObject.put("Details",jsonArrayLogs); Log.e("NoSignalData",headerObject.toString()); SentDataToVolley(headerObject); } catch (Exception e){} Intent i = new Intent("location_update"); i.putExtra("status", getBaseContext().getResources().getString(R.string.cannot_gps_data)); sendBroadcast(i); } }; } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, getBaseContext().getResources().getString(R.string.stop_tracking), Toast.LENGTH_LONG).show(); final JSONObject headerObject = new JSONObject(); final JSONObject params = new JSONObject(); try { JSONObject coordinate = new JSONObject(); coordinate.put("Latitude",lastCoordinate.Latitude); coordinate.put("Longitude",lastCoordinate.Longitude); JSONArray jsonArrayLogs = new JSONArray(); params.put("Status", EnumHelpers.EnumStatus.StopTracking.getValue()); params.put("Coordinate", coordinate); params.put("LastInfoDate",getCurrentDate()); jsonArrayLogs.put(params); headerObject.put("UserId", AppEngine.CURRENT_USER.getId()); headerObject.put("ActiveDeviceId",getDeviceImei()); headerObject.put("Details",jsonArrayLogs); Log.e("StopTrackingData",headerObject.toString()); SentDataToVolley(headerObject); } catch (Exception e){} if(locationManager != null){ //noinspection MissingPermission locationManager.removeUpdates(listener); } } public void SentDataToVolley(final JSONObject headerObject ) { RequestQueue getRequestQueue = Volley.newRequestQueue(getApplicationContext()); JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, UrlConfig.VOLLEY_MOBILEGPSLOG, headerObject, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.e("onResponse", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d("onErrorResponse", "Error: " + error.getMessage()); Log.e("Oonfail", error.toString()); } }) { @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/json; charset=utf-8"); headers.put("Authorization-Token", ConstansApi.API_KEY); return headers; } }; jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); // Adding request to request queue getRequestQueue.add(jsonObjReq); } public String getCurrentDate() { Calendar c = Calendar.getInstance(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDate = format.format(c.getTime()); return strDate; } private String getDeviceImei() { mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String deviceid = mTelephonyManager.getDeviceId(); Log.d("msg", "DeviceImei " + deviceid); return deviceid; } }
Bu servisi de şu şekilde çağırıyorum
Intent i =new Intent(MainActivity.this,VehicleGPSTrackerService.class);
startService(i);
manifast.xml dosyası da şu sekildedir
<service
android:name=".VehicleGPSTrackerService"
android:enabled="true"
android:exported="false"/>
48
Görüntülenme
0 Beğeni