Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
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


WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
Nutanix accelera la migrazione da VMware...
Nutanix apre ai neocloud: piattaforma mu...
Nutanix amplia la piattaforma cloud e st...
Le fotografie dell'eclissi solare e dell...
Oracle AI Database si potenzia con nuove...
Russia offline: blackout internet mobile...
Gemini, Google investe 30 milioni per la...
Roborock Qrevo Edge S5A: 17.000 Pa, acqu...
Resa pubblica la foto della ''Terra che ...
Il robot che ha piegato 200 scatole di f...
SteelSeries Aerox 3 Wireless Gen 2: nuov...
"Quasi sociopatico": Sam Altma...
Star Wars Eclipse in difficoltà: ...
Gestione del team e romance organiche: l...
Intel lancia Core Ultra X9 378H: hardwar...
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: 22:12.


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