2011-07-18 14 views
7

Estoy intentando registrar mi aplicación de Android como controlador para las URL de iCal. Para hacer esto, establezco los filtros de intención en mi Manifiesto para el pseudo protocolo webcal:// y para las URL HTTP usando el tipo text/calendar MIME (consulte a continuación).filtro de intención para URL ical

Esto funciona perfectamente bien en el emulador, pero en un dispositivo real estoy teniendo problemas. El filtro webcal:// funciona, pero el text/calendar no. En cambio, el navegador muestra el archivo ical como texto sin formato en lugar de pasar la URL a mi aplicación.

Comprobé que el navegador no está configurado como un controlador predeterminado para ical (en Configuración-> Aplicaciones-> Navegador) y pregunté a otras personas si podían reproducir el problema en sus teléfonos móviles. Todo con el mismo resultado.

¿Cuál es la forma correcta de registrarse para las URL de texto/calendario?

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="org.splitbrain.giraffe" 
    android:versionName="0.31" android:versionCode="4"> 
<uses-sdk android:minSdkVersion="4" /> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar"> 
    <activity android:label="@string/app_name" android:name="MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <category android:name="android.intent.category.BROWSABLE"></category> 
      <action android:name="android.intent.action.VIEW"></action> 
      <data android:mimeType="text/calendar" android:scheme="http"></data> 
      <category android:name="android.intent.category.DEFAULT"></category> 
     </intent-filter> 
     <intent-filter> 
      <category android:name="android.intent.category.BROWSABLE"></category> 
      <action android:name="android.intent.action.VIEW"></action> 
      <data android:scheme="webcal"></data> 
      <category android:name="android.intent.category.DEFAULT"></category> 
     </intent-filter> 
    </activity> 
    <activity android:name="OptionsActivity"></activity> 
    <activity android:name="DetailActivity"></activity> 
    <activity android:name="AboutActivity"></activity> 

</application> 
</manifest> 

Actualización: Resulta de lo anterior funciona bien en el emulador de Android 1.6, pero no en un emulador 2.3.3 donde se muestra el mismo comportamiento que en mi teléfono. ¿Es esto un error en Android tal vez?

+0

¿Es posible que el servidor no envíe correctamente el tipo de contenido correcto? Si no es así, el navegador podría simplemente interpretarlo como texto sin formato. Puede tener mejor suerte con un filtro de intención de ruta que también regex * .ical –

+0

Sí, el servidor envía el tipo de mime correcto. Aquí está la URL que uso para probar: http://re-publica.de/11/rp2011.ics –

+0

¿Has probado otro filtro con el enfoque de parámetros de ruta para * .ics? Si eso no funciona, ¿es posible que tenga la aplicación predeterminada configurada para ser el navegador para que no aparezca más? –

Respuesta

0

Simplemente use la categoría POR DEFECTO, la categoría BROWSABLE es puede estar causando el problema.

Añadir un patrón .*.ics camino para capturar todos los archivos que se han dado el tipo MIME mal por el servidor

poner todos los datos coincidentes en el mismo filtro

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="org.splitbrain.giraffe" 
    android:versionName="0.31" android:versionCode="4"> 
<uses-sdk android:minSdkVersion="4" /> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar"> 
    <activity android:label="@string/app_name" android:name="MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="text/calendar" /> 
      <data android:scheme="webcal" /> 
      <data android:pathPattern=".*.ics" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="OptionsActivity"></activity> 
    <activity android:name="DetailActivity"></activity> 
    <activity android:name="AboutActivity"></activity> 

</application> 
</manifest> 
+0

No. Ninguna diferencia. Incluso con * .ics pathPattern y las reglas exactamente como las proporcionó, el navegador continúa mostrando los datos en lugar de entregar la URL a mi aplicación. –

+1

Creo que la expresión que está buscando es: ". *. Ics" ver los documentos para obtener más información: http://developer.android.com/guide/topics/manifest/data-element.html – TheIT

+0

@TheIT bien ¡manchado! Esta es una publicación antigua, pero espero que alguien la encuentre útil. Actualizaré la respuesta. ¿No debería ser '. * \. Ics' para escapar del segundo período? – Merlin

Cuestiones relacionadas