Из любого service
или из любого intentservice
или из asynctask
вы можете иметь нить таймера (т.е. таймер обратного отсчета в вашем случае), например:
public void Timer()
{
new Thread(new Runnable()
{
public void run()
{
while (IsOnGoing)
{
try
{
TimeUnit.SECONDS.sleep(1);
seconds++;
int hour = seconds/3600;
int remaining = seconds%3600;
int minutes = remaining/60;
int seconds = remaining%60;
String hourString = (hour<10 ? "0" : "")+hour;
String minutesString = (minutes<10 ? "0" : "")+minutes;
String secondsString = (seconds<10 ? "0" : "")+seconds;
String InCallDuration = hourString + " : " + minutesString + " : " + secondsString;
Intent intent = new Intent("ticks");
intent.setPackage(getPackageName());
intent.putExtra("InCallDuration", InCallDuration);
getApplicationContext().sendBroadcast(intent);
Log.d("InCallService :", "InCallDuration"+ InCallDuration+".. \n");
}
catch (InterruptedException e)
{
Log.d("CallStateService :", "InterruptedException.. \n");
e.printStackTrace();
}
}
}
}).start();
}
Если вы заметили строку сверху кода (указан ниже):
getApplicationContext().sendBroadcast(intent);
, который отправляет local
broadcast
в то же приложение. (т.е. отправка трансляции из нашего приложения только в наше приложение.)
Зарегистрируйте его в любом виде, например:
IntentFilter filterTicks = new IntentFilter("ticks");
registerReceiver(secondsBroadcastReceiver, filterTicks);
Отмена регистрации в том же действии, когда задачи завершены / onDestroy / OnPause:
unregisterReceiver(secondsBroadcastReceiver);
Как использовать:
Вы заметили, что в приведенном выше коде вещательный приемник выглядит так:
private BroadcastReceiver secondsBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
String InCallDuration = intent.getStringExtra("InCallDuration");
Log.d("CallActivity :", "Received InCallDuration:" + InCallDuration + ".. \n");
CallTime.setText(InCallDuration);
}
};
- Из которого вы можете устанавливать / изменять текст текстового интерфейса пользовательского интерфейса столько раз, сколько он тикает в фоновом режиме.
- Нам просто нужно отправлять трансляцию после каждого тика
- Соответствующий получатель получает его и обновляет пользовательский интерфейс (нам нужно установить его)
- Он отправляет широковещательные сообщения и получает до тех пор, пока он там остается.
- Вам нужно только заменить метод таймера как Ваши тики уменьшатся, теперь я оставил это вам для программирования отдыха.