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){}
        }

Esperimenti di mappe

Ho fatto qualche primo esperimento con Osmdroid, una libreria Android che permette di gestire mappe offline in particolare quelle di OpenStreetMap

 
La procedura prevede l'importazione di due librerie nella Build Path e cambiare il Manifest ma per il resto e' piuttosto banale. I dati vanno inseriti nella SD card nella cartella osmdroid

Ritardo

alcune volte e' necessario ritardare l'esecuzione di un comando

Thread.sleep(tempo in millisecondi);

martedì 13 marzo 2012

Offline Maps

 Per sviluppare una applicazione di navigazione avevo bisogno di una basa cartografica gratuita e non legata alla connessione ad Internet. Il problema e' stato risolto mediante il software MOBAC (http://mobac.sourceforge.net/) che permette di scaricare in vari formati i dati relativi principalmente ad Openstreetmap vestiti in vario mod.
Puo'essere selezionato il numero di livelli di zoom da salvare (Zoom Levels, varia a seconda della fonte scelta), ed il provider delle informazioni 


MOBAC con sovrapposta una traccia GPX (in rosso) per riferimento   
. 
Scelta del provider delle mappe


Per una corretto utilizzo conviene in Layer Settings scegliere Recreate/Adjust Map Tiles sul formato PNG.

Scelta del formato di salvataggio dati
Uno dei passaggi finali e' scegliere da Atlas Content il formato in cui saranno salvati  i dati (per il mio utilizzo la soluzione e' Osmdroid Zip) dato che usero' la libreria java OsmDroid
Si termina con Create Atlas e....si aspetta

I dati vengono salvati nella subdir atlases nel formato scelto

venerdì 9 marzo 2012

Con naso all'insu

Una serata quasi invernale (8 Marzo 2012 ore 21:20 circa) , una digitale da 2 MegaPixel, un cavalletto, un telefono Android e le finestre di casa

Giove e Venere nel cielo di Caldine


Giove e Venere su Google Skymap di Android


Giove e Venere in Stellarium (Linux)


Luna e Marte nel cielo (maledetta Luna)


Luna e Marte in Google SkyMap di Android


Luna e Marte in Stellarium (Linux)

Realta' Aumentata

un primo esempio di Realta' Aumentata con un programma basato su Mixare  e android-augment-reality-frameworke inserendo con una base dati locale (ovvero senza connessione ad Internet)

martedì 6 marzo 2012

Conversion to Dalvik format failed with error 1

Nel caso, in fase di compilazione, compaia il messaggio sopra riportato (in particolare cercando di compilare un progetto importato) la soluzione risiede nel controllare le librerie Android che vengono caricate cliccando sul Progetto, selezionando Java Build Path e controllando la correttezza delle librerie

giovedì 1 marzo 2012

Clonare un progetto Git


git clone git://github.com/mixare/mixare.git mixare

Installare app sull'emulatore

Per installare le App sull'emulatore Android senza passare dal Market si puo' utilizzare da riga di comando

adb install app.apk

.nomedia

In automatico il programma per la visualizzazione di fotografie di Android effettua una ricerca in tutte le sottocartelle della scheda SD. Questo e' comodo per alcuni versi ma vedere le foto delle copertine degli album nella cartella Musica insieme alle fotografie personali non e' molto gradevole.

Per fare in modo di escludere una directory dalla ricerca automatica e' sufficiente creare un file vuoto denominato .nomedia all'interno della cartella. Le immagini saranno comunque consultabili con un normale File Manager in caso di necessita'

Mirino sulla macchina fotografica

Per l'uso in un'altra applicazione avevo bisogno di inserire un mirino sull'immagine da riprendere con il telefono. Questa funzione non e' implementata di default e non e' di difficile realizzazione; in pratica si pone un oggetto ImageView con una immagine PNG trasparente al di sopra dell'anteprima (SurfaceView) della fotocamera
Visualizzazione sullo schermo del telefono

Foto salvata sul telefono
Per i sorgenti effettuare il download dell'applicazione CameraOV dal mio account GitHub

mercoledì 29 febbraio 2012

Un aspetto carino e poco conosciuto dell'emulatore Android e' quello di poter simulare non solo telefoni generici ma anche anche modelli specifici ed in alcuni casi anche tablet.

Selezionando per esempio nell'SDK Manager il Galaxy Tab (attenzione, e' presente solo nella versione Android 2.2)


si avra' la possibilita' di creare una nuova macchina virtuale
 con una emulazione dotata di risoluzione pari all'orginale

Syntax Highligthing su Blogger

Avevo voglia di rendere piu' carino il codice scritto sul blog sulla falsariga di phpBB..peccato che su Blogger questa funzione non e' presente. Seguendo questo esempio si puo' impostare un comodo syntax highlighter

per prima cosa si deve modificare il layout di blogger introducendo le righe
<link href="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js">  </script>
Successivamente si deve modificare il tag body aggiungendo
<body onload='prettyPrint()'> 
Il codice deve essere inserito tra due pre

<pre class="prettyprint">
...import android.media.AudioRecord;
import android.media.MediaRecorder.AudioSource;
import android.media.AudioFormat;


class recorderThread extends Thread {
public boolean recording;  //variable to start or stop recording
public int frequency; //the public variable that contains the frequency value "heard", it is updated continually while the thread is running.
public recorderThread () {
</pre>

giovedì 23 febbraio 2012

Html link in AlertDialog


Creare dei link all'interno di un AlertDialog non e' banale
Nell'esempio sottostante sono riportate in grassetto le modifiche rispetto al codice non Html; in particolare l'ultima riga deve essere necessariamente presente e dopo .show altrimenti i link saranno evidenziati ma inutilizzabili

--------------------------------------------------
AlertDialog.Builder conferma_canc = new AlertDialog.Builder(this);
conferma_canc.setTitle("Credits");
conferma_canc.setMessage(Html.fromHtml("App developed by Luca Innocenti (lucainnoc@gmail.com).<a href=\"http://github.com/c1p81\">Source Code Link</a>. "));
conferma_canc.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
         }
        });
AlertDialog alert = conferma_canc.create();
alert.show();
((TextView)  lert.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
--------------------------------------------------

Mappa frane da news on line

Correva l'anno 2008 ed il mio direttore di Dipartimento mi aveva chiesto di lavorare sui Big Data per estrarre dati di geolocalizzazione...