Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

Lanciare un activity main da codice

Discussione in 'Development' iniziata da pino8314, 15 Feb 2013.

  1. pino8314

    pino8314 Baby Droid

    Iscritto:
    5 Feb 2011
    Messaggi:
    28
    "Mi Piace":
    0
    Salve,
    avrei l'esigenza di avviare un'activity main direttamente da codice ma non so come fare. Vi spiego meglio...
    Generalmente, intervenendo nel manifest, è possibile stabilire un'activity main attraverso un intent-filter:

    Codice:
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    
    nel mio caso non voglio settare un activity main di default che parta all'avvio dell'applicazione. Vorrei che all'avvio dell'applicazione, in seguito ad un controllo che eseguo nella classe legata all'application, si apra un activity specifica. Perciò se avviene un evento avvio un activity, se avviene un altro evento ne avvio un'altra.
    adesso mi chiedo, esiste un modo per far lanciare un activity main direttamente da codice senza stabilirne una di default all'interno del manifest?

    grazie
     
  2. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Ciao,

    nel codice dove vuoi richiamare l'activity usi :

    Codice:
    
    Intent LaMiaActivity= new Intent("app.virginia.firstrelease.LaMiaActivity");
    startActivity(LaMiaActivity);
    
    
    e nel manifest inserisci :

    Codice:
    
            <activity android:name="app.sorgente.firstrelease.LaMiaActivity" >
                <intent-filter>
                    <action android:name="app.sorgente.firstrelease.LaMiaActivity" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
    
    

    Nell'activity che chiamerai, per tornare all'activity chiamante basta usare il metodo finish().

    Spero di essere stato utile !

    Ciao
     
    Ultima modifica: 15 Feb 2013
  3. pino8314

    pino8314 Baby Droid

    Iscritto:
    5 Feb 2011
    Messaggi:
    28
    "Mi Piace":
    0
    grazie per il tuo aiuto, in realtà inizio ad avere dei dubbi su ciò che sto cercando di fare... per farmi capire meglio e se hai 10 minuti da dedicarmi entro nel dettaglio di ciò che vorrei fare.
    All'avvio della mia app parte un activity (la main activity) di login, che consente all'utente di autenticarsi e visualizzare le successive activity.
    A questo punto, come avviene ad esempio con l'app di facebook, non vorrei ripresentare l'activity di login ogni volta che l'utente chiude l'app e la riapre ma vorrei che l'utente rimanesse o fosse automaticamente autenticato fino a che non sia lui a decidere di uscire (la logica che vorrei ottenere è identica a quella dell'app di facebook).
    Non sapendo come muovermi in questa circostanza, ho pensato ad una soluzione che non so nemmeno essere corretta ma che mi è sembrata la più plausibile immedesimandomi nell'ottica di facebook.

    Dopo che l'utente ha effettuato il login, salvo il sul DB username e password crittografate e rieffettuo l'accesso trasparente all'avvio dell'app.

    Ricollegandoci al motivo per cui ho aperto il post, vorrei poter effettuare in background il login e lanciare la seconda activity in maniera del tutto trasparente.
    Cosi ho pensato a due soluzioni:

    1. Faccio effettuare il login direttamente alla main activity.
    Una volta lanciata l'app, all'onResume della main activity controllo se l'utente aveva già effettuato un login (quindi se sul db sono presenti dei dati di autenticazione) e se così fosse effettuo nuovamente un controllo sulla validità dei dati di login e, in caso andasse tutto bene, chiudo l'activity principale (con finish()) e apro la seconda activity.
    Questa soluzione purtroppo mi crea un problema, il finish() non chiude soltanto l'activity principale ma conclude tutta l'app. Se invece utilizzo lo stesso metodo all'interno dell'onclick del pulsante login, tutto funziona regolarmente e il finish conclude soltanto la main activity

    2. La seconda soluzione era quella di far fare il lavoro di riautenticazione alla classe dell'application e, ad autenticazione avvenuta, far decidere all'application stessa quale activity avviare.

    Naturalmente, come ho detto prima, inizio ad avere dei dubbi sull'approccio che sto adottando e accetto consigli su come effettuare un login trasparente.

    grazie e scusa se mi sono prolungato :)
     
  4. pino8314

    pino8314 Baby Droid

    Iscritto:
    5 Feb 2011
    Messaggi:
    28
    "Mi Piace":
    0
    qualcuno che mi dia un consiglio please, non so come procedere
     
  5. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Credo che salvarsi la login su un db sia la cosa migliore.
    Quando avvii l'app fai il controllo sul db, se la login c'è avvii la seconda activity altrimenti richiami la prima.
    L'approccio che stai adottando mi sembra corretto.
    Non capisco questo :
    perchè vuoi chiudere la main ? non ti basta richiamare la seconda activity e stop ?
    Ad ogni modo presumo che in questo caso il finish() debba essere richiamato nella seconda activity ... una cosa tipo MainActivity.finish().
    Non so se funziona, ma puoi provare!
    Scusa la tarda risposta!
     
  6. pino8314

    pino8314 Baby Droid

    Iscritto:
    5 Feb 2011
    Messaggi:
    28
    "Mi Piace":
    0
    grazie mille per il tuo aiuto e scusami se ho tardato nella risposta ma ho avuto dei giorni infernali.
    chiamo il finish perchè il main voglio chiuderlo e far si che la seconda activity diventi un main. In questo modo, quando dalla seconda activity schiccio il tasto back, non torno alla schermata di login ma esco dall'app.
    In effetti non ho ancora provato a richiamare il finish del main dalla seconda activity.. Provo e ti faccio sapere.