Как запустить сервис в Oncreate без кнопки Onclick, но его нужно остановить с помощью кнопки - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь непрерывно воспроизводить музыку в фоновом режиме без нажатия какой-либо кнопки, она должна воспроизводиться при запуске, и снова ее можно остановить с помощью кнопки «Стоп». Но она не останавливается, поскольку помещена в Oncreate (), что может быть решением для этого. Пожалуйста, кто-нибудь, скажите мне, как остановить сервис. Спасибо заранее.

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

    start = findViewById(R.id.startbutton);
    stop = findViewById(R.id.stopbutton);


    Intent i = new Intent(this, Service.class);
    this.startService(i);
    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(view.getContext(), Service.class);
            stopService(i);
            Toast.makeText(MainActivity.this, "stop service called", Toast.LENGTH_SHORT).show();
        }
    });
    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(view.getContext(), Service.class);
            startService(i);
        }
    });

}

Ниже указан мой Сервисный код

private MediaPlayer player;
public Service() {
    super();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
  player= MediaPlayer.create(this,
          Settings.System.DEFAULT_RINGTONE_URI);
  player.setLooping(true);
  player.start();
  return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    player.stop();
}

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

}

Ответы [ 4 ]

0 голосов
/ 02 июля 2018

Я возвращаю START_NOT_STICKY в методе onStartCommand класса Service вместо START_STICKY. Из-за этого мой сервис перезапускался каждый раз, когда я снова открывал приложение. Так что теперь я могу остановить сервис, и моя проблема была решена.

0 голосов
/ 29 июня 2018

Вы можете использовать эти части кода

 startService(new Intent(Activity.this, Service.class));

 stop.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent i = new Intent(Activity.this, Service.class);
        stopService(i);

    }
});
0 голосов
/ 29 июня 2018

Пожалуйста, добавьте этот метод переопределения и вызовите то, что вам нужно.

@Override
 public void onResume() {
  super.onResume();
  startService(new Intent(YourActivity.this, ServiceName.class));
}
0 голосов
/ 29 июня 2018

Я подумал о двух решениях:

1: Просто не используйте clicklistener. Немедленно запустите службу при запуске действия

2: если вы хотите использовать кнопку запуска, позвоните start.performClick()

Чтобы остановить плеер на домашнем экране, используйте этот метод

    @Override
public void onPause() {
    super.onPause();
    player.stop();
}
...