2010-07-05 23 views
7

Benim gereksinimi içerik sağlayıcı üzerinden başka bir uygulamanın bir uygulamanın Varlık dosyasını açmak. Ben birkaç açamaz duyuyorumSorun ise

(Ben ContentProvider uygulamasıyla bu dosyayı açığa ediyorum) dosyalar ve okumak, ancak bazı dosyaları açarken istisna alıyorum. Lütfen Varlık Dosyasının açılması için uygulamayı bulun.

@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); 
} 

Bazı zamanlar, am.openFd(file_name); diyerek istisna atıyor, o

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) 

Ama, benim PC ve hatta bir başka şekilde Android cihazı açabileceğiniz aynı dosya

.

Bana göre, herhangi bir senaryoda, bu istisnayı alacağız.

Şimdiden teşekkürler. * .mp3 dosyaları gibi işe yaramazsa, tüm öğeleri sıkıştırmaya çalışır.

cevap

12

Sıkıştırılmamış dosya türlerinin tam bir listesi olup olmadığını bilmiyorum, ancak dosyalarınızı .mp3 olarak yeniden adlandırırsanız iyi olmalısınız (sıkıştırmak veya sıkıştırmama kararı yalnızca uzantıya dayalıdır)

biraz google arama ortaya koydu: oluşturma işlemi üzerinde yeterli kontrole sahip olursa

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

, sen öğeleri ekleyin zip veya aapt ile "-0" bayrağını kullanabilirsiniz. Bağlantı yukarıda anılan dan

-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 android-VERSION \ araçları

dizin

sizin

android-sdk \ platformlarında \ bulunur:

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

Uzantıyı böyle değiştirirsek, bu durum uygulamayı başka bir şey bekliyorsa uygulamada kullanırken bu sorun olmaz mı? – clu