que - putextra android
"La actividad exportada no requiere permiso" cuando se intenta iniciar desde un URI (3)
Estoy intentando lanzar una aplicación de Android desde un URI usando esta pregunta de SO como referencia.
Tengo un archivo de manifiesto con la siguiente actividad declarada:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" android:host="example.com" />
</intent-filter>
</activity>
Estoy intentando iniciar MainActivity con el enlace http://example.com . Mi problema es que recibo la advertencia
"exported activity does not require permission"
He examinado otras preguntas de SO que informan sobre esta misma advertencia y todas las soluciones parecen no funcionar.
¿Cómo escribo correctamente el filtro de intención de actividad para evitar la advertencia?
Gracias
¿Intentó limpiar su proyecto (Proyecto> Limpiar ...)? Reparó esta advertencia para mi proyecto, tal vez el tuyo.
Para deshacerte de esta advertencia, tienes dos opciones:
- O bien configura el atributo
android:exported="false"
en la Actividad para evitar que otras Aplicaciones llamen a su Actividad a través de un intento - O si permite que otras aplicaciones llamen a su actividad es lo que necesita, debe agregar un atributo de
android:permission
donde puede especificar qué permisos debe tener una aplicación para llamar a su actividad. - Si desea permitir que otras aplicaciones llamen a su actividad sin ningún permiso especial, tendrá que llevarse bien con una advertencia en el Manifiesto.
Puede obtener más información en la documentación de Android .
Gracias a @furykid por los enlaces.
Tuve el mismo problema cuando actualicé SDK a la versión 20 . Lo eliminé agregando Android: propiedad exportada :
<activity
android:name=".MainActivity"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" android:host="example.com" />
</intent-filter>
</activity>
dentro de la declaración de actividad en manifiesto. Por supuesto, puede especificar esto si la actividad está destinada solo para uso interno de la aplicación
La razón por la que lo soluciona se encuentra en los docs :
android: exported : el valor predeterminado depende de si la actividad contiene filtros de intención. La ausencia de filtros significa que solo se puede invocar la actividad especificando su nombre de clase exacto. Esto implica que la actividad está destinada solo para el uso interno de la aplicación (ya que otros no conocerían el nombre de la clase). Entonces, en este caso, el valor predeterminado es "falso". Por otro lado, la presencia de al menos un filtro implica que la actividad está destinada para uso externo, por lo que el valor predeterminado es "verdadero" .
Como "el receptor exportado no requiere permiso" (al menos el mensaje LINT es claro), lo tienes.