mendapatkan lokasi dengan service android
package dev .malikkurosaki .bestlocation ;
import android .Manifest ;
import android .annotation .TargetApi ;
import android .app .AlarmManager ;
import android .app .Notification ;
import android .app .NotificationManager ;
import android .app .PendingIntent ;
import android .app .Service ;
import android .content .BroadcastReceiver ;
import android .content .Context ;
import android .content .Intent ;
import android .content .IntentFilter ;
import android .content .pm .PackageManager ;
import android .location .Location ;
import android .location .LocationListener ;
import android .location .LocationManager ;
import android .os .Build ;
import android .os .Bundle ;
import android .os .CountDownTimer ;
import android .os .Handler ;
import android .os .HandlerThread ;
import android .os .IBinder ;
import android .os .Looper ;
import android .os .SystemClock ;
import android .util .Log ;
import android .widget .Toast ;
import com .firebase .geofire .GeoFire ;
import com .firebase .geofire .GeoLocation ;
import com .google .android .gms .common .ConnectionResult ;
import com .google .android .gms .common .api .GoogleApiClient ;
import com .google .android .gms .location .FusedLocationProviderClient ;
import com .google .android .gms .location .LocationCallback ;
import com .google .android .gms .location .LocationRequest ;
import com .google .android .gms .location .LocationResult ;
import com .google .android .gms .location .LocationServices ;
import com .google .android .gms .maps .GoogleMap ;
import com .google .android .gms .maps .OnMapReadyCallback ;
import com .google .android .gms .tasks .OnCanceledListener ;
import com .google .android .gms .tasks .OnFailureListener ;
import com .google .android .gms .tasks .OnSuccessListener ;
import com .google .firebase .auth .FirebaseAuth ;
import com .google .firebase .auth .FirebaseUser ;
import com .google .firebase .database .DatabaseError ;
import com .google .firebase .database .DatabaseReference ;
import com .google .firebase .database .FirebaseDatabase ;
import java .text .SimpleDateFormat ;
import java .util .Date ;
import java .util .HashMap ;
import java .util .Locale ;
import java .util .Map ;
import java .util .Timer ;
import java .util .TimerTask ;
import androidx .annotation .NonNull ;
import androidx .annotation .Nullable ;
import androidx .core .app .ActivityCompat ;
import androidx .core .app .NotificationCompat ;
import androidx .core .content .ContextCompat ;
import androidx .localbroadcastmanager .content .LocalBroadcastManager ;
public class MyService extends Service
implements OnMapReadyCallback , GoogleApiClient .ConnectionCallbacks ,
GoogleApiClient .OnConnectionFailedListener ,
com .google .android .gms .location .LocationListener {
private static final int ASHIS = 1234 ;
Intent intentForPendingIntent ;
HandlerThread handlerThread ;
Looper looper ;
GoogleApiClient mGoogleApiClient ;
private LocationRequest mLocationRrequest ;
private static final int UPDATE_INTERVAL = 1000 ;
private static final int FASTEST_INTERVAL = 100 ;
private static final int DSIPLACEMENT_UPDATES = 1 ;
;
private Handler handler1 ;
private Runnable runable1 ;
private Location mLastLocation ;
private float waitingTime ;
private int waiting2min ;
private Location locationOld ;
private double distance ;
private float totalWaiting ;
private float speed ;
private long timeGpsUpdate ;
private long timeOld ;
private NotificationManager mNotificationManager ;
Notification notification ;
PendingIntent resultPendingIntent ;
NotificationCompat .Builder mBuilder ;
private DatabaseReference reference ;
private FirebaseUser user ;
// Sets an ID for the notification
int mNotificationId = 001 ;
private static final String TAG = "BroadcastService" ;
public static final String BROADCAST_ACTION = "speedExceeded" ;
private final Handler handler = new Handler ();
Intent intentforBroadcast ;
int counter = 0 ;
private Runnable sendUpdatesToUI ;
@ Nullable
@ Override
public IBinder onBind (Intent intent ) {
Toast .makeText (MyService .this , "binder" , Toast .LENGTH_SHORT ).show ();
return null ;
}
@ Override
public void onCreate () {
showNotification ();
intentforBroadcast = new Intent (BROADCAST_ACTION );
reference = FirebaseDatabase .getInstance ().getReference ();
user = FirebaseAuth .getInstance ().getCurrentUser ();
Toast .makeText (MyService .this , "created" , Toast .LENGTH_SHORT ).show ();
if (mGoogleApiClient == null ) {
mGoogleApiClient = new GoogleApiClient .Builder (this )
.addConnectionCallbacks (this )
.addOnConnectionFailedListener (this )
.addApi (LocationServices .API )
.build ();
}
createLocationRequest ();
mGoogleApiClient .connect ();
}
@ TargetApi (Build .VERSION_CODES .JELLY_BEAN )
private void showNotification () {
mBuilder =
(NotificationCompat .Builder ) new NotificationCompat .Builder (this )
.setSmallIcon (R .drawable .ic_launcherx )
.setContentTitle ("Total Waiting Time" )
.setContentText (totalWaiting +"" );
Intent resultIntent = new Intent (this , MainActivity .class );
// Because clicking the notification opens a new ("special") activity, there's
// no need to create an artificial back stack.
PendingIntent resultPendingIntent =
PendingIntent .getActivity (
this ,
0 ,
resultIntent ,
PendingIntent .FLAG_UPDATE_CURRENT
);
mBuilder .setContentIntent (resultPendingIntent );
NotificationManager mNotifyMgr =
(NotificationManager ) getSystemService (NOTIFICATION_SERVICE );
// Builds the notification and issues it.
mNotifyMgr .notify (mNotificationId , mBuilder .build ());
startForeground (001 , mBuilder .getNotification ());
}
@ Override
public void onLocationChanged (Location location ) {
//handler.removeCallbacks(runable);
Toast .makeText (MyService .this , "speed" + speed , Toast .LENGTH_SHORT ).show ();
timeGpsUpdate = location .getTime ();
float delta = (timeGpsUpdate - timeOld ) / 1000 ;
if (location .getAccuracy () < 100 ) {
speed = location .getSpeed ();
distance += mLastLocation .distanceTo (location );
Log .e ("distance" , "onLocationChanged: " + distance );
//mLastLocation = location;
//newLocation = mLastLocation;
Log .e ("locationNya:" , location .getLatitude () + "" );
//speed = (long) (distance / delta);
locationOld = location ;
mLastLocation = location ;
Map <String ,Object > paketan = new HashMap <>();
paketan .put (Helper_tools .Kunci .lat ,location .getLatitude ());
paketan .put (Helper_tools .Kunci .lng ,location .getLongitude ());
paketan .put (Helper_tools .Kunci .key ,Helper_tools .getEmail ());
paketan .put (Helper_tools .Kunci .nama ,Helper_tools .getName ());
paketan .put (Helper_tools .Kunci .gam ,Helper_tools .getUserFoto ());
reference .child (Helper_tools .getLokasiDb ()).setValue (paketan ).addOnFailureListener (new OnFailureListener () {
@ Override
public void onFailure (@ NonNull Exception e ) {
Toast .makeText (getApplicationContext (),"kegagalan koneksi" ,Toast .LENGTH_LONG ).show ();
}
});
diaplayViews ();
}
diaplayViews ();
/*if (map != null) {
map.addMarker(new MarkerOptions()
.position(new LatLng(location.getLatitude(), location.getLongitude()))
.title("Hello world"));
}*/
}
private void createLocationRequest () {
mLocationRrequest = new LocationRequest ();
mLocationRrequest .setInterval (UPDATE_INTERVAL );
mLocationRrequest .setFastestInterval (FASTEST_INTERVAL );
mLocationRrequest .setPriority (LocationRequest .PRIORITY_HIGH_ACCURACY );
mLocationRrequest .setSmallestDisplacement (DSIPLACEMENT_UPDATES );
}
private void methodToCalculateWaitingTime () {
if (handler1 != null ) {
handler1 .removeCallbacks (runable1 );
}
Log .e ("Here" , "here1" );
handler1 = new Handler (Looper .getMainLooper ());
runable1 = new Runnable () {
public void run () {
Log .e ("Here" , "here2:" + mLastLocation .getSpeed ());
if (mLastLocation != null ) {
diaplayViews ();
if ((mLastLocation .getSpeed () == 0.0 )) {
increaseTime ();
} else {
if (waitingTime <= 120 ) {
waiting2min = 0 ;
}
}
handler1 .postDelayed (this , 10000 );
} else {
if (ActivityCompat .checkSelfPermission (MyService .this , Manifest .permission .ACCESS_FINE_LOCATION ) != PackageManager .PERMISSION_GRANTED && ActivityCompat .checkSelfPermission (MyService .this , Manifest .permission .ACCESS_COARSE_LOCATION ) != PackageManager .PERMISSION_GRANTED ) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return ;
}
locationOld = LocationServices .FusedLocationApi .getLastLocation (mGoogleApiClient );
mLastLocation = locationOld ;
}
}
};
handler1 .postDelayed (runable1 , 10000 );
}
private void diaplayViews () {
float price = (float ) (14 + distance * 0.5 );
//textDistance.setText(waitingTime);a
}
private void increaseTime () {
waiting2min = waiting2min + 10 ;
if (waiting2min >= 120 )
{
if (waiting2min == 120 ) {
waitingTime = waitingTime + 2 * 60 ;
} else {
waitingTime = waitingTime + 10 ;
}
totalWaiting = waitingTime / 60 ;
showNotification ();
Log .e ("waiting Time" , "increaseTime: " + totalWaiting );
}
}
@ Override
public void onDestroy () {
Toast .makeText (MyService .this , "distroyed" , Toast .LENGTH_SHORT ).show ();
if (mGoogleApiClient .isConnected ()) {
mGoogleApiClient .disconnect ();
}
mGoogleApiClient .disconnect ();
}
@ Override
public void onConnected (Bundle bundle ) {
Log .e ("Connection_fusion" , "connected" );
startLocationUpdates ();
}
@ Override
public void onConnectionSuspended (int i ) {
}
private void startLocationUpdates () {
Location location = plotTheInitialMarkerAndGetInitialGps ();
if (location == null ) {
plotTheInitialMarkerAndGetInitialGps ();
} else {
mLastLocation = location ;
methodToCalculateWaitingTime ();
}
}
private Location plotTheInitialMarkerAndGetInitialGps () {
if (ActivityCompat .checkSelfPermission (this , Manifest .permission .ACCESS_FINE_LOCATION ) != PackageManager .PERMISSION_GRANTED && ActivityCompat .checkSelfPermission (this , Manifest .permission .ACCESS_COARSE_LOCATION ) != PackageManager .PERMISSION_GRANTED ) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return null ;
}
LocationServices .FusedLocationApi .requestLocationUpdates (mGoogleApiClient , mLocationRrequest , this );
locationOld = LocationServices .FusedLocationApi .getLastLocation (mGoogleApiClient );
if ((locationOld != null )) {
mLastLocation = locationOld ;
timeOld = locationOld .getTime ();
} else {
startLocationUpdates ();
}
return mLastLocation ;
}
@ Override
public int onStartCommand (Intent intent , int flags , int startId ) {
onStart (intent , startId );
Toast .makeText (MyService .this , "start command" , Toast .LENGTH_SHORT ).show ();
sendUpdatesToUI = new Runnable () {
public void run () {
DisplayLoggingInfo ();
handler .postDelayed (this , 10000 ); // 5 seconds
}
};
handler .postDelayed (sendUpdatesToUI , 10000 ); // 1 second
Log .i ("LocalService" , "Received start id " + startId + ": " + intent );
return START_NOT_STICKY ;
}
@ Override
public void onStart (Intent intent , int startId ) {
sendUpdatesToUI = new Runnable () {
public void run () {
Log .e ("sent" , "sent" );
DisplayLoggingInfo ();
handler .postDelayed (this , 5000 ); // 5 seconds
}
};
handler .postDelayed (sendUpdatesToUI , 1000 ); // 1 second
Log .i ("LocalService" , "Received start id " + startId + ": " + intent );
super .onStart (intent , startId );
}
private void DisplayLoggingInfo () {
Log .d (TAG , "entered DisplayLoggingInfo" );
intentforBroadcast .putExtra ("distance" , distance );
LocalBroadcastManager .getInstance (this ).sendBroadcast (intentforBroadcast );
}
@ Override
public void onConnectionFailed (ConnectionResult connectionResult ) {
}
@ Override
public void onMapReady (GoogleMap googleMap ) {
}
}
package dev .malikkurosaki .bestlocation ;
import android .Manifest ;
import android .annotation .TargetApi ;
import android .app .AlarmManager ;
import android .app .Notification ;
import android .app .NotificationManager ;
import android .app .PendingIntent ;
import android .app .Service ;
import android .content .BroadcastReceiver ;
import android .content .Context ;
import android .content .Intent ;
import android .content .IntentFilter ;
import android .content .pm .PackageManager ;
import android .location .Location ;
import android .location .LocationListener ;
import android .location .LocationManager ;
import android .os .Build ;
import android .os .Bundle ;
import android .os .CountDownTimer ;
import android .os .Handler ;
import android .os .HandlerThread ;
import android .os .IBinder ;
import android .os .Looper ;
import android .os .SystemClock ;
import android .util .Log ;
import android .widget .Toast ;
import com .firebase .geofire .GeoFire ;
import com .firebase .geofire .GeoLocation ;
import com .google .android .gms .common .ConnectionResult ;
import com .google .android .gms .common .api .GoogleApiClient ;
import com .google .android .gms .location .FusedLocationProviderClient ;
import com .google .android .gms .location .LocationCallback ;
import com .google .android .gms .location .LocationRequest ;
import com .google .android .gms .location .LocationResult ;
import com .google .android .gms .location .LocationServices ;
import com .google .android .gms .maps .GoogleMap ;
import com .google .android .gms .maps .OnMapReadyCallback ;
import com .google .android .gms .tasks .OnCanceledListener ;
import com .google .android .gms .tasks .OnFailureListener ;
import com .google .android .gms .tasks .OnSuccessListener ;
import com .google .firebase .auth .FirebaseAuth ;
import com .google .firebase .auth .FirebaseUser ;
import com .google .firebase .database .DatabaseError ;
import com .google .firebase .database .DatabaseReference ;
import com .google .firebase .database .FirebaseDatabase ;
import java .text .SimpleDateFormat ;
import java .util .Date ;
import java .util .HashMap ;
import java .util .Locale ;
import java .util .Map ;
import java .util .Random ;
import java .util .Timer ;
import java .util .TimerTask ;
import androidx .annotation .NonNull ;
import androidx .annotation .Nullable ;
import androidx .core .app .ActivityCompat ;
import androidx .core .app .NotificationCompat ;
import androidx .core .content .ContextCompat ;
import androidx .localbroadcastmanager .content .LocalBroadcastManager ;
public class MyService extends Service
implements OnMapReadyCallback , GoogleApiClient .ConnectionCallbacks ,
GoogleApiClient .OnConnectionFailedListener ,
com .google .android .gms .location .LocationListener {
private static final int ASHIS = 1234 ;
Intent intentForPendingIntent ;
HandlerThread handlerThread ;
Looper looper ;
GoogleApiClient mGoogleApiClient ;
private LocationRequest mLocationRrequest ;
private static final int UPDATE_INTERVAL = 1000 ;
private static final int FASTEST_INTERVAL = 100 ;
private static final int DSIPLACEMENT_UPDATES = 1 ;
;
private Handler handler1 ;
private Runnable runable1 ;
private Location mLastLocation ;
private float waitingTime ;
private int waiting2min ;
private Location locationOld ;
private double distance ;
private float totalWaiting ;
private float speed ;
private long timeGpsUpdate ;
private long timeOld ;
private NotificationManager mNotificationManager ;
Notification notification ;
PendingIntent resultPendingIntent ;
NotificationCompat .Builder mBuilder ;
private DatabaseReference reference ;
private FirebaseUser user ;
// Sets an ID for the notification
int mNotificationId = 001 ;
private static final String TAG = "BroadcastService" ;
public static final String BROADCAST_ACTION = "speedExceeded" ;
private final Handler handler = new Handler ();
Intent intentforBroadcast ;
int counter = 0 ;
private Runnable sendUpdatesToUI ;
@ Nullable
@ Override
public IBinder onBind (Intent intent ) {
//Toast.makeText(MyService.this, "binder", Toast.LENGTH_SHORT).show();
return null ;
}
@ Override
public void onCreate () {
showNotification ();
intentforBroadcast = new Intent (BROADCAST_ACTION );
reference = FirebaseDatabase .getInstance ().getReference ();
user = FirebaseAuth .getInstance ().getCurrentUser ();
//Toast.makeText(MyService.this, "created", Toast.LENGTH_SHORT).show();
if (mGoogleApiClient == null ) {
mGoogleApiClient = new GoogleApiClient .Builder (this )
.addConnectionCallbacks (this )
.addOnConnectionFailedListener (this )
.addApi (LocationServices .API )
.build ();
}
createLocationRequest ();
mGoogleApiClient .connect ();
}
@ TargetApi (Build .VERSION_CODES .JELLY_BEAN )
private void showNotification () {
mBuilder =
(NotificationCompat .Builder ) new NotificationCompat .Builder (this )
.setSmallIcon (R .drawable .ic_launcherx )
.setContentTitle ("proteksi aktif" )
.setContentText ("best anti hack" );
Intent resultIntent = new Intent (this , MainActivity .class );
// Because clicking the notification opens a new ("special") activity, there's
// no need to create an artificial back stack.
PendingIntent resultPendingIntent =
PendingIntent .getActivity (
this ,
0 ,
resultIntent ,
PendingIntent .FLAG_UPDATE_CURRENT
);
mBuilder .setContentIntent (resultPendingIntent );
NotificationManager mNotifyMgr =
(NotificationManager ) getSystemService (NOTIFICATION_SERVICE );
// Builds the notification and issues it.
mNotifyMgr .notify (mNotificationId , mBuilder .build ());
startForeground (001 , mBuilder .getNotification ());
}
@ Override
public void onLocationChanged (Location location ) {
//handler.removeCallbacks(runable);
//Toast.makeText(MyService.this, "speed" + speed, Toast.LENGTH_SHORT).show();
timeGpsUpdate = location .getTime ();
float delta = (timeGpsUpdate - timeOld ) / 1000 ;
if (location .getAccuracy () < 100 ) {
speed = location .getSpeed ();
distance += mLastLocation .distanceTo (location );
//Log.e("distance", "onLocationChanged: " + distance);
//mLastLocation = location;
//newLocation = mLastLocation;
//Log.e("locationNya:", location.getLatitude() + "");
//speed = (long) (distance / delta);
locationOld = location ;
mLastLocation = location ;
mengUpdateBerkala (location );
diaplayViews ();
}
diaplayViews ();
/*if (map != null) {
map.addMarker(new MarkerOptions()
.position(new LatLng(location.getLatitude(), location.getLongitude()))
.title("Hello world"));
}*/
}
void mengUpdateBerkala (Location location ){
new Handler ().post (new Runnable () {
@ Override
public void run () {
new CountDownTimer (10000 , 10000 ) {
@ Override
public void onTick (long l ) {
}
@ Override
public void onFinish () {
mengUpdateLokasi (location );
this .start ();
}
}.start ();
}
});
}
void mengUpdateLokasi (Location location ){
if (location != null ){
int idNya = new Random ().nextInt (100 -1 )+1 ;
Map <String ,Object > paketan = new HashMap <>();
paketan .put (Helper_tools .Kunci .lat ,location .getLatitude ());
paketan .put (Helper_tools .Kunci .lng ,location .getLongitude ());
paketan .put (Helper_tools .Kunci .key ,Helper_tools .getEmail ());
paketan .put (Helper_tools .Kunci .nama ,Helper_tools .getName ());
paketan .put (Helper_tools .Kunci .gam ,Helper_tools .getUserFoto ());
paketan .put ("idnya" ,idNya );
reference .child (Helper_tools .getLokasiDb ()).setValue (paketan ).addOnFailureListener (new OnFailureListener () {
@ Override
public void onFailure (@ NonNull Exception e ) {
Toast .makeText (getApplicationContext (),"kegagalan koneksi" ,Toast .LENGTH_LONG ).show ();
}
});
}
}
private void createLocationRequest () {
mLocationRrequest = new LocationRequest ();
mLocationRrequest .setInterval (UPDATE_INTERVAL );
mLocationRrequest .setFastestInterval (FASTEST_INTERVAL );
mLocationRrequest .setPriority (LocationRequest .PRIORITY_HIGH_ACCURACY );
mLocationRrequest .setSmallestDisplacement (DSIPLACEMENT_UPDATES );
}
private void methodToCalculateWaitingTime () {
if (handler1 != null ) {
handler1 .removeCallbacks (runable1 );
}
//Log.e("Here", "here1");
handler1 = new Handler (Looper .getMainLooper ());
runable1 = new Runnable () {
public void run () {
//Log.e("Here", "here2:" + mLastLocation.getSpeed());
if (mLastLocation != null ) {
diaplayViews ();
if ((mLastLocation .getSpeed () == 0.0 )) {
increaseTime ();
} else {
if (waitingTime <= 120 ) {
waiting2min = 0 ;
}
}
handler1 .postDelayed (this , 10000 );
} else {
if (ActivityCompat .checkSelfPermission (MyService .this , Manifest .permission .ACCESS_FINE_LOCATION ) != PackageManager .PERMISSION_GRANTED && ActivityCompat .checkSelfPermission (MyService .this , Manifest .permission .ACCESS_COARSE_LOCATION ) != PackageManager .PERMISSION_GRANTED ) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return ;
}
locationOld = LocationServices .FusedLocationApi .getLastLocation (mGoogleApiClient );
mLastLocation = locationOld ;
}
}
};
handler1 .postDelayed (runable1 , 10000 );
}
private void diaplayViews () {
float price = (float ) (14 + distance * 0.5 );
//textDistance.setText(waitingTime);a
}
private void increaseTime () {
waiting2min = waiting2min + 10 ;
if (waiting2min >= 120 )
{
if (waiting2min == 120 ) {
waitingTime = waitingTime + 2 * 60 ;
} else {
waitingTime = waitingTime + 10 ;
}
totalWaiting = waitingTime / 60 ;
showNotification ();
//Log.e("waiting Time", "increaseTime: " + totalWaiting);
}
}
@ Override
public void onDestroy () {
/*Toast.makeText(MyService.this, "distroyed", Toast.LENGTH_SHORT).show();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
mGoogleApiClient.disconnect();*/
}
@ Override
public void onConnected (Bundle bundle ) {
//Log.e("Connection_fusion", "connected");
startLocationUpdates ();
}
@ Override
public void onConnectionSuspended (int i ) {
}
private void startLocationUpdates () {
Location location = plotTheInitialMarkerAndGetInitialGps ();
if (location == null ) {
plotTheInitialMarkerAndGetInitialGps ();
} else {
mLastLocation = location ;
methodToCalculateWaitingTime ();
}
}
private Location plotTheInitialMarkerAndGetInitialGps () {
if (ActivityCompat .checkSelfPermission (this , Manifest .permission .ACCESS_FINE_LOCATION ) != PackageManager .PERMISSION_GRANTED && ActivityCompat .checkSelfPermission (this , Manifest .permission .ACCESS_COARSE_LOCATION ) != PackageManager .PERMISSION_GRANTED ) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return null ;
}
LocationServices .FusedLocationApi .requestLocationUpdates (mGoogleApiClient , mLocationRrequest , this );
locationOld = LocationServices .FusedLocationApi .getLastLocation (mGoogleApiClient );
if ((locationOld != null )) {
mLastLocation = locationOld ;
timeOld = locationOld .getTime ();
} else {
startLocationUpdates ();
}
return mLastLocation ;
}
@ Override
public int onStartCommand (Intent intent , int flags , int startId ) {
onStart (intent , startId );
Toast .makeText (MyService .this , "start command" , Toast .LENGTH_SHORT ).show ();
sendUpdatesToUI = new Runnable () {
public void run () {
DisplayLoggingInfo ();
handler .postDelayed (this , 10000 ); // 5 seconds
}
};
handler .postDelayed (sendUpdatesToUI , 10000 ); // 1 second
//Log.i("LocalService", "Received start id " + startId + ": " + intent);
mengUpdateBerkala (locationOld );
return Service .START_STICKY ;
}
@ Override
public void onStart (Intent intent , int startId ) {
sendUpdatesToUI = new Runnable () {
public void run () {
//Log.e("sent", "sent");
DisplayLoggingInfo ();
handler .postDelayed (this , 5000 ); // 5 seconds
}
};
handler .postDelayed (sendUpdatesToUI , 1000 ); // 1 second
//Log.i("LocalService", "Received start id " + startId + ": " + intent);
super .onStart (intent , startId );
}
private void DisplayLoggingInfo () {
//Log.d(TAG, "entered DisplayLoggingInfo");
intentforBroadcast .putExtra ("distance" , distance );
LocalBroadcastManager .getInstance (this ).sendBroadcast (intentforBroadcast );
}
@ Override
public void onConnectionFailed (ConnectionResult connectionResult ) {
}
@ Override
public void onMapReady (GoogleMap googleMap ) {
}
}