Неа) Дело в том, что getSystemService() - метод контекста(Context). Соответственно, этот метод всегда должен вызываться на экземпляре контекста. Это как если вы сделаете такой класс
class SomeClass() {
fun someMethod() {}
}
то someMethod() где угодно вы не вызовите, нужно вызывать на экземпляре, т.е. SomeClass().someMethod()
С getSystemService() ситуация та же. Применительно к примеру выше - Context=SomeClass, getSystemService()=someMethod().
Теперь насчет активити. AppCompatActivity() наследуется от класса Context(вы можете убедиться в этом, провалившись в исходники по иерархии его наследования), тем самым наделяя его правом передачи в качестве экземпляра класса Context. Т.е. внутри активити this - это и контекст, и AppCompatActivity(), и все остальное, от чего он наследуется. В Java, если не ошибаюсь, вы всегда и везде должны писать явно this. В котлине this можно опускать. Т.е. в полном виде в активити вы вызываете this.getSystemService().
Насчет фрагмента. Fragment() не наследуется от Context, поэтому this не является контекстом. Во фрагменте вы можете использовать либо non-nullable метод requireContext(), либо nullable-свойство context. Например: requireContext().getSystemService().
Все остальные классы сами по себе не имеют контекста, вы должны его сами туда притащить откуда-нибудь(что вы и сделали, протащив его в конструкторе функции в виде параметра context. Поэтому тут вызываем имя_параметра_контекста.getSystemService()