Program Android pentru a comuta între moduri. Comutarea între aplicații în Android. Utilizați adb pentru a face backup pe computerul dvs

Fila Lansator, care se deschide din ecranul de pornire, conține pictograme pentru toate aplicațiile instalate pe telefon, inclusiv aplicațiile descărcate și instalate de pe Android Market sau alte surse.

Când deschideți o aplicație, alte aplicații pe care le utilizați nu se opresc; ele continuă să ruleze, să redă muzică, să afișeze pagini web și multe altele. Puteți comuta rapid între aplicații pentru a funcționa cu mai multe aplicații simultan. sala de operatie sistem Android iar aplicațiile care rulează pe el comunică astfel încât aplicațiile neutilizate să nu consume resurse. Aplicațiile sunt oprite și repornite atunci când este necesar. Prin urmare, nu există niciun motiv pentru a opri aplicațiile decât dacă sunteți sigur că aplicația descărcată nu funcționează corect. Pentru detalii despre modul în care aplicațiile utilizează memoria și despre cum să gestionați aceste aplicații, consultați .

Aflați despre găsirea și instalarea de aplicații suplimentare pentru telefonul dvs. (inclusiv instrumente de performanță, utilitati, jocuri, materiale de referință și alte tipuri software) vezi sectiunea.

Deschiderea și închiderea Launchpad

Dacă aveți mai multe aplicații deschise decât pot încăpea pe lansator, puteți derula lansatorul în sus sau în jos pentru a vedea toate aplicațiile.

Puteți adăuga o pictogramă de aplicație pe ecranul de pornire apăsând și menținând apăsată pictograma de pe Lansatorul până când vibrează, apoi trăgând pictograma în locația dorită de pe ecranul de pornire.

Launchpad se închide automat când atingeți o pictogramă pentru a deschide o aplicație sau mutați o pictogramă din Launchpad pe ecranul de pornire.

Deschiderea unei aplicații

  • Faceți clic pe pictograma aplicației din panoul Lansator.
  • Atingeți pictograma aplicației de pe ecranul de start.

Comutați la o aplicație utilizată recent

Se va deschide o fereastră mică care conține pictogramele tuturor aplicațiilor utilizate recent.

  • Atingeți o pictogramă pentru a deschide aplicația asociată acesteia.

Sau faceți clic pe butonul Înapoi pentru a reveni la aplicația curentă.

Creez o aplicație care trebuie să poată comuta între aplicațiile pe care utilizatorul le are deschise (de exemplu, aplicații din meniul multitasking), am ComponentName a 10 aplicații noi și le pot porni (adică, comuta la ele). ) ca aceasta:

Intenție = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(info); startActivity(intentie);

Cu toate acestea, când încerc să schimb pe Facebook (și probabil unele aplicații similare), îmi cere o permisiune specifică:

java.lang.SecurityException: Respingerea permisiunii: intenția de pornire ( flg=0x10000000 cmp=com.facebook.katana/.activity.FbFragmentChromeActivity ) din ProcessRecord(42310bc0 8578:com.javanut13.multitaskheads=u951000/u9510000/u9570000000000000) ) cere com.facebook.permission.prod.FB_APP_COMMUNICATION

Există o modalitate de a evita acest lucru prin trecerea efectivă la aplicație în loc să o porniți? Pot să trimit focalizarea către o altă aplicație?

0

1 raspunsuri

Dacă nu aveți permisiunea, cred că puteți începe activitatea unei alte aplicații numai atunci când atributul „export” este setat la adevărat. O aplicație asemănătoare Facebook ar putea seta acest lucru la fals și nu permite accesul celeilalte aplicații la activitatea sa.

Nu l-am testat singur, dar puteți încerca următoarele coduri:

Intent extApp= getPackageManager().getLaunchIntentForPackage(facebook-package-name); this.startActivity(extApp);

Sper că acest lucru vă ajută.

O aplicație nu constă întotdeauna dintr-un singur ecran. De exemplu, am creat foarte program util iar utilizatorul dorește să știe cine este autorul său. Face clic pe butonul „Despre” și este dus la ecran nou, unde există informații utile despre versiunea programului, autor, adresa site-ului web, câte pisici are autorul etc. Gândiți-vă la ecranul de activitate ca la o pagină web cu un link către o altă pagină. Dacă te uiți la codul din fișier MainActivity.java din lecțiile anterioare, veți vedea că clasa noastră Activitate principala se aplică și la Activitate(sau moștenitorii săi) sau, mai precis, moștenit de la el.

Clasa publică MainActivity extinde AppCompatActivity

După cum ați putea ghici, ar trebui să creăm o nouă clasă care ar putea fi similară cu Activitate principalași apoi cumva comutați la el când se apasă butonul.

Pentru experiment, vom lua programul din prima lecție și vom folosi un buton pentru experimente (sau pentru a crea proiect nou cu un singur buton pe ecran). Apoi, să creăm un formular nou pentru a afișa informații utile. De exemplu, să arătăm utilizatorului ce face o pisică când merge în stânga și în dreapta. De acord, aceasta este o informație foarte importantă care oferă cheia dezvăluirii Universului.

Vom crea o activitate nouă manual, deși studioul are șabloane gata făcute. Dar nu este nimic complicat acolo și pentru o mai bună înțelegere este util să faci totul manual.

Să creăm un nou fișier de marcare XML activity_about.xmlîn dosar res/aspect. Faceți clic dreapta pe folder aspectși selectați din meniul contextual Nou | Fișier cu resurse de aspect. Va apărea o casetă de dialog. În primul câmp, introduceți numele fișierului activitate_despre. În al doilea, trebuie să introduceți elementul rădăcină. Implicit este acolo ConstraintLayout. Ștergeți textul și introduceți ScrollView. Introducerea câtorva caractere este suficientă pentru ca studioul să sugereze opțiuni gata făcute; puteți apăsa imediat Enter fără a aștepta introducerea întregului cuvânt:

Veți obține un spațiu liber corespunzător în care vom introduce elementul TextView.

Informațiile vor fi preluate din resurse, și anume resursa șir despre_text. Acum este evidențiat cu roșu, semnalând absența informațiilor. S-a putut apăsa Alt+Enterși introduceți text în caseta de dialog. Dar, pentru exemplul nostru, această metodă nu va funcționa, deoarece textul nostru va fi pe mai multe linii, folosind caractere de control. Deci hai să o facem altfel. Să deschidem fișierul res/values/strings.xmlși introduceți manual următorul text:

Există un stejar verde lângă Lukomorye;\n Un lanț de aur pe acel stejar:\n Atât ziua, cât și noaptea pisica de stiinta\nTotul se învârte într-un lanț;\nSe duce dreapta- începe cântecul,\n Stânga- spune un basm.

Am folosit cele mai simple etichete de formatare a textului HTML, cum ar fi , , . Pentru exemplul nostru, este suficient să evidențiem cu aldine cuvintele care se referă la pisică și direcția de mișcare. Pentru a muta textul pe o linie nouă, utilizați simboluri \n. Să adăugăm o altă resursă șir pentru titlul noului ecran:

Despre program

Ne-am dat seama de marcajele. Apoi, trebuie să creați o clasă pentru fereastră DespreActivity.java. Selectați din meniu Fișier | Nou | Clasa Javași completați câmpurile obligatorii. La început, este suficient să indicați doar numele. Apoi te vei ocupa de alte domenii.

Să luăm golul.

Acum clasa este aproape goală. Să adăugăm manual codul. Clasa trebuie să moștenească dintr-o clasă abstractă Activitate sau rudele lui ca FragmentActivity, AppCompatActivity etc. Să adăugăm extinde Activitatea. Clasa de activitate trebuie să aibă o metodă onCreate(). Plasați cursorul mouse-ului în interiorul clasei și selectați din meniu Cod | Metode de anulare(Ctrl+O). În caseta de dialog căutăm clasa necesară; puteți introduce primele caractere pe tastatură pentru o căutare rapidă. În metoda creată trebuie să apelați metoda setContentView(), care va încărca pe ecran marcajul pregătit. Vom avea această opțiune.

Pachetul ru.alexanderklimov.helloworld; import android.app.Activity; import android.os.Bundle; /** * Creat de Alexander Klimov la 12.01.2014. */ clasă publică AboutActivity extinde Activitatea ( @Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); ) )

Acum vine partea cea mai importantă. Sarcina noastră este să mergem la un nou ecran atunci când facem clic pe un buton de pe primul ecran. Să ne întoarcem la clasă Activitate principala. Să scriem un handler de clic pe buton:

Public void onClick (Vizualizare vizualizare) ( Intenție de intenție = intenție nouă (MainActivity.this, AboutActivity.class); startActivity(intent); )

Aici am folosit metoda de procesare a clicurilor pe buton descrisă în lecție.

Pentru a lansa un nou ecran, trebuie să creați o instanță a clasei Intențieși indicați clasa curentă în primul parametru și clasa la care să mergeți în al doilea, avem aceasta DespreActivitate. După aceasta, metoda este numită startActivity(), care lansează un nou ecran.

Dacă acum încercați să testați aplicația în emulator, veți primi un mesaj de eroare. Ce am greșit? Am ratat un pas important. Trebuie să înregistrați unul nou Activitateîn manifest AndroidManifest.xml. Găsiți acest fișier în proiectul dvs. și faceți dublu clic pe el. Se va deschide fereastra de editare a fișierului. Adăugați o nouă etichetă după eticheta de închidere pentru prima activitate. Tastați pe cont propriu și utilizați în mod activ solicitările. Veți obține următoarele:

Aici este utilă resursa șir despre_titlu. Lansăm aplicația, facem clic pe buton și obținem o fereastră Despre program. Astfel, am învățat cum să creăm o fereastră nouă și să o apelăm făcând clic pe un buton. Și avem la dispoziție un program mega-convenient - acum vom avea mereu la îndemână un indiciu despre ce face pisica când merge la stânga.

Încă o dată, rețineți că a doua clasă de activitate creată trebuie să moștenească din clasă Activitate sau altele similare ( ListActivity etc.), să aibă un fișier de markup XML (dacă este necesar) și să fie specificat în manifest.

După apelarea metodei startActivity() va fi lansată o nouă activitate (în acest caz DespreActivitate), va deveni vizibil și se va muta în partea de sus a stivei care conține componentele care rulează. La apelarea unei metode finalizarea() dintr-o activitate nouă (sau atunci când tasta de revenire hardware este apăsată) va fi închis și scos din stivă. Dezvoltatorul poate naviga și la activitatea anterioară (sau la orice altă activitate) folosind aceeași metodă startActivity().

Crearea unui al treilea ecran - o metodă pentru leneși

Programatorii, ca și pisicile, sunt creaturi leneșe. Amintiți-vă întotdeauna că pentru o activitate trebuie să creați un marcaj și o clasă de la care moștenește Activitate, și apoi nu uitați să înregistrați clasa în manifest - ei bine.

În acest caz, selectați din meniu Fișier | Nou | Activitate | Activitate de bază(sau alt șablon). În continuare, va apărea fereastra familiară pentru crearea unei noi activități. Completați câmpurile obligatorii.

Faceți clic pe butonul finalizarea iar activitatea va fi gata. Pentru a verifica acest lucru, deschideți fișierul manifest și verificați dacă există o nouă intrare. Nici măcar nu vorbesc despre fișierele de clasă și de marcare, acestea vor apărea singure în fața ta.

Adăugați un buton nou pe ecranul principal de activitate și scrieți codul pentru a comuta la activitatea creată.

La început, v-aș sfătui să creați manual toate componentele necesare pentru noua activitate, astfel încât să înțelegeți relația dintre clasă, markup și manifest. Și când înțelegi, poți folosi Expertul de creare a activității pentru a-ți accelera munca.

Transmiterea datelor între activități

Am folosit un exemplu simplu pentru a apela un alt ecran de activitate. Uneori nu trebuie doar să apelați un nou ecran, ci și să transferați date pe acesta. De exemplu, numele de utilizator. În acest caz, trebuie să utilizați o zonă specială extraData, pe care o are clasa Intenție.

Regiune extraData este o listă de perechi valoare cheie, care se transmite odata cu intentia. Șirurile sunt folosite ca chei și orice tipuri de date primitive, matrice de primitive, obiecte de clasă pot fi folosite pentru valori Pachet si etc.

Pentru a transfera date către o altă activitate, utilizați metoda puneExtra():

Intent.putExtra ("Cheie", "Valoare");

Activitatea de recepție trebuie să apeleze la o metodă adecvată: getIntExtra(), getStringExtra() etc.:

Int count = getIntent().getIntExtra("nume", 0);

Să refacem exemplul anterior. Avem deja trei activități. Prima activitate va avea două câmpuri de text și un buton. Aspect ar putea fi după cum urmează:

La a doua activitate A doua activitate setați elementul TextView, în care vom afișa textul primit de la prima activitate. Să scriem următorul cod pentru metodă onCreate() la a doua activitate.

@Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); String user = „Animal”; String gift = „goașă”; TextView infoTextView = (TextView)findViewBy(R) .id.textViewInfo); infoTextView.setText(utilizator + " , vi s-a oferit " + cadou); )

Dacă acum rulăm programul și pur și simplu deschidem a doua fereastră, așa cum a fost descris în prima parte a articolului, atunci vom vedea inscripția implicită Animal, ți-au dat o gaură pentru gogoși. De acord, este destul de enervant să primești astfel de mesaje.

Să corectăm situația. Adăugați codul la prima activitate:

Public void onClick (Vizualizare vizualizare) ( EditText userEditText = (EditText) findViewById(R.id.editTextUser); EditText giftEditText = (EditText) findViewById(R.id.editTextGift); Intent = new Intent(s, MainActivity.this). class); // în cheia numelui de utilizator împingem textul din primul câmp de text intent.putExtra("nume utilizator", userEditText.getText().toString()); // în cheia cadou împingem textul din al doilea câmp text intent.putExtra(„cadou”, giftEditText.getText().toString()); startActivity(intent); )

Am așezat obiectul într-un recipient special Intenție două chei cu valori care sunt preluate din câmpurile de text. Când utilizatorul introduce date în câmpurile de text, acestea vor intra în acest container și vor fi trecute la a doua activitate.

A doua activitate ar trebui să fie pregătită pentru a primi mesaje cu căldură, după cum urmează (în aldine).

// Valori implicite ​​String user = "Animal"; String gift = „găuri pentru gogoși”; utilizator = getIntent().getExtras().getString(„nume utilizator”); cadou = getIntent().getExtras().getString("cadou"); TextView infoTextView = (TextView)findViewById(R.id.textViewInfo); infoTextView.setText(user + " , vi s-a oferit " + cadou);

Acum mesajul pare mai puțin ofensator și chiar plăcut pentru unii. În exemplele complexe, este recomandabil să adăugați o verificare la prelucrarea datelor. Pot exista situații în care lansați o a doua activitate cu date goale de tip nul, ceea ce poate cauza blocarea aplicației.

În cazul nostru, știm că ne așteptăm la o valoare șir, așa că codul poate fi rescris astfel:

Intenție de intenție = getIntent(); utilizator = intent.getStringExtra ("nume utilizator");

Utilizator = getIntent().getStringExtra("nume utilizator");

Programul are un dezavantaj - nu este clar de la cine primim salutări. Orice maimuță bine crescută nu va accepta un cadou dintr-o sursă anonimă. Deci, ca teme, adăugați un alt câmp de text pentru a introduce numele utilizatorului care trimite mesajul.

Google recomandă utilizarea următorului format pentru chei: numele pachetului dvs. ca prefix, urmat de cheia însăși. În acest caz, puteți fi sigur de unicitatea cheii atunci când interacționați cu alte aplicații. Ceva de genul:

Public final static String USER = "ru.alexanderklimov.myapp.USER";

Cine a înrămat pisica Vaska - obținem rezultatul înapoi

Nu este întotdeauna suficient să transmiteți pur și simplu date unei alte activități. Uneori, atunci când este închisă, trebuie să obțineți informații din altă activitate. Dacă mai devreme am folosit metoda startActivity (intenție de intenție), atunci există o metodă înrudită startActivityForResult(intenție de intenție, int RequestCode). Diferența dintre metode este parametru suplimentar RequestCode. Practic, este doar un număr întreg pe care îl poți găsi singur. Este necesar pentru a distinge de la cine a venit rezultatul. Să presupunem că aveți cinci ecrane suplimentare și le atribuiți valori de la 1 la 5, iar folosind acest cod puteți determina al cui rezultat trebuie să procesați. Puteți utiliza valoarea -1, atunci va fi la fel cu apelarea metodei startActivity(), adică nu vom obține niciun rezultat.

Dacă utilizați metoda startActivityForResult(), atunci trebuie să înlocuiți metoda din codul dvs. pentru a primi rezultatul onActivityResult()și procesează rezultatul. Confuz? Să ne uităm la un exemplu.

Să presupunem că ești detectiv. S-au primit informații că două bucăți de cârnați și alte produse au fost furate de pe masa unei persoane influente dintr-un restaurant. Suspiciunea a căzut asupra a trei suspecți - o cioară, un nenorocit de câine și pisica Vaska.

Unul dintre vizitatori a oferit o serie de fotografii de pe iPhone-ul său de prezentare:


Există și mărturie de la un alt martor: Iar Vaska ascultă și mănâncă.

Creați un nou proiect Sherlock cu două activități. Pe primul ecran va exista un buton pentru a trece la al doilea ecran și o etichetă text în care va fi afișat numele hoțului.


Top