PathPattern para que coincida con la extensión de archivo no funciona si hay un punto en otro lugar en el nombre de archivo?

Veo numerosos ejemplos de usar pathPattern para definir un filtro de intenciones para una extensión / tipo de archivo específico; Por ejemplo, pathPattern=".*\\.xyz" .

Desafortunadamente, esto no parece funcionar correctamente si el archivo en cuestión tiene un período en otro lugar en el camino; Por ejemplo "my.filename.xyz".

¿Hay una sintaxis pathPattern que coincidirá con "myfilename.xyz" y "my.filename.xyz"?

El equipo de android escogió una manera desafortunada de implementar pathPattern. Puedes echar un vistazo a cómo se implementa la correspondencia de patrones en la clase android.os.PatternMatch:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/PatternMatcher.java

Estamos acostumbrados a. * Trabajar como lo hace en una expresión regular, donde el * match es codicioso y coincidirá con tantos caracteres como sea posible. En la implementación de PatterMatch, el partido no es codicioso. El. * Coincidirá con tantos caracteres como pueda, hasta que encuentre una coincidencia para el siguiente carácter en la cadena.

Ejemplo:

Cadena: "/mnt/my.file.mytype"
PathPattern: ". * \\. Mytype"

El ". *" En pathPattern coincidirá con la subcadena "/ mnt / my" y, por lo tanto, no coincidirá con la cadena.

Dada esta limitación, no veo una forma de escribir pathPattern que pueda coincidir con cualquier cadena que termine en ".mytype". Lo mejor que puede hacer es seguir la solución de Jason para agregar patrones adicionales para coincidir con rutas con tantos puntos como usted está dispuesto a especificar patrones.

Se produjo el mismo problema intentando abrir un archivo en una carpeta de puntos. Encontré que podría agregar varios elementos de "datos", dependiendo de cuántos puntos esperaba tener en mis caminos:

  <data android:pathPattern=".*\\.mytype"/> <data android:pathPattern=".*\\..*\\.mytype"/> <data android:pathPattern=".*\\..*\\..*\\.mytype"/> <data android:pathPattern=".*\\..*\\..*\\..*\\.mytype"/> 

Feo, sin embargo. Alguien sabe una manera mejor?

Utilicé esto:

 <activity android:name=".activity.GifActivity" android:label="Cool Player ^_^"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http"/> <data android:scheme="https" /> <data android:host="*"/> <data android:pathPattern="/.*\\.mp4"/> </intent-filter> </activity> 

Esto se abrirá después url:

No se abrirá para lo siguiente:

Creo que la clave aquí es host="*" . No he estudiado a fondo esto. Pero funciona para mí, espero que ayude a alguien por ahí también.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.