android - lector - mejor app para leer libros
Asociando aplicaciĆ³n con formato Epub (1)
¿Cómo hago que el sistema de Android reconozca que los archivos epub en el almacenamiento interno o externo se pueden abrir con mi aplicación?
El "sistema android" no tiene mucho que ver con eso, particularmente hoy.
El soporte en MimeTypeMap
(o, más exactamente, libcore.net.MimeUtils
de las clases de framework) para .epub
/ application/epub+zip
se agregó ~ hace 35 horas . Presumiblemente, aparecerá en una futura edición de Android. Antes de eso, los únicos administradores de archivos que usarán ese tipo MIME son los que lo agregaron en sí mismos.
En un nivel alto, cuando se enfrenta a un problema como este, la solución es bastante simple:
Encuentra otra aplicación que haga lo que quieras (en este caso, otro lector de EPUB)
Use la aplicación del navegador de aplicaciones para ver cómo se ve el manifiesto de esa aplicación y qué eligió para las stanzas de
<intent-filter>
En general, suelo ver un <intent-filter>
con un esquema y un tipo MIME o un esquema, host y cosas de ruta. Es poco probable que el tipo MIME y el camino sean útiles, ya que si el Intent
no tiene explícitamente el tipo MIME en él, y Android no sabe cómo asignar esa extensión específica a su tipo MIME, su <intent-filter>
puede no coincide.
Además, deberá probar con varias aplicaciones de "Administrador de archivos", ya que Android no tiene un administrador de archivos, y por lo tanto, es posible que experimente errores / limitaciones en el que está probando.
¿Cómo obtengo el explorador de archivos predeterminado (Storage Access Framework) para mostrar los archivos epub?
Especifique el tipo MIME adecuado y ore por un milagro.
Nuevamente, hasta que Android ofrezca un soporte un poco más integrado para mapear .epub
al tipo MIME, usted depende de proveedores de almacenamiento que sepan que los .epub
a la application/epub+zip
tipo MIME. Algunos proveedores lo harán, ya que están obteniendo esa información de algún servidor back-end que puede conocer más tipos MIME que el propio Android. Es posible que algunos proveedores no lo MediaStore
como el proveedor respaldado por MediaStore
Android de lo que hay en el almacenamiento externo, ya que dudo que MediaStore
tenga su propio soporte local para los archivos EPUB.
No sé cómo hacer que mi aplicación se registre con archivos epub en un dispositivo móvil. Tengo un conjunto de filtros de intención en mi manifiesto de Android, pero todavía no se abre con los archivos epub en la tarjeta sd. Cuando File Explorer
aplicación File Explorer
, muestra el archivo, pero cuando hago clic en él, dice "El sistema no admite este tipo de archivo:". Cuando descargo un archivo de Internet y luego navego a la carpeta de descargas usando la aplicación de descargas, el archivo no aparece en absoluto (aunque esté en la carpeta de descargas en el buscador de archivos). También intenté que los archivos epub aparecieran con la intención del selector de archivos ( Intent.ACTION_OPEN_DOCUMENT
), pero no Intent.ACTION_OPEN_DOCUMENT
suerte. Supongo que los dos últimos no aparecen porque el intento se carga con Intent.CATEGORY_OPENABLE
He intentado varios archivos EPUB y todo sin éxito.
¿Alguien puede ayudarme a descubrir lo que me estoy perdiendo?
Usando KitKat y teléfonos superiores.
Nota: esto funciona con la descarga desde Internet. Si voy a un enlace epub, esto funciona, pero no desde el sistema de archivos.
<!-- Open File Types -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:host="*" android:scheme="file"/>
<data android:pathPattern=".*//.epub"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:host="*" android:scheme="file" android:mimeType="text/plain"/>
<data android:pathPattern=".*//.epub"/>
</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:host="*" android:scheme="file"/>
<data android:mimeType="application/epub+zip"/>
</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:host="*" android:scheme="http"/>
<data android:pathPattern=".*//.epub"/>
</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:host="*" android:scheme="http" android:mimeType="text/plain"/>
<data android:pathPattern=".*//.epub"/>
</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:host="*" android:scheme="http"/>
<data android:mimeType="application/epub+zip"/>
</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:host="*" android:scheme="https"/>
<data android:pathPattern=".*//.epub"/>
</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:host="*" android:scheme="https" android:mimeType="text/plain"/>
<data android:pathPattern=".*//.epub"/>
</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:host="*" android:scheme="https"/>
<data android:mimeType="application/epub+zip"/>
</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:host="*" android:scheme="content"/>
<data android:pathPattern=".*//.epub"/>
</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:host="*" android:scheme="content" android:mimeType="text/plain"/>
<data android:pathPattern=".*//.epub"/>
</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:host="*" android:scheme="content"/>
<data android:mimeType="application/epub+zip"/>
</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:host="*" android:scheme="book"/>
</intent-filter>
<intent-filter
android:icon="@raw/icon"
android:label="ePub File"
android:priority="1" >
<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:scheme="https" />
<data android:scheme="ftp" />
<data android:scheme="file" />
<data android:host="*" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*//.epub" />
</intent-filter>
Actualizar:
Buscando respuestas a las siguientes preguntas para la recompensa:
- ¿Cómo hago que el sistema de Android reconozca que los archivos epub en el almacenamiento interno o externo se pueden abrir con mi aplicación?
- ¿Cómo obtengo el explorador de archivos predeterminado ( Storage Access Framework ) para mostrar los archivos epub?