Programma Android per cambiare modalità. Passaggio da un'applicazione all'altra in Android. Usa adb per eseguire il backup del software sul tuo computer

La scheda Avvio applicazioni, che si apre dalla schermata Home, contiene le icone per tutte le applicazioni installate sul telefono, comprese le applicazioni scaricate e installate da negozio Android o altre fonti.

Quando apri un'app, le altre app che stai utilizzando non si fermano: continuano a funzionare, a riprodurre musica, a visualizzare pagine Web e altro ancora. Puoi passare rapidamente da un'app all'altra per lavorare con più app contemporaneamente. sala operatoria Sistema Android e le applicazioni in esecuzione su di esso comunicano in modo che le applicazioni inutilizzate non consumino risorse. Le applicazioni vengono interrotte e riavviate quando necessario. Pertanto, non c'è motivo di interrompere le applicazioni a meno che non si sia sicuri che l'applicazione scaricata non funzioni correttamente. Per dettagli su come le applicazioni utilizzano la memoria e su come gestire tali applicazioni, vedere .

Scopri come trovare e installare app aggiuntive per il tuo telefono (inclusi strumenti per le prestazioni, utilità, giochi, materiali di riferimento e altri tipi Software) vedere nella sezione.

Apertura e chiusura del Launchpad

Se hai più app aperte di quelle che possono essere inserite nel launcher, puoi scorrere il launcher verso l'alto o verso il basso per vedere tutte le app.

Puoi aggiungere l'icona di un'app alla schermata Home tenendo premuta l'icona sul Launcher finché non vibra, quindi trascinando l'icona nella posizione desiderata sulla schermata Home.

Il Launchpad si chiude automaticamente quando tocchi un'icona per aprire un'app o sposti un'icona dal Launchpad alla schermata Home.

Apertura di un'applicazione

  • Fare clic sull'icona dell'applicazione nel pannello Launcher.
  • Tocca l'icona dell'app nella schermata principale.

Passa a un'app utilizzata di recente

Si aprirà una piccola finestra contenente le icone di tutte le applicazioni utilizzate di recente.

  • Tocca un'icona per aprire l'applicazione associata.

Oppure fare clic sul pulsante Indietro per tornare all'applicazione corrente.

Sto creando un'applicazione che deve essere in grado di passare da un'applicazione all'altra aperta dall'utente (ad esempio, le applicazioni nel menu multitasking), ho il ComponentName di 10 nuove applicazioni e posso avviarle (ovvero, passare ad esse ) come questo:

Intento = nuovo Intento(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(informazioni); startActivity(intento);

Tuttavia, quando provo a modificare su Facebook (e probabilmente su alcune app simili), viene richiesta un'autorizzazione specifica:

java.lang.SecurityException: Negazione autorizzazione: intento iniziale ( flg=0x10000000 cmp=com.facebook.katana/.activity.FbFragmentChromeActivity ) da ProcessRecord(42310bc0 8578:com.javanut13.multitaskheads/u0a10095) (pid=8578, uid=10095 ) richiede com.facebook.permission.prod.FB_APP_COMMUNICATION

Esiste un modo per aggirare questo problema passando effettivamente all'app invece di avviarla? Posso semplicemente inviare il focus a un'applicazione diversa?

0

1 risposta

Se non disponi dell'autorizzazione, penso che puoi avviare l'attività di un'altra applicazione solo quando il suo attributo "export" è impostato su true. Un'applicazione simile a Facebook potrebbe impostarlo su false e non consentire all'altra applicazione di accedere alla propria attività.

Non l'ho testato da solo, ma puoi provare i seguenti codici:

Intento extApp= getPackageManager().getLaunchIntentForPackage(nome-pacchetto-facebook); this.startActivity(extApp);

Spero che questo ti aiuti.

Un'applicazione non è sempre composta da una schermata. Ad esempio, abbiamo creato molto programma utile e l'utente vuole sapere chi è il suo autore. Fa clic sul pulsante "Informazioni" e viene indirizzato a nuovo schermo, dove sono presenti informazioni utili sulla versione del programma, sull'autore, sull'indirizzo del sito web, su quanti gatti possiede l'autore, ecc. Pensa alla schermata dell'attività come a una pagina Web con un collegamento a un'altra pagina. Se guardi il codice nel file MainActivity.java dalle lezioni precedenti, vedrai che la nostra classe Attività principale vale anche per Attività(o dei suoi eredi) o, più precisamente, ereditato da lui.

La classe pubblica MainActivity estende AppCompatActivity

Come puoi immaginare, dovremmo creare una nuova classe che potrebbe essere simile a Attività principale e poi in qualche modo passare ad esso quando si preme il pulsante.

Per l'esperimento, prenderemo il programma della prima lezione e utilizzeremo un pulsante per gli esperimenti (o crea nuovo progetto con un pulsante sullo schermo). Successivamente, creiamo un nuovo modulo per visualizzare informazioni utili. Ad esempio, mostriamo all'utente cosa fa un gatto quando va a destra e a sinistra. D'accordo, questa è un'informazione molto importante che fornisce la chiave per svelare l'Universo.

Creeremo manualmente una nuova attività, sebbene lo studio disponga di modelli già pronti. Ma qui non c'è niente di complicato e per capire meglio è utile fare tutto a mano.

Creiamo un nuovo file di markup XML attività_about.xml nella cartella risoluzione/disposizione. Fare clic con il tasto destro sulla cartella disposizione e seleziona da menù contestuale Nuovo | File di risorse di layout. Apparirà una finestra di dialogo. Nel primo campo, inserisci il nome del file attività_su. Nel secondo, devi inserire l'elemento root. Per impostazione predefinita è lì VincoloLayout. Cancella il testo ed entra ScrollView. Basta inserire pochi caratteri affinché lo studio ti suggerisca opzioni già pronte; puoi subito premere Invio senza attendere l'inserimento della parola completa:

Otterrai uno spazio vuoto corrispondente in cui inseriremo l'elemento TextView.

Le informazioni verranno recuperate dalle risorse, ovvero dalla risorsa stringa about_text. Ora è evidenziato in rosso, segnalando l'assenza di informazioni. Era possibile premere Alt+Invio e inserisci il testo nella finestra di dialogo. Ma per il nostro esempio, questo metodo non funzionerà, poiché il nostro testo sarà su più righe e utilizzerà caratteri di controllo. Quindi facciamolo diversamente. Apriamo il file res/valori/stringhe.xml e inserisci manualmente il seguente testo:

C'è una quercia verde vicino al Lukomorye;\n Una catena d'oro su quella quercia:\n Sia di giorno che di notte gatto scienziato\nTutto gira e rigira in una catena;\nVa Giusto- inizia la canzone,\n Sinistra- racconta una fiaba.

Abbiamo utilizzato i tag di formattazione del testo HTML più semplici come , , . Per il nostro esempio è sufficiente evidenziare in grassetto le parole che si riferiscono al gatto e alla direzione del movimento. Per spostare il testo su una nuova riga, utilizzare i simboli \N. Aggiungiamo un'altra risorsa stringa per il titolo della nuova schermata:

Informazioni sul programma

Abbiamo scoperto i segni. Successivamente è necessario creare una classe per la finestra AboutActivity.java. Seleziona dal menu File | Nuovo | Classe Java e compila i campi richiesti. All'inizio è sufficiente indicare solo il nome. Poi ti occuperai di altri campi.

Prendiamo lo spazio vuoto.

Adesso la classe è quasi vuota. Aggiungiamo il codice manualmente. La classe deve ereditare da una classe astratta Attività o come i suoi parenti FragmentActivity, AppCompatActivity eccetera. Aggiungiamo estende l'attività. La classe di attività deve avere un metodo suCrea(). Posiziona il cursore del mouse all'interno della classe e seleziona dal menu Codice | Metodi di sostituzione(Ctrl+O). Nella finestra di dialogo cerchiamo la classe richiesta; potete digitare i primi caratteri sulla tastiera per una ricerca veloce. Nel metodo creato è necessario chiamare il metodo setContentView(), che caricherà il markup preparato sullo schermo. Avremo questa opzione.

Pacchetto ru.alexanderklimov.helloworld; importa android.app.Attività; importa android.os.Bundle; /** * Creato da Alexander Klimov il 12/01/2014. */ la classe pubblica AboutActivity estende l'attività ( @Override protected void onCreate(Bundle saveInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); ) )

Ora arriva la parte più importante. Il nostro compito è passare a una nuova schermata quando facciamo clic su un pulsante nella prima schermata. Torniamo in classe Attività principale. Scriviamo un gestore di clic sul pulsante:

Public void onClick(View view) ( Intent intent = new Intent(MainActivity.this, AboutActivity.class); startActivity(intent); )

Qui ho utilizzato il metodo di elaborazione del clic del pulsante descritto nella lezione.

Per avviare una nuova schermata è necessario creare un'istanza della classe Intento e indichiamo la classe corrente nel primo parametro, e la classe a cui andare nel secondo, abbiamo questo Informazioni sull'attività. Successivamente viene chiamato il metodo startActivity(), che avvia una nuova schermata.

Se ora provi a testare l'applicazione nell'emulatore, riceverai un messaggio di errore. Cosa abbiamo fatto di sbagliato? Abbiamo mancato un passaggio importante. È necessario registrarne uno nuovo Attività nel manifesto AndroidManifest.xml. Trova questo file nel tuo progetto e fai doppio clic su di esso. Si aprirà la finestra di modifica del file. Aggiungi una nuova etichetta dopo il tag di chiusura per la prima attività Digita da solo e utilizza attivamente le istruzioni. Otterrai quanto segue:

È qui che la risorsa stringa torna utile about_title. Lanciamo l'applicazione, facciamo clic sul pulsante e otteniamo una finestra Informazioni sul programma. Pertanto, abbiamo imparato come creare una nuova finestra e richiamarla facendo clic su un pulsante. E abbiamo a nostra disposizione un programma estremamente conveniente: ora avremo sempre un suggerimento su cosa fa il gatto quando va a sinistra.

Ancora una volta, tieni presente che la seconda classe di attività creata deve ereditare dalla classe Attività o simili ( Elenco attività ecc.), avere un file di markup XML (se richiesto) ed essere specificato nel manifest.

Dopo aver chiamato il metodo startActivity() verrà lanciata una nuova attività (in questo caso Informazioni sull'attività), diventerà visibile e si sposterà in cima allo stack contenente i componenti in esecuzione. Quando si chiama un metodo fine() da una nuova attività (o quando viene premuto il tasto hardware Invio) verrà chiuso e rimosso dallo stack. Lo sviluppatore può anche passare all'attività precedente (o a qualsiasi altra) utilizzando lo stesso metodo startActivity().

Creare un terzo schermo: un metodo per i pigri

I programmatori, come i gatti, sono creature pigre. Ricorda sempre che per un'attività è necessario creare un markup e una classe da cui eredita Attività, e poi non dimenticare di registrare la classe nel manifest - vabbè.

In questo caso, seleziona dal menu File | Nuovo | Attività | Attività di base(o altro modello). Successivamente, verrà visualizzata la finestra familiare per la creazione di una nuova attività. Compila i campi richiesti.

Fare clic sul pulsante Fine e l'attività sarà pronta. Per verificarlo, apri il file manifest e controlla la presenza di una nuova voce. Non sto nemmeno parlando di file di classe e di markup, appariranno davanti a te da soli.

Aggiungi tu stesso un nuovo pulsante alla schermata dell'attività principale e scrivi il codice per passare all'attività creata.

Inizialmente ti consiglierei di creare manualmente tutti i componenti necessari per la nuova attività in modo da comprendere la relazione tra classe, markup e manifest. E quando ne avrai preso dimestichezza, potrai utilizzare la Creazione guidata attività per velocizzare il tuo lavoro.

Passaggio di dati tra attività

Abbiamo utilizzato un semplice esempio per richiamare un'altra schermata di attività. A volte non è solo necessario richiamare una nuova schermata, ma anche trasferire i dati su di essa. Ad esempio, nome utente. In questo caso, è necessario utilizzare un'area speciale extraData, di cui dispone la classe Intento.

Regione extraDataè un elenco di coppie chiave/valore, che viene trasmesso insieme all'intenzione. Le stringhe vengono utilizzate come chiavi e qualsiasi tipo di dati primitivo, array di primitivi e oggetti di classe possono essere utilizzati per i valori Fascio e così via.

Per trasferire i dati a un'altra attività, utilizzare il metodo putExtra():

Intent.putExtra("Chiave", "Valore");

L'attività di ricezione deve richiamare un metodo appropriato: getIntExtra(), getStringExtra() eccetera.:

Conteggio int = getIntent().getIntExtra("nome", 0);

Rifacciamo l'esempio precedente. Abbiamo già tre attività. La prima attività avrà due campi di testo e un pulsante. Aspetto potrebbe essere il seguente:

Alla seconda attività Seconda attività impostare l'elemento TextView, in cui visualizzeremo il testo ricevuto dalla prima attività. Scriviamo il seguente codice per il metodo suCrea() alla seconda attività.

@Override protected void onCreate(Bundle saveInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); String user = "Animal"; String gift = "buco della ciambella"; TextView infoTextView = (TextView)findViewById( R .id.textViewInfo); infoTextView.setText(utente + " , ti è stato dato " + regalo); )

Se ora eseguiamo il programma e richiamiamo semplicemente la seconda finestra, come descritto nella prima parte dell'articolo, vedremo la scritta predefinita Animale, ti hanno dato un buco di ciambella. D'accordo, è piuttosto fastidioso ricevere tali messaggi.

Correggiamo la situazione. Aggiungi il codice alla prima attività:

Public void onClick(View view) ( EditText userEditText = (EditText) findViewById(R.id.editTextUser); EditText giftEditText = (EditText) findViewById(R.id.editTextGift); Intent intent = new Intent(MainActivity.this, SecondActivity. class); // nella chiave nome utente inseriamo il testo dal primo campo di testo intent.putExtra("username", userEditText.getText().toString()); // nella chiave regalo inseriamo il testo dal secondo campo di testo intent.putExtra("gift ", giftEditText.getText().toString()); startActivity(intent); )

Abbiamo posizionato l'oggetto in un contenitore speciale Intento due chiavi con valori presi dai campi di testo. Quando l'utente inserisce i dati nei campi di testo, andranno in questo contenitore e verranno passati alla seconda attività.

La seconda attività dovrebbe essere pronta a ricevere calorosamente i messaggi come segue (in grassetto).

// Valori predefiniti String utente = "Animale"; Regalo di stringa = "buco della ciambella"; utente = getIntent().getExtras().getString("nomeutente"); regalo = getIntent().getExtras().getString("regalo"); TextView infoTextView = (TextView)findViewById(R.id.textViewInfo); infoTextView.setText(utente + " , ti è stato dato " + regalo);

Ora il messaggio sembra meno offensivo e persino piacevole per alcuni. Negli esempi complessi è consigliabile aggiungere un segno di spunta durante l'elaborazione dei dati. Potrebbero verificarsi situazioni in cui si avvia una seconda attività con dati di tipo vuoto nullo, che potrebbe causare l'arresto anomalo dell'applicazione.

Nel nostro caso, sappiamo che ci aspettiamo un valore stringa, quindi il codice può essere riscritto in questo modo:

Intento intento = getIntent(); utente = intent.getStringExtra("nome utente");

Utente = getIntent().getStringExtra("nome utente");

Il programma ha uno svantaggio: non è chiaro da chi riceviamo i saluti. Qualsiasi scimmia ben educata non accetterà un regalo da una fonte anonima. Quindi, come compito, aggiungi un altro campo di testo per inserire il nome dell'utente che sta inviando il messaggio.

Google consiglia di utilizzare il seguente formato per le chiavi: il nome del pacchetto come prefisso, seguito dalla chiave stessa. In questo caso, puoi essere sicuro dell'unicità della chiave quando interagisci con altre applicazioni. Qualcosa come questo:

Stringa statica finale pubblica USER = "ru.alexanderklimov.myapp.USER";

Chi ha incastrato il gatto Vaska: otteniamo il risultato

Non sempre è sufficiente passare semplicemente i dati a un'altra attività. A volte è necessario recuperare informazioni da un'altra attività quando è chiusa. Se prima usavamo il metodo startActivity(Intento intento), allora esiste un metodo correlato startActivityForResult(Intent intent, int RequestCode). La differenza tra i metodi è parametro aggiuntivo Codice richiesto. Fondamentalmente è solo un numero intero che puoi trovare da solo. È necessario per distinguere da chi è arrivato il risultato. Supponiamo che tu abbia cinque schermate aggiuntive e assegni loro valori da 1 a 5 e utilizzando questo codice puoi determinare quale risultato devi elaborare. Puoi usare il valore -1, quindi sarà come chiamare il metodo startActivity(), cioè. non otterremo alcun risultato.

Se usi il metodo startActivityForResult(), devi sovrascrivere il metodo nel codice per ricevere il risultato onActivityResult() ed elaborare il risultato. Confuso? Diamo un'occhiata a un esempio.

Diciamo che sei un detective. È arrivata la notizia che due pezzi di salsiccia e altri prodotti sono stati rubati dalla tavola di una persona influente in un ristorante. I sospetti caddero su tre sospettati: un corvo, un fottuto cane e il gatto Vaska.

Uno dei visitatori ha fornito una serie di foto dal suo iPhone in mostra:


C'è anche la testimonianza di un altro testimone: E Vaska ascolta e mangia.

Crea un nuovo progetto Sherlock con due attività Nella prima schermata sarà presente un pulsante per passare alla seconda schermata e un'etichetta di testo in cui verrà visualizzato il nome del ladro.


Superiore