Handler post delayed

0

Siemka
Mam takie pytanko, zrobiłem sobie aplikacje, która wyłącza mi muzykę po określonym czasie, tylko czy używanie handler.postDelayed na na godzinę jest efektywne, czy zżera dużo zasobów i jest jakiś sposób na odłożenie pewnych czynności w czasie.
Pozdrawiam i z góry dziękuje :)

0

Muzyka powinna być serwisem, a za pomocą alarmmanagera powinienes niz zarzadzac

0

Tylko, że ja wyłączam muzykę requestując Audio Focus, a jak to zrobić korzystając z alarm managera?

0

Nie zależnie od tego kiedy/jak zatrzymujesz muzykę powinieneś zrobić stop service.
AlarmManagerem możesz sprawdzać czy nastąpił już czas wyłączenia/włączenia service na nowo.

Z tego co się orientuję to AudioFocusem możesz wyłapywać zdarzenia takie jak przychodzące audio, powiadomienie etc.

Może pokaż kod, napisz jakiś bardziej szczegółowy scenariusz.

0
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        handler = new Handler();
    }

      public void kill(){
          AudioManager am = (AudioManager) getSystemService(Activity.AUDIO_SERVICE);
          am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
          if(BluetoothAdapter.getDefaultAdapter().isEnabled()){
              BluetoothAdapter.getDefaultAdapter().disable();
          }
 
      }
    
    //OnClick button
    public void start(View view) {
        int sec = Integer.parseInt(((EditText)findViewById(R.id.seconds)).getText().toString());
        int min = Integer.parseInt(((EditText)findViewById(R.id.minutes)).getText().toString());
        sec += min * 60;
          handler.postDelayed(new Runnable() {
              @Override
              public void run() {
                  kill();
              }
          }, sec * 1000);
    }
0

Ok.
Weź teraz pod uwagę co się stanie gdy urządzenie przejdzie po 20 minutach w stan uśpienia. Trzeba założyć WakeLocka.
Weź teraz pod uwagę kiedy system "posprząta" Twoja aktywność, bo tak się może zdarzyć. Twój handler zginie. Jak już założysz WakeLocka to musisz nastawić alarmmanager na tą godzinę. A żeby już była maksymalna pewność że "to coś" dostanie kill() to musisz to uruchomić w tle (Service, IntentService). Serwisy w androidzie mają najwyższy priorytet i system z reguły ich nie sprząta.

0

Ale jak dokładnie tego alarmmanagera zrobić, bo pierwszy raz się z nim spotyka, bo się jeszcze uczę :D

0

Czyli mam założyć wakelocka, odpalić service, w którym austawię alarmmanager na np 2h i po tym czasie ma requestować Audio Focus, tak?

0

te rzeczy robisz na zamianę tego:

handler.postDelayed(new Runnable() {
              @Override
              public void run() {
                  kill();
              }
          }, sec * 1000);

Jeśli tutaj będziesz miał godzinę, to to nie zadziała. Bo Ci się telefon uśpi.

0

Dobra ostatnie pytanie, na wszystkich stronach odnośnie alarmmanagera to w activity się go ustawia i odpala service. Tylko skoro alarm bedzie ustawiony w activity to system i tak może się go pozbyć

0

Dobra ogarnąłem, dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1