¿Cómo abrir mi aplicación de Android cuando se abre el enlace rss en el navegador?

Estoy creando un agregador rss para mi teléfono Android. Me gustaría poder suscribirme a un feed rss desde el navegador ya que la mayoría de los sitios web tienen un botón de suscripción vía rss.

¿Cómo puedo construir un filtro de intenciones para recibir esos enlaces?

Esta pregunta fue similar y mostró cómo crear un filtro de intenciones para manejar los enlaces del navegador: ¿ Hacer un enlace en el navegador de Android para iniciar mi aplicación?

Sin embargo, no sé cómo hacerlo específico para rss feeds. Como un intento he intentado este filtro:

<intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:mimeType="application/rss+xml" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> 

¿Estoy en el buen camino? ¿En qué debería estar filtrando?

Estos 3 filtros parecen ser los utilizados por las aplicaciones GoogleListen y GoogleReader:

 <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="http"/> <data android:host="*"/> <data android:pathPattern=".*\\.xml"/> <data android:pathPattern=".*\\.rss"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="http"/> <data android:host="feeds.feedburner.com"/> <data android:host="feedproxy.google.com"/> <data android:host="feeds2.feedburner.com"/> <data android:host="feedsproxy.google.com"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="http"/> <data android:mimeType="text/xml"/> <data android:mimeType="application/rss+xml"/> <data android:mimeType="application/atom+xml"/> <data android:mimeType="application/xml"/> </intent-filter> 

Resulta que hay muchas maneras diferentes de configurar podcasts para que cada filtro de intenciones sólo funcione para algunos de ellos. Una gran cantidad de filtros diferentes deben utilizarse para obtener el efecto deseado sobre la mayoría de suscribir enlaces.

He aquí algunos de los filtros que encontré que funcionaron:

 <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="itpc" /> <data android:scheme="pcast" /> <data android:scheme="feed" /> <data android:scheme="rss" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="*" android:pathPattern=".*xml" /> <data android:scheme="http" android:host="*" android:pathPattern=".*rss" /> <data android:scheme="http" android:host="*" android:pathPattern=".*feed.*" /> <data android:scheme="http" android:host="*" android:pathPattern=".*podcast.*" /> <data android:scheme="http" android:host="*" android:pathPattern=".*Podcast.*" /> <data android:scheme="http" android:host="*" android:pathPattern=".*rss.*" /> <data android:scheme="http" android:host="*" android:pathPattern=".*RSS.*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="text/xml" android:scheme="http" /> <data android:mimeType="application/rss+xml" android:scheme="http" /> <data android:mimeType="application/atom+xml" android:scheme="http" /> </intent-filter> 

¿Estoy en el buen camino?

Sí. Sin embargo:

  • No necesitas el esquema
  • Te falta el prefijo de android: delante del scheme , de todos modos
  • type debe ser android:mimeType

Aquí hay una aplicación de ejemplo que demuestra, entre otras cosas, responder a vínculos en archivos PDF.

¿Podría ser que el servidor no envíe el mimetype derecho?

Experimente añadiendo:

 <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> <data android:host="*" /> <data android:pathPattern=".*\\.rss" /> <data android:pathPattern=".*\\.xml" /> </intent-filter> 

Edit: Es un poco difícil de componer el conjunto correcto de filtros de intención, hay un montón de primeros resultados en el algoritmo de coincidencia:
https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/IntentFilter.java

En su caso, el tipo de mimet debe coincidir exactamente con lo que es 'application / rss + xml' sus fuentes devuelven ese tipo de mimet en el encabezado del mensaje?

  URL url = new URL("http://www.engadget.com/rss.xml"); URLConnection conn = url.openConnection(); System.out.println("Content-Type:"+conn.getHeaderField("Content-Type")); 

Intentar:

  1. Hacer filtros más amplios
  2. Agregue varios filtros.
  • Android - ejemplo de análisis XML roto
  • KXmlParser lanza la excepción "Símbolo inesperado" al inicio de RSS pasing
  • Cómo utilizar AsyncTask para mostrar ProgressBar y cargar Rss
  • EditText con la lista de sugerencias a continuación
  • Aislar un enlace en RSS Feed
  • Android: Cómo descargar RSS cuando un sitio web contiene: link rel = "alternate" type = "application / rss + xml"
  • ¿Cómo puedo obtener las revisiones de mi aplicación de Android y el feed de información en mi sitio desde Google play
  • Usando HttpUrlconnection en Rss Reader hace que Android cuelgue
  • Android: Archivo XML de caché de RSS Feed
  • Análisis del feed de Android rss
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.