mercoledì 14 marzo 2012

un metodo per trasportarei dati del programma (per esempio un database o della cartografia) insieme all'apk e' quello di inserire il file dentro la cartella assets del progetto Android. Nel codice seguente viene prima controllato tramite un list quali sono i file in assets e poi vengono copiati mediante uno stream nella SDCard dopo aver creato la directory

Il problema e' che questo tipo di soluzione non e' sempre ottimale perche' appesantisce l'apk e poi crea una duplicazione dello spazio disco perche' di fatto il file contenuto dentro assets viene copiato solo la prima volta sulla SD e poi diventa inutile
 
        //copy from assets to sd card
        AssetManager assetManager = getAssets();
        String[] files = null;
        try {
         files = assetManager.list("");
        } catch (IOException e){
         
        }
        for (String filename : files){
         InputStream in = null;
         OutputStream out = null;
         File osmdir = new File(Environment.getExternalStorageDirectory(),"osmdroid");
         if (!osmdir.exists()) osmdir.mkdirs();
         
         try {
          in = assetManager.open(filename);
          out = new FileOutputStream(Environment.getExternalStorageDirectory()+"/osmdroid/"+filename);
          byte[] buffer = new byte[1024];
          int read;
          while ((read=in.read(buffer))!=-1){
           out.write(buffer,0,read);
          }        
         } catch (IOException e){}
        }