¿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?
- Equivalente al generador rss.itunes de Google Play
- Android cómo identificar audio / video de xml?
- Datos de la tienda de widgets android
- Cómo obtener contenido completo de noticias de un sitio web de noticias
- ¿Cómo combinar, crear etiquetas y poner un orden ascendente los feeds de más RSS Feed enlaces como en Yahoo Pipes?
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?
- Análisis de RSS en Android
- Android-Desarrollo: API para encontrar Rss-Feeds
- Cómo analizar un feed RSS con XmlPullParser?
- Volley biblioteca ignorando format = feed & type = rss Params
- Analizar el feed RSS de Android
- Necesito un elemento de interfaz de usuario que se puede hacer clic en lugar de Toast (¿puedo crear tostadas personalizadas con funciones que se pueden hacer clic?)
- Simple-XML analiza el feed RSS con 2 que se declara dos veces
- Android: cómo obtener el enlace de Atom
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 delscheme
, de todos modos -
type
debe serandroid: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:
- Hacer filtros más amplios
- Agregue varios filtros.