Трансляция не запускается

Я впервые пытаюсь создать приложение для Android. Я пытаюсь создать службу, которая может считать в фоновом режиме, и я хочу, чтобы служба транслировала время получателю. Однако похоже, что получатель ничего не получает, поэтому я не уверен, что моя служба вообще запускается.

Вот код, в котором я пытаюсь запустить службу и создать приемник:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    IntentFilter filter = new IntentFilter();
    filter.addAction("EXAMPLE_BROADCAST");

    clock = (TextView) findViewById(R.id.textClock);

    timeReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            setClock(intent.getLongExtra("counter", 0));
        }
    };

    registerReceiver(timeReceiver,filter);

    startService(new Intent(this, CounterService.class));
}

public void setClock(long time){
    clock.setText(String.valueOf(time));
}

И вот мой класс обслуживания:

public class CounterService extends Service {
private Handler handler;
private long initialTime;
private long timeInMilliseconds = 0L;
private boolean isActive;
Intent timeBroadcaster = new Intent("EXAMPLE_BROADCAST");

@Override
public void onCreate(){
    super.onCreate();

    Runnable counter = new Runnable() {
        @Override
        public void run() {
            isActive = ((PowerManager) getSystemService(Context.POWER_SERVICE)).isInteractive();
            if(isActive) {
                timeInMilliseconds += 1000;
                handler.postDelayed(this, 1000);
            }
            else {
                if(timeInMilliseconds > 5000) {
                    timeInMilliseconds = 0;
                }
                handler.postDelayed(this, 1000);
            }
            timeBroadcaster.putExtra("counter", timeInMilliseconds);
            sendBroadcast(timeBroadcaster);
        }
    };
}


@Override
public IBinder onBind(Intent intent) {
    return null;
}

}

Любая помощь приветствуется, спасибо.


person Jesper    schedule 14.11.2016    source источник
comment
вы определили службу в манифесте?   -  person Omid Heshmatinia    schedule 14.11.2016
comment
ты ресивер зарегистрировал?   -  person Maksim Ostrovidov    schedule 14.11.2016
comment
@Smartiz Да, я сделал! :/   -  person Jesper    schedule 14.11.2016
comment
@maxost Нет. Я не был уверен, что должен был это сделать. Можешь объяснить как?   -  person Jesper    schedule 14.11.2016


Ответы (2)


Runnable не запускается сам по себе, вам нужно передать его потоку.

Runnable counter = new Runnable() {
        @Override
        public void run() {
            isActive = ((PowerManager) getSystemService(Context.POWER_SERVICE)).isInteractive();
            if(isActive) {
                timeInMilliseconds += 1000;
                handler.postDelayed(this, 1000);
            }
            else {
                if(timeInMilliseconds > 5000) {
                    timeInMilliseconds = 0;
                }
                handler.postDelayed(this, 1000);
            }
            timeBroadcaster.putExtra("counter", timeInMilliseconds);
            sendBroadcast(timeBroadcaster);
        }
    };

Thread thread = new Thread(counter);
thread.start();

Также зарегистрируйте свой сервис в манифесте:

<!--Register service-->
  <service android:name="yourpackage.CounterService" />
person Fevly Pallar    schedule 14.11.2016

Вам необходимо зарегистрировать приемник.

В методе onStart вашей деятельности

IntentFilter filter = new IntentFilter();
filter.addAction("YOUR_ACTION");
registerReceiver(timeReceiver, filter)

В методе onStop вашей деятельности

unregisterReceiver(timeReceiver)

И перед отправкой трансляции добавьте свое действие в Intent

timeBroadcaster.setAction("YOUR_ACTION");
person Maksim Ostrovidov    schedule 14.11.2016
comment
В дополнение к приемнику требуется IntentFilter. Как мне это создать? - person Jesper; 14.11.2016
comment
Все равно не повезло. Я обновил свой код. Можете ли вы найти какие-либо ошибки? - person Jesper; 14.11.2016