Я добавил класс обслуживания в свою деятельность. Я получаю обновленное местоположение из бэкэнда каждые 5 секунд, но я не знаю, как отправить обновленное местоположение в течение долгого времени от сервиса к действию. Вот мой класс обслуживания:
public class DriverLocationService extends Service {
BackgroundService service;
private IBinder mBinder = new MyBinder();
private static String LOG_TAG = "BoundService";
String latDriver, longDriver;
public static String MY_ACTION = "MY_ACTION";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public void onRebind(Intent intent) {
Log.v(LOG_TAG, "in onRebind");
super.onRebind(intent);
}
@Override
public boolean onUnbind(Intent intent) {
Log.v(LOG_TAG, "in onUnbind");
return true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (!service.isRunning()) {
service.start();
service.isRunning = true;
if (intent != null && intent.getExtras() != null){
}
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
service = new BackgroundService();
Log.d("CREATED>>>>", "Created");
}
@Override
public void onDestroy() {
super.onDestroy();
if (service.isRunning) {
service.interrupt();
service.isRunning = false;
service = null;
}
}
class BackgroundService extends Thread {
public boolean isRunning = false;
public long milliSecs = 5000;
Runnable runTask = new Runnable() {
@Override
public void run() {
isRunning = true;
while (isRunning) {
try {
Log.d("HANDLER_RUNNABLE>>>>", "HANDLER");
startTracking();
Thread.sleep(milliSecs);
} catch (InterruptedException e) {
e.printStackTrace();
isRunning = false;
}
}
}
};
public boolean isRunning() {
return isRunning;
}
@Override
public void run() {
super.run();
runTask.run();
}
public void startTracking(){
ApiInterface apiInterface = RetrofitManager.getInstance().create(ApiInterface.class);
Call<TrackResponse> call = apiInterface.checkTruckLocation(TruckApplication.ReadIntPreferences(SharedPrefData.PREF_BOOKING_ID) );
call.enqueue(new Callback<TrackResponse>() {
@Override
public void onResponse(Call<TrackResponse> call, Response<TrackResponse> response) {
if (response.isSuccessful()){
TrackResponse trackResponse = response.body();
assert trackResponse != null;
if (trackResponse.getSuccess()) {
if (trackResponse.getMessage().equals("Tracking start")){
Toast.makeText(getApplicationContext(), trackResponse.getMessage(), Toast.LENGTH_SHORT).show();
latDriver = trackResponse.getTruckLocation().getLat();
longDriver = trackResponse.getTruckLocation().getLong();
Log.d("@@LAT2", latDriver);
Toast.makeText(getApplicationContext(), trackResponse.getTruckLocation().getLat(), Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getApplicationContext(), trackResponse.getMessage(), Toast.LENGTH_SHORT).show();
}
if (trackResponse.getMessage().equals("Tracking completed")){
Toast.makeText(getApplicationContext(), trackResponse.getMessage(), Toast.LENGTH_SHORT).show();
onDestroy();
}
else {
Toast.makeText(getApplicationContext(), trackResponse.getMessage(), Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(), trackResponse.getMessage(), Toast.LENGTH_SHORT).show();
}
}
else {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<TrackResponse> call, Throwable t) {
Log.e("Error", t.getLocalizedMessage());
}
});
}
}
public String getLatLong() {
double lat= Double.parseDouble(latDriver);
double longD= Double.parseDouble(longDriver);
return lat + ":" + longD ;
}
public class MyBinder extends Binder {
public DriverLocationService getService() {
return DriverLocationService.this;
}
}
}
и вот моя деятельность, в которой я хочу обновить лат-лонг
public class ShowDriverLocation extends AppCompatActivity {
DriverLocationService mBoundService;
boolean mServiceBound = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_driver_location);
if (mServiceBound) {
Toast.makeText(mBoundService, mBoundService.getLatLong(), Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onStart() {
super.onStart();
Intent intent = new Intent(this, DriverLocationService.class);
startService(intent);
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
super.onStop();
if (mServiceBound) {
unbindService(mServiceConnection);
mServiceBound = false;
}
}
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
mServiceBound = false;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
DriverLocationService.MyBinder myBinder = (DriverLocationService.MyBinder) service;
mBoundService = myBinder.getService();
mServiceBound = true;
}
};
}
пожалуйста, ответьте мне, я буду признателен за каждый ответ, спасибо заранее