Экспортированная служба не требует разрешения: что это значит?
Я создал службу, связанную с другими приложениями через AIDL, и добавлю ее в манифест следующим образом:
<service android:name=".MyService">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
где IService - это интерфейс AIDL.
Таким образом, Eclipse покажет мне, что для экспортированного сервиса не требуется разрешение. Если я удалю intent-filter
, предупреждение исчезнет, но, очевидно, приложения не смогут привязываться к службе.
Что означает это предупреждение?
Ответы
Ответ 1
У меня была такая же проблема, когда я обновил SDK до версии 20. Я удалил его, добавив свойство android: экспортированное android:exported="false"
так:
<service android:name=".MyService"
android:exported="false">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
Смотрите doc
Ответ 2
Если вы хотите ограничить использование активности вашим собственным приложением, добавьте exported=false
в свой манифест манифеста активности.
Если вы хотите разрешить другим приложениям использовать его (явно через его имя класса или, лучше, используя намерение с типом данных или действием), у вас есть два варианта:
- ограничивать эти приложения с помощью разрешения
- разрешить всем приложениям использовать его, затем вы можете добавить
tools:ignore="ExportedActivity"
в свой манифест манифеста активности.
-
То же рассуждение относится к сервису, tools:ignore="ExportedService"
и контент-провайдеры tools:ignore="ExportedContentProvider"
.
Ответ 3
Как Jens сказал:" Это означает, что другие (произвольные) приложения, которые пользователь имеет на своем телефоне, могут привязываться к вашей службе и вызывать любой метод, который им нравится подвергается через интерфейс AIDL.