2012-02-09 10 views
7

Caballeros,archivo de extensión/Mimetype intención de filtros con una actividad

estoy tratando de hacerlo para que mi aplicación para Android puede responder tanto a los archivos abiertos (a través de sus extensiones a juego) y para tipos MIME (para que funcionen desde el navegador).

He seguido el consejo aquí:

Android intent filter for a particular file extension?

pero todavía no tuvo suerte.

La sección pertinente de mi archivo de manifiesto de Android es el siguiente:

<activity android:name="MuPDFActivity" 
       android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/vnd.ms-xpsdocument"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/pdf"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/x-cbz"/> 
     </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="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.xps"/> 
      <data android:host="*"/> 
     </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="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.pdf"/> 
      <data android:host="*"/> 
     </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="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.cbz"/> 
      <data android:host="*"/> 
     </intent-filter> 
    </activity> 

Como se puede ver, me gustaría que la aplicación sea invocado para .pdf, .xps y archivos .CBZ, también archivos con los tipos mimet relevantes. Las pruebas locales aquí parecen sugerir que las secciones .pdf y application/pdf funcionan, pero por más que lo intente, las secciones .xps (y presumiblemente, .cbz) no lo están.

¿Me falta algo obvio aquí? ¿Puede cada actividad solo tener un patrón mimetype/file?

Cualquier ayuda sería muy apreciada.

Gracias,

Robin

+0

¿Qué versión de Android? Noté que hay diferencias aquí.Ver mi pregunta: http://stackoverflow.com/questions/20650378/how-did-intent-filter-change-from-android-2-to-android-4 – Martin

Respuesta

0

Puede cada actividad sólo tienen un tipo MIME/patrón de archivo?

No. Según su propia admisión, dos están trabajando (PDF x 2).

¿Me falta algo obvio aquí?

Dudo que el elemento BROWSABLE le haga mucho bien en los que tiene, y lo necesita para los demás. BROWSABLE es para navegadores, que irán por la ruta de tipo MIME.

2

yo sepa, que sería más bien como que (un filtro con los diversos valores):

<intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:mimeType="application/vnd.ms-xpsdocument"/> 
     <data android:mimeType="application/pdf"/> 
</intent-filter> 

Además, es posible que el tipo MIME es incorrecta?

+0

Interesante. Una vez intenté combinar 'android: mimeType' y' android: pathPattern' y eso no funcionó. – Martin

+0

Para 'android: pathPattern', los cuatro atributos de la etiqueta' 'deben establecerse en Android 4. De modo que su sugerencia no ayudará al OP. – Martin

2

Múltiple <data> son lógicos O se tratan por separado. Entonces tiene una etiqueta con android:scheme pero sin android:pathPattern y una con android:pathPattern pero sin android:host y así sucesivamente. Por lo tanto, ninguna de las etiquetas <data> está completa y servirá para nada.

que puedes usar:

<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="file" 
      android:mimeType="*/*" 
      android:pathPattern=".*\\.cbz" 
      android:host="*" 
     ></data> 
    </intent-filter> 

Usted puede tener una segunda <data> pero necesitaría los cuatro atributos de nuevo ya que los cuatro atributos son obligatorios con Android 4 si desea utilizar android:pathPattern. (No estaban con versiones anteriores de Android)

+0

Hola Martin, si uso el filtro de intención anterior, Mi aplicación aparece cuando intenté abrir la aplicación de Gmail desde la notificación. –

+0

¿Funciona la combinación de varias etiquetas ** **? Solo detecta el primero para mí. –

Cuestiones relacionadas