Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-08-2015, 09:28   #1
abbobba
Member
 
L'Avatar di abbobba
 
Iscritto dal: Oct 2010
Messaggi: 78
[android] Chiarimento sugli INTENT

Salve

stavo provando a utilizzare nel manifest la modalità:
Codice:
android:launchMode="singleInstance"
a quanto ho letto in rete ogni volta che si arriva a questo punto:
Codice:
Intent myIntent = newIntent(activityB.this,activityC.class);
myIntent.putExtra("firstKeyName","FirstKeyValue");
myIntent.putExtra("secondKeyName","SecondKeyValue");
startActivity(myIntent);
invece di crearmi una nuova instanza dell'activityC creata, verifiche se nello stack è già presente un'istanza e eventualmente l'avvia. Quindi se si verifica ciò al posto di iniziare dal metodo onCreate() inizia da:
Codice:
protected void onNewIntent (Intent intent) {        
        super.onNewIntent(intent);
        setIntent(intent);
        Log.i(TAG, "onNewIntent");
        processExtraData();
    }
ora al di la del fatto che tutto funziona, la cosa che non riesco a capire è cosa fa esattemente onNewIntent(Intent intent) in particolare il parametro intent a chi si riferisce? e setIntent(intent) cosa fa?
__________________
Trattative concluse con: oldfield, fabioBS
abbobba è offline   Rispondi citando il messaggio o parte di esso
Old 12-08-2015, 11:04   #2
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
In quest'ottica la funzione degli intent viene sminuita, in realtà essi hanno uno scopo più elevato, ovvero quello di fornire un meccanismo di comunicazione interprocesso. "onNewIntent" è l'event handler del ricevente che viene invocato a fronte di una richiesta da parte di un'altra activity, o di un'altra applicazione, o del sistema operativo. Il parametro intent descrive l'azione richiesta dal chiamante; la chiamata a setIntent serve per aggiornare l'intent dell'activity in cui ti trovi, è necessaria solo se il comportamento dell'activity deve essere influenzato dall'intent che l'ha chiamata (nel tuo caso è superflua). Se ti interessa sapere cosa contiene l'intent nel tuo caso, puoi mettere un breakpoint ed analizzare la variabile.
Qui trovi la descrizione ufficiale.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2015, 10:21   #3
abbobba
Member
 
L'Avatar di abbobba
 
Iscritto dal: Oct 2010
Messaggi: 78
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
In quest'ottica la funzione degli intent viene sminuita, in realtà essi hanno uno scopo più elevato, ovvero quello di fornire un meccanismo di comunicazione interprocesso. "onNewIntent" è l'event handler del ricevente che viene invocato a fronte di una richiesta da parte di un'altra activity, o di un'altra applicazione, o del sistema operativo. Il parametro intent descrive l'azione richiesta dal chiamante; la chiamata a setIntent serve per aggiornare l'intent dell'activity in cui ti trovi, è necessaria solo se il comportamento dell'activity deve essere influenzato dall'intent che l'ha chiamata (nel tuo caso è superflua). Se ti interessa sapere cosa contiene l'intent nel tuo caso, puoi mettere un breakpoint ed analizzare la variabile.
Qui trovi la descrizione ufficiale.
grazie!

Un'ultima cosa mi potresti fare degli esempi di casi d'usi in cui è preferibile usare startActivityForResult() rispetto al startActivity()
__________________
Trattative concluse con: oldfield, fabioBS
abbobba è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2015, 10:44   #4
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
startActivityForResult viene utilizzato quando si vuole ottenere una risposta dall'activity richiamata. Supponiamo ad esempio che tu voglia realizzare un'applicazione che necessita di scattare delle foto, ma non vuoi "reinventare la ruota" scrivendo tutte le funzioni necessarie per gestire la fotocamera (white balance, zoom, flash mode, ecc..), piuttosto preferisci appoggiarti all'applicazione di sistema già predisposta a tale scopo. Per fare ciò occorre avviare l'applicazione (activity) della fotocamera, comunicandole che si desidera ricevere una foto (intent).
Nella tua activity avrai una cosa del genere (ho omesso il controllo degli errori per brevità):
Codice:
void scattaFoto() {
    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, 13);
}

public void onActivityResult(int requestID, int res, Intent data) {
    super.onActivityResult(requestID, res, data);
    if (requestID == 13) {
        Bitmap picture = (Bitmap) data.getExtras().get("data");
        // Fai qualcosa con l'immagine ottenuta
    }
}
Siccome onActivityResult può gestire il risultato di diverse activity (o più istanze dello stesso tipo di activity) occorre identificare qual'è l'activity che l'ha invocata utilizzando l'id della richiesta, ovvero un numero intero arbitrario ed univoco (nell'esempio ho utilizzato la costante 13, ma è meglio adottare una strategia più robusta).

Riporto dalla doc ufficiale un passo molto significativo:
Quote:
this method should only be used with Intent protocols that are defined to return a result. In other protocols (such as ACTION_MAIN or ACTION_VIEW), you may not get the result when you expect. For example, if the activity you are launching uses the singleTask launch mode, it will not run in your task and thus you will immediately receive a cancel result
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2015, 12:13   #5
abbobba
Member
 
L'Avatar di abbobba
 
Iscritto dal: Oct 2010
Messaggi: 78
capisco, ultima domanda e non ti disturbo più
se ho per esempio un' activityA che riceve i dati sia dall'activityB sia dall'activityC come faccio a scegliere un determinato comportamento in base all'activity chiamante. Cioè mi spiego meglio l'activityB mi passa i dati B e l'activityC mi passa i dati C, come faccio nell'activityA a capire chi l'ha chiamata ed estrarre i dati corrispondenti.
questo modo può andare bene o esiste altro?

grazie
__________________
Trattative concluse con: oldfield, fabioBS

Ultima modifica di abbobba : 13-08-2015 alle 13:04.
abbobba è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2015, 13:34   #6
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
L'activity non deve sapere chi la sta chiamando, deve solo rispondere al comportamento richiesto (vedi paragrafo successivo). Puoi specificare il comportamento come extra all'interno dell'intent e recuperarlo dal metodo onNewIntent.
Fai attenzione alla launch mode, in determinate condizioni è possibile che la stessa istanza dell'activity riceva più intent, in questi casi è necessario implementare una politica di gestione.

In ogni caso l'activity dovrebbe rispondere ad un unico tipo di richiesta (comportamento), e tali richieste dovrebbero differenziarsi solo in base a delle opzioni. Tipi di richieste diverse dovrebbero essere gestite da activity diverse; per esempio, l'activity "ScattaFoto" dovrebbe avere in input sempre e solo i parametri necessari per scattare una foto, mentre eventuali opzioni per aprire la galleria delle foto scattate dovrebbe aspettarsele un'activity "Galleria".

Se le opzioni che vuoi passare all'activity sono variabili (pur facendo riferimento alla stessa azione) hai varie alternative, a titolo esemplificativo e non esaustivo riporto le seguenti:
1) passare un extra fisso che descrive il tipo di opzioni presenti;
2) passare un oggetto di una determinata classe che possiede tutte le opzioni con i valori di default, sovrascrivendo solo quelle che vuoi personalizzare.
3) passare un oggetto di classe variabile, ed utilizzare l'istruzione instanceof per determinare a quale classe appartiene.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2015, 13:40   #7
abbobba
Member
 
L'Avatar di abbobba
 
Iscritto dal: Oct 2010
Messaggi: 78
grazie mille
__________________
Trattative concluse con: oldfield, fabioBS
abbobba è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La prima missione orbitale del razzo spa...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:00.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v