Autore Topic: Cross platform applications  (Letto 807 volte)

Offline Davide_77

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Win XP
Cross platform applications
« il: 19 Giugno 2010, 11:50:51 CEST »
0
Ciao ragazzi....
Questa non è una vera e propria richiesta di assistenza, anche se molto piano, comincio a capire la logica android, e vi ringrazio per tutto l'aiuto che mi avete dato.
La mia è più una domanda....

Visto che esce una versione android ogni mese (esagero volutamente), mi chiedevo come si fa a fare un unica applicazione che per esempio copra dalla 1.6 in avanti.
Ravanando nella gestione dei contatti mi sono accorto che la classe People è deprecata, sostituita dalla ContactsContract.
Fin qui niente di male ma.....
Questo significa che devo fare 2 o più applicazioni, una per ogni Android esistente?
Oppure qualcuno di voi ha affrontato il problema controllando la versione installata e applicando il codice più opportuno?

Qual è l'approccio migliore?

Thanks e infinite grazie per avermi assistito nei primi passi...
Purtroppo non riesco a diventare un supporto per chi ha bisogno perchè il lavoro mi occupa tutto il giorno e poi... sono e resto un novizio... la maggior parte delle cose le imparo tramite articoli in internet...

Grazie a tutti!!!!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Cross platform applications
« Risposta #1 il: 20 Giugno 2010, 19:28:44 CEST »
+1
E' più difficile a dirsi che a farti.

Crei una classe astratta o una interfaccia in cui metti i metodi che ti servono e poi ti crei una classe che funga da factory che in base alla versione di Android ti ritorna una una implementazione dell'interfaccia con le chiamate corrette in base alla versione... una roba tipo:

Codice (Java): [Seleziona]
public class ContactsApiFactory {

        public static ContactsApi getContactsApiForCurrentPlatform () {

                int sdkVersion = Integer.parseInt( Build.VERSION.SDK );
                if ( sdkVersion < Build.VERSION_CODES.ECLAIR )
                        return new ContactsOldApi();
                else
                        return new ContactsNewApi();

        }

}

Dove nell'interfaccia ContactApi definisci i metodi che ti servono (leggere tutti i contatti, scrivere un nuovo contatto,...). Nella classe ContactsNewApi implementi questi metodi usando i ContactContract, mentre nell'altra usi le vecchie api.
Ovviamente devi impostare il target del progetto ad Android 2.x...




Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:Cross platform applications
« Risposta #2 il: 22 Giugno 2010, 08:50:54 CEST »
0
La soluzione proposta da Ricky è la più elegante però non cambia il fatto che se deploy un apk con api 2.x in un cellulare che per esempio supporta api 1.6 l'applicazione va in crash....

L'unica è o scegliere un target ben definito oppure usare il sistema della reflection

esempio come usare il killbackgroundprocess (SDK 2.2):
Codice (Java): [Seleziona]
                Class<? extends ActivityManager> dummyClass = activityManager.getClass();
                Class<?>[] partypes = new Class<?>[]{String.class};
                Method meth;
                try {
                        meth = dummyClass.getMethod("killBackgroundProcesses", partypes);
                        Object[] arglist = new Object[]{app.getPackageName()};
                        meth.invoke(activityManager, arglist);
                } catch (Exception e) {

                }
« Ultima modifica: 22 Giugno 2010, 08:54:21 CEST da Agafi »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re: Cross platform applications
« Risposta #3 il: 22 Giugno 2010, 10:45:06 CEST »
0
non va in crash. ti beccheresti un VerifyErrorException solo andando ad instanziare una classe che usa delle api non presenti nella piattaforma, ma con il mio codice non avviene. testato ;)

Sent from my HTC Desire using Tapatalk

Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:Cross platform applications
« Risposta #4 il: 23 Giugno 2010, 14:12:14 CEST »
0
Hai ragione Ricky sul verifyexception a me invece ha dato questo eccezione allo startup dell applicazione da me creata ancora prima di istanziare qualsiasi cosa...

Si vede allora che avrò sbagliato qualcosa io ;-)