3

I've implemented a Broadcast Receiver to pass data each second from Service that is running a CountDownTimer with the time remaining to the Fragment.

The problem is that Fragment is not receiving data properly or better to say that is receiving it only when I press some search button, hide the keyboard or something else in the activity.

Here is my Service Class:

CountDownTimer timer = new CountDownTimer(number, 1000) {

 @Override
public void onTick(long millisUntilFinished) {

timeLeft = millisUntilFinished;


normalTime = String.format(
"%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(timeLeft),
TimeUnit.MILLISECONDS.toMinutes(timeLeft) -
                            TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(timeLeft)),
TimeUnit.MILLISECONDS.toSeconds(timeLeft) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(timeLeft)));


Intent timerInfoIntent = new Intent(TIME_INFO);
timerInfoIntent.putExtra("VALUE", normalTime);

                 LocalBroadcastManager.getInstance(NotificationService.this).sendBroadcast(timerInfoIntent);

    }

Here is my Fragment that is supposed to receive the data and update the item of a list view.

In onCreateView I register a receiver:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {     

mTimerStatusReceiver = new TimerStatusReceiver();


LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
                    mTimerStatusReceiver, new IntentFilter(NotificationService.TIME_INFO));
...
}

Do the same on onResume:

@Override
public void onResume() {
super.onResume();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
                mTimerStatusReceiver, new IntentFilter(NotificationService.TIME_INFO));
...
}

Unregister it onPause:

@Override
public void onPause() {
super.onPause();
        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mTimerStatusReceiver);

}

TimerStatesReceiver class:

private class TimerStatusReceiver extends BroadcastReceiver {


 @Override
public void onReceive(Context context, Intent intent) {


if (intent != null && intent.getAction().equals(NotificationService.TIME_INFO)) {

if (!IS_ALREADY_EXECUTED) {
modelTimer = new ModelTimer();

if (intent.hasExtra("VALUE")) {
                          modelTimer.setexpirationTime(intent.getStringExtra("VALUE"));
}



    listOfTimers.add(modelTimer);
    mAdapter = new ListViewAdapter(getActivity(), listOfTimers);
    mListView.setAdapter(mAdapter);
    IS_ALREADY_EXECUTED = true;

}else{
for (ModelTimer timer: listOfTimers){
                            View v = mListView.getChildAt(timerPosition.get(timer.getId()));
                            timer.setexpirationTime(intent.getStringExtra("VALUE"));
timer.setName(intent.getStringExtra("NAME_FOOD"));
if (v == null) return;

TextView time = (TextView) v.findViewById(R.id.active_timer_timeLeft);
  time.setText(timer.expirationTime);

}
mAdapter.notifyDataSetChanged();
}
Kiwi
  • 173
  • 2
  • 9

0 Answers0