Я не уверен, где/как я могу запустить эту службу для работы в фоновом режиме. Я разрабатываю приложение, использующее CountDownTimer. Я обнаружил, что должен создать CountDownTimer в Service.class и запустить Service.class в MainActivity.class.Как настроить Service/StartForeground для работы CountDownTimer правильно
Почему TextView не отображается на моем экране? Я положил это в OnCreate и onStartCommand. Затем я попробую запустить это в MainActivity, но безуспешно.
Я по-прежнему пытаюсь реализовать свой код, чтобы правильно работать с этим CountDownTimer в фоновом режиме. На официальном веб-сайте Android я вижу, что они используют команду «Log.i» для запуска этого метода Foreground. Как я могу использовать это в своем коде? Должен ли я добавить это в Service.class?
Ниже мой код:
MainActivity:
Button btnStart, btnStop;
TextView textViewTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void startService(View view)
{
Intent intent = new Intent(this,MyService.class);
startService(intent);
}
public void stopService(View view)
{
Intent intent = new Intent(this,MyService.class);
stopService(intent);
}
MyService:
Button btnStart, btnStop;
TextView textViewTime;
public String hms;
@Override
public void onCreate() {
btnStart = (Button) btnStart.findViewById(R.id.btnStart);
btnStop = (Button) btnStop.findViewById(R.id.btnStop);
textViewTime = (TextView) textViewTime.findViewById(R.id.textViewTime);
textViewTime.setText("00:01:30");
final CounterClass timer = new CounterClass(90000, 1000);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//startService(v);
timer.start();
}
});
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) { // create start a service
textViewTime.setText("00:01:30");
Toast.makeText(this, "Service Started...", Toast.LENGTH_LONG).show();
// timer.start();
//return START_STICKY; // return integer value
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() { // stop a service
Toast.makeText(this, "Service Destroyed...", Toast.LENGTH_LONG).show();
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) { // it's not needed but we must override this method
return null;
}
public class CounterClass extends CountDownTimer {
public CounterClass(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
long millis = millisUntilFinished;
hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
System.out.println(hms);
textViewTime.setText(hms);
}
@Override
public void onFinish() {
textViewTime.setText("Completed.");
}
}
Спасибо, @ сектора11 Но есть проблема с AppCompatActivity - в моем андроиде студии он не показывает, так что я иметь стандартную команду ActionBarActivity , В CountDownTimerService У меня есть 2 ошибки: «ic.launcher - не может разрешить символ» - я меняю .drawable на mipmap и исправлен. Следующий - с Intent.FLAG_ACTIVITY_NEW_TASK - «Должен быть один или несколько из ... PendingIntent или Intent ..». Как я могу это исправить? – gryzek
добавьте любую возможность вырезать и изменить свою ссылку или нет, вы можете прокомментировать этот код переднего плана – sector11
Я не знаю, но - он работает с одной ошибкой в соответствии с Intent.FLAG_ACTIVITY .. - что вы думаете об этом? С этим сообщением я должен добавить еще один из PendingIntent или Intent. Зачем? Тем не менее, спасибо за это решение. Оно работает! :) – gryzek