Utworzyłem usługę, która jest powiązana przez inne aplikacje za pośrednictwem AIDL i dodaję ją do manifestu w następujący sposób:
<service android:name=".MyService">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
gdzie IService to interfejs AIDL.
W ten sposób Eclipse pokaż mi ostrzeżenie Wyeksportowana usługa nie wymaga pozwolenia . Jeśli usunę intent-filter
, ostrzeżenie zniknie, ale oczywiście aplikacje nie mogą połączyć się z usługą.
Co oznacza to ostrzeżenie?
android
android-service
enzom83
źródło
źródło
Service
i wywoływać dowolną metodę, która jest ujawniona przez interfejs AIDL.android:permission
atrybutu swojej<service>
deklaracji. Lub po prostu zignoruj ostrzeżenie - co ma robić usługa? Jeśli nie przeszkadza Ci utrzymywanie usługi „wewnętrznej”, o wiele łatwiej jest po prostu ustawić jąandroid:exported="false"
na<service>
Odpowiedzi:
Miałem ten sam problem, gdy zaktualizowałem SDK do wersji 20 . Usunąłem go, dodając android: eksportowana właściwość,
android:exported="false"
jak na przykład:Zobacz ten dokument
źródło
Jeśli chcesz ograniczyć wykorzystanie swojej aktywności do własnej aplikacji, powinieneś dodać
exported=false
do manifestu swojej działalności oświadczenie.Jeśli chcesz zezwolić innym aplikacjom na używanie go (jawnie poprzez nazwę klasy lub, lepiej, używając intencji z typem danych lub akcją), masz dwie możliwości:
tools:ignore="ExportedActivity"
do manifestu oświadczenie swojej aktywności.-
To samo dotyczy usługi z
tools:ignore="ExportedService"
dostawcami treści ztools:ignore="ExportedContentProvider"
.źródło
xmlns:tools="http://schemas.android.com/tools"
The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound
i nie ma możliwości rozwiązania tego problemu.Jak powiedział Jens : „Oznacza to, że inne (dowolne) aplikacje, które użytkownik ma na swoim telefonie, mogą łączyć się z Twoją Usługą i wywoływać dowolną metodę, która jest ujawniona za pośrednictwem interfejsu AIDL”.
źródło