2017-05-12 3 views
0

J'ai développé une application qui a besoin de jouer des sons et avoir un grand ensemble de fichiers de sons en format .wav qui se vante autour de 1 Go de taille. J'ai suivi la documentation officielle pour faire le fichier d'extension.Android APK Extension fichier, Impossible de lire les fichiers .wav

D'abord, j'ai fait un fichier .zip avec 0 compressions, tous les fichiers .wav sont sous ces fichiers (sans aucun sous-dossier, ce qui est principal.1.package contient tous les fichiers sons). Puis j'ai renommé le dossier .zip en .obb. Après cela, j'ai mis ce fichier .obb dans le dossier des applications sous le dossier obb de stockage partagé (com.moinul.app est mon nom de paquet, donc le nom du dossier était, aussi le fichier d'expansion ont été nommés main.1.com.moinul.app .obb)

le problème est quand je tente de lire les fichiers de mes fichiers d'extension que je reçois null exceptions pointeur:

try 
    { 
     String param = (String) v.getTag(); 

     ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, 1, 0); 
     AssetFileDescriptor fd = expansionFile.getAssetFileDescriptor("p25_1.wav"); 

     MediaPlayer mPlayer = new MediaPlayer(); 
     mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mPlayer.setDataSource(fd.getFileDescriptor()); 
     mPlayer.prepare(); 
     mPlayer.start(); 
    } 
    catch (Exception e) 
    { 
     Log.w(TAG, e.getMessage() + ""); 
     e.printStackTrace(); 
    } 

Je reçois des exceptions disant que fd est nulle. Toute aide serait appréciée. Merci

Répondre

0

Essayez utilisation: AssetFileDescriptor fd = expansionFile.getAssetFileDescriptor("assets/p25_1.wav");

+0

Mais il n'y a aucun dossier d'actifs à l'intérieur. Laissez-moi essayer quand même. – aaa111

+0

Même pas de chance malheureusement. – aaa111

0

Essayez `public class Test étend l'activité {

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    String TAG = "Test"; 
    Context context = this; 
    try { 
     MediaPlayer mediaPlayer = new MediaPlayer(); 

     ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, 1, 0); 
     AssetFileDescriptor assetFileDescriptor = expansionFile.getAssetFileDescriptor("assets/p25_1.wav"); 

     if (assetFileDescriptor != null) { 
      final FileInputStream fis = assetFileDescriptor.createInputStream(); 
      if (fis != null) { 
       mediaPlayer.setDataSource(fis.getFD()); 
       fis.close(); 
       mediaPlayer.prepare(); 
       mediaPlayer.start(); 
      } else { 
       Log.w(TAG, "/fis: null"); 
      } 
     } 

    } catch (Exception e) { 
     Log.w(TAG, e.getMessage() + ""); 
    } 
} 

}`

+0

Si mon code ne fonctionne pas, vous devriez peut-être vérifier l'extension du fichier. J'espère que cela peut vous aider. http://stackoverflow.com/questions/18929273/how-to-create-obb-file-as-main-apk-expansion-file-using-jobb-tool – Dungnbhut

0

Ok, donc cela a fonctionné finalement. Après le changement en:

AssetFileDescriptor fd = expansionFile.getAssetFileDescriptor("Sounds/p25_1.wav"); 

Son fonctionnement maintenant. C'est bizarre que j'ai dû ajouter Sounds, qui était le nom du dossier avant de compresser (j'ai effectivement compressé ce dossier et tous les .wav sont en dessous). Je pense que le compresseur a fait un autre sous-dossier à l'intérieur du fichier .zip.

En tout cas merci pour l'aide.