Я немного сбит с толку, потому что я читаю некоторые посты, где я тоже должен использовать ContextCompat.StartForegroundService();
, если API> = 26.
Теперь я все еще просто использую StartService , и он работает, хотя я должен получить IllegalStateException
для API> = 26 (текущий API на телефоне - 27) согласно этому посту.
https://medium.com/mindorks/mastering-android-service-of-2018-a4a1df5ed5a6
Я знаю, что Сервис это старая концепция. Позвольте мне заверить вас, что мы не будем обсуждать основы и узнаем о последних изменениях, внесенных в сервисный уровень в Android 8.0+, мы раскроем тайну знаменитых IllegalStateException и RemoteServiceException. Эта статья не является общепринятым способом понимания услуг, держитесь до тех пор, пока вы не сможете.
Таким образом, мой вопрос, должен ли я изменить startForeGroundService
или просто оставить startService
для API> = 26?
Мой класс, который обрабатывает мое служебное соединение:
/**This establishes the connection to the MediaPlayerService. */
public static ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MediaPlayerService.MusicBinder binder = (MediaPlayerService.MusicBinder)service;
mediaPlayerService = binder.getService();
mediaPlayerService.musicBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
mediaPlayerService.musicBound = false;
}
};
/**This is called to start the MediaPlayerService. */
private static Intent mediaPlayerServiceIntent = null;
public static void startMusicService(Context c) {
/*mediaPlayerServiceIntent binds our connection to the MediaPlayerService. */
mediaPlayerServiceIntent = new Intent(c, MediaPlayerService.class);
c.bindService(mediaPlayerServiceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
c.startService(mediaPlayerServiceIntent);
mServiceIsActive = true;
}
/**This is called to stop the MediaPlayerService. (onDestroy) */
public static void stopMusicService(Context c) {
if (mediaPlayerServiceIntent == null)
return;
c.unbindService(serviceConnection);
c.stopService(mediaPlayerServiceIntent);
mediaPlayerServiceIntent = null;
mediaPlayerService = null;
}
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Main.startMusicService(getApplicationContext());
}