Вопрос объясняет назначение атрибута exported в объявлении сервиса.
Флаг exported определяет, могут ли другие приложения запускать или связываться с сервисом:
true — доступен всем (требует permission)
false — только для своего приложения
exported="true"
Обязательно добавьте <permission> в манифест.
Без permission сервис уязвим к атакам (например, запуск с вредоносными данными).
exported="false"
Полная изоляция от других приложений.
<!-- Правильно: сервис только для внутреннего использования -->
<service
android:name=".MyInternalService"
android:exported="false" />
<!-- Опасный вариант: доступен всем без проверки -->
<service
android:name=".MyApiService"
android:exported="true" />
<!-- Безопасный публичный сервис -->
<service
android:name=".MySecureService"
android:exported="true"
android:permission="com.example.PERMISSION" />Если у сервиса есть <intent-filter>, exported автоматически становится true.
Для bindService() проверяется как exported, так и permission.
Вывод:
Всегда явно указывайте exported и минимизируйте публичные сервисы.