Я хочу создать службу, получающую миллисекунды от активности, и когда она запускается, запускается этот метод обратного отсчета.
и эта служба продолжается даже после закрытия приложения.
и, если приложение открыто и эта операция запускается, служба проходит оставшееся времяк активности.
Я могу отправить данные в службу.
и могу запустить метод обратного отсчета.
, но когда приложение закрыто и снова открыть службу, отправьте 0 в операцию.
это мой код активности:
private long verifyTime;
long DEFAULT_VERIFY_TIME = 50000;
private final int CODE_LENGTH = 5;
private ProgressDialog progressDialog;
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
verifyTime = intent.getLongExtra(Global.TIMER , verifyTime);
setTxtTimer();
}
};
@Override
protected void onResume() {
registerReceiver(receiver, new IntentFilter(Global.TIMER_KEY));
sendBroadCast();
super.onResume();
}
@Override
protected void onStop() {
Intent intent = new Intent(CodeReceiverActivity.this,CodeReceiverService.class);
intent.putExtra(Global.TIMER , verifyTime);
startService(intent);
unregisterReceiver(receiver);
super.onStop();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_code_reicever);
}
private void sendBroadCast(){
if(isMyServiceRunning(CodeReceiverService.class)){
CodeReceiverService service = new CodeReceiverService(getApplicationContext());
service.sendBroadCast();
}else {
verifyTime = DEFAULT_VERIFY_TIME;
setTxtTimer();
}
}
private void setTxtTimer(){
new CountDownTimer(verifyTime, 1000) {
public void onTick(long millisUntilFinished) {
millisUntilFinished = millisUntilFinished - 1000;
String time = String.format(Locale.ENGLISH, "%02d:%02d",
(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)) % 60,
(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)) % 60);
txtTimer.setText(time);
}
@Override
public void onFinish() {
cancel();
btnResend.setEnabled(true);
btnResend.setAlpha(1f);
}
}.start();
}
этот сервисный код:
public class CodeReceiverService extends Service {
long timer;
long returnTime;
Context context;
public CodeReceiverService() {
}
public CodeReceiverService(Context context) {
this.context = context;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
timer = intent.getLongExtra(Global.TIMER , 0);
setTimer();
return START_REDELIVER_INTENT;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void setTimer(){
new CountDownTimer(timer, 1000) {
public void onTick(long millisUntilFinished) {
millisUntilFinished = millisUntilFinished - 1000;
returnTime = millisUntilFinished;
}
@Override
public void onFinish() {
stopSelf();
}
}.start();
}
public void sendBroadCast(){
Intent intent = new Intent(Global.TIMER_KEY);
Bundle bundle = new Bundle();
bundle.putLong(Global.TIMER , returnTime);
intent.putExtras(bundle);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
}
и манифест андроида:
<service android:name=".utils.CodeReceiverService" />