android - permisos - requestpermissions
El servicio exportado no requiere permiso: ¿qué significa? (3)
Como dijo Jens , "significa que otras aplicaciones (arbitrarias) que el usuario tiene en su teléfono pueden vincularse a su Servicio y llamar a cualquier método que esté expuesto a través de su interfaz AIDL".
Creé un servicio que está vinculado por otras aplicaciones a través de AIDL, y lo agregué al manifiesto de la siguiente manera:
<service android:name=".MyService">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
donde IService es la interfaz AIDL.
De esta forma, Eclipse me muestra la advertencia El servicio exportado no requiere permiso . Si elimino el intent-filter
, la advertencia desaparecerá, pero obviamente las aplicaciones no pueden enlazarse al servicio.
¿Qué significa esta advertencia?
Si desea restringir el uso de su actividad a su propia aplicación, debe agregar exported=false
a la declaración de manifiesto de su actividad.
Si desea permitir que otras aplicaciones lo utilicen (explícitamente a través de su nombre de clase o, mejor, mediante un intento con un tipo de datos o acción), entonces tiene dos opciones:
- restrinja esas aplicaciones usando un permiso
- permite que todas las aplicaciones lo utilicen, luego puede agregar
tools:ignore="ExportedActivity"
a la declaración de manifiesto de su actividad.
-
El mismo razonamiento se aplica a un servicio, con tools:ignore="ExportedService"
y proveedores de contenido con tools:ignore="ExportedContentProvider"
.
Tuve el mismo problema cuando actualicé SDK a la versión 20 . Lo eliminé agregando android: propiedad exportada android:exported="false"
como tal:
<service android:name=".MyService"
android:exported="false">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
Ver este doc