2010-07-05 7 views
7

Mi requisito es posible abrir el archivo de activos de una aplicación desde otra aplicación a través de proveedor de contenido. (Estoy exponiendo ese archivo con la aplicación ContentProvider)Problema al abrir el archivo de activo con la ayuda del proveedor de contenidos

soy capaz de abrir algunas archivos y leer, pero al abrir algunos archivos recibo una excepción. Encuentre la implementación para abrir el Archivo de Activos.

@Override 
public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException { 
    AssetManager am = getContext().getAssets(); 
    String file_name = uri.getLastPathSegment(); 
    if(file_name == null) 
     throw new FileNotFoundException(); 
    AssetFileDescriptor afd = null; 
    try { 
     afd = am.openFd(file_name); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return afd;//super.openAssetFile(uri, mode); 
} 

Algunas veces, am.openFd(file_name); es tirar una excepción diciendo que,

java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed 
at android.content.res.AssetManager.openAssetFd(Native Method) 
at android.content.res.AssetManager.openFd(AssetManager.java:329) 
at com.pineone.swfinstaller.SwfProvider.openAssetFile(SwfProvider.java:25) 
at android.content.ContentProvider$Transport.openAssetFile(ContentProvider.java:218) 
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:234) 
at android.os.Binder.execTransact(Binder.java:288) 
at dalvik.system.NativeStart.run(Native Method) 

embargo, el mismo archivo que pueda abrir en mi PC o incluso en un dispositivo Android de alguna otra manera.

¿Alguien me puede señalar, en qué escenarios, vamos a obtener esta excepción.

Gracias de antemano.

Respuesta

12

Android intenta comprimir todos los recursos, a menos que sea inútil, como para los archivos * .mp3. No sé si hay una lista completa de tipos de archivos que no se comprimen, pero debería estar bien si cambia el nombre de los archivos a .mp3 (la decisión de comprimir o no solo se basa en la extensión)

Una pequeña búsqueda en google reveló:

http://osdir.com/ml/android-ndk/2010-04/msg00086.html

Si tiene suficiente control sobre el proceso de construcción, se puede utilizar el "-0" bandera con cremallera o aapt añadir los activos.

-0 specifies an additional extension for which such files will not 
    be stored compressed in the .apk. An empty string means to not 
    compress any files at all. 

aapt se encuentra en sus

android-sdk \ platforms \ android-Version \ herramientas

directorio

desde el enlace antes citada:

static const char* kNoCompressExt[] = { 
".jpg", ".jpeg", ".png", ".gif", 
".wav", ".mp2", ".mp3", ".ogg", ".aac", 
".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", 
".rtttl", ".imy", ".xmf", ".mp4", ".m4a", 
".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2", 
".amr", ".awb", ".wma", ".wmv" 
}; 
+0

Si cambiamos la extensión de esta manera, ¿esto no causará problemas al usar el archivo en la aplicación si está esperando algo más? – clu

Cuestiones relacionadas