Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator08 [2015/04/27 16:39]
Andrei Roșu-Cojocaru
laboratoare:laborator08 [2015/04/27 23:39] (current)
Andrei Roșu-Cojocaru
Line 72: Line 72:
   * Se identifică **numărul de proiect** care va fi utilizat de dispozitivul mobil pentru a se înregistra la serverul Google Cloud Messaging for Android (''​SENDER_ID''​),​ acesta putând fi preluat din:   * Se identifică **numărul de proiect** care va fi utilizat de dispozitivul mobil pentru a se înregistra la serverul Google Cloud Messaging for Android (''​SENDER_ID''​),​ acesta putând fi preluat din:
     * bara de adrese a aplicației de navigare {{ :​laboratoare:​laborator08:​project_number01.png?​nolink }}     * bara de adrese a aplicației de navigare {{ :​laboratoare:​laborator08:​project_number01.png?​nolink }}
-    * secțiunea //​Overview//​ a consolei Google API {{ :​laboratoare:​laborator08:​project_number02.png?​nolink&​1200 }}+    * secțiunea //​Overview//​ a consolei Google API {{ :​laboratoare:​laborator08:​project_number02.png?​nolink&​1000 }}
   * Se activează API-ul //Cloud Messaging for Android// din secțiunea //Mobile APIs//, ce poate fi accesată din //APIs & auth// → //APIs// a consolei Google API.   * Se activează API-ul //Cloud Messaging for Android// din secțiunea //Mobile APIs//, ce poate fi accesată din //APIs & auth// → //APIs// a consolei Google API.
  
Line 92: Line 92:
 **2.** Se instalează SDK-ul Google Play Services, necesară autentificării / deautentificării la Google Cloud Messaging for Android din cadrul aplicației instalată pe dispozitivul mobil. **2.** Se instalează SDK-ul Google Play Services, necesară autentificării / deautentificării la Google Cloud Messaging for Android din cadrul aplicației instalată pe dispozitivul mobil.
   * În Eclipse Luna, se accesează //Android SDK Manager//   * În Eclipse Luna, se accesează //Android SDK Manager//
-    * din bara de unelte\\ {{ :​laboratoare:​laborator08:​eclipse_toolbar.png?​nolink }}+    * din bara de unelte\\ {{ :​laboratoare:​laborator08:​eclipse_toolbar.png?​nolink&​900 ​}}
     * din meniul principal, //Window// → //Android SDK Manager//     * din meniul principal, //Window// → //Android SDK Manager//
-  * Se selectează următoarele pachete:\\ {{ :​laboratoare:​laborator08:​android_sdk_manager.png?​nolink }}+  * Se selectează următoarele pachete:\\ {{ :​laboratoare:​laborator08:​android_sdk_manager.png?​nolink&​600 ​}}
     * din secțiunea ''​Android 4.1.2 (API 16)'',​ pachetul ''​Google APIs''​     * din secțiunea ''​Android 4.1.2 (API 16)'',​ pachetul ''​Google APIs''​
     * din sețiunea //Extras//, pachetul //Google Play Services//     * din sețiunea //Extras//, pachetul //Google Play Services//
Line 104: Line 104:
  
   * **AVD**   * **AVD**
-    * se creează un dispozitiv virtual pentru care va specifica la secțiunea //Target// valoarea //Google APIs (Google Inc.)//\\ {{ :​laboratoare:​laborator08:​android_virtual_device01.png?​nolink }}+    * se creează un dispozitiv virtual pentru care va specifica la secțiunea //Target// valoarea //Google APIs (Google Inc.)//\\ {{ :​laboratoare:​laborator08:​android_virtual_device01.png?​nolink&​400 ​}}
     * se asociază datele unui cont Google (nume de utilizator, parola) din //​Settings//​ → //​Accounts//,​ selectându-se opțiunea //Add account//\\ {{ :​laboratoare:​laborator08:​android_virtual_device02.png?​nolink }}     * se asociază datele unui cont Google (nume de utilizator, parola) din //​Settings//​ → //​Accounts//,​ selectându-se opțiunea //Add account//\\ {{ :​laboratoare:​laborator08:​android_virtual_device02.png?​nolink }}
   * **Genymotion** - vor trebui instalate manual ''​ARM Transalation''​ și ''​Google Apps for Android''​ întrucât suportul pentru acestea nu mai este asigurat începând cu versiunea 2.0   * **Genymotion** - vor trebui instalate manual ''​ARM Transalation''​ și ''​Google Apps for Android''​ întrucât suportul pentru acestea nu mai este asigurat începând cu versiunea 2.0
-    * în //​Settings//​ → //ADB// → //ADB Connection Settings// se indică locația unde se găsește instalat SDK-ul de Android\\ {{ :​laboratoare:​laborator08:​genymotion_settings.png?​nolink }}+    * în //​Settings//​ → //ADB// → //ADB Connection Settings// se indică locația unde se găsește instalat SDK-ul de Android\\ {{ :​laboratoare:​laborator08:​genymotion_settings.png?​nolink&​400 ​}}
     * se instalează [[http://​pdsd2014.andreirosucojocaru.ro/​Genymotion-ARM-Translation_v1.1.zip|ARM Translation 1.1]] printr-o operație de tip drag-and-drop în ecranul principal al emulatorului     * se instalează [[http://​pdsd2014.andreirosucojocaru.ro/​Genymotion-ARM-Translation_v1.1.zip|ARM Translation 1.1]] printr-o operație de tip drag-and-drop în ecranul principal al emulatorului
       * se afișează o fereastră de dialog ce va conține mesajul ''​File transfer in progress...''​\\ {{ :​laboratoare:​laborator08:​file_transfer_in_progress.png?​nolink }}       * se afișează o fereastră de dialog ce va conține mesajul ''​File transfer in progress...''​\\ {{ :​laboratoare:​laborator08:​file_transfer_in_progress.png?​nolink }}
Line 119: Line 119:
       * [[http://​pdsd2014.andreirosucojocaru.ro/​gapps-jb-20121011-signed.zip|Google Apps for Android 4.1]]       * [[http://​pdsd2014.andreirosucojocaru.ro/​gapps-jb-20121011-signed.zip|Google Apps for Android 4.1]]
     * indiferent de rezultat, se repornește emulatorul prin comanda\\ <​code>​adb -s 192.168.56.101:​5555 reboot</​code>​ (respectiv ''​adb reboot''​)     * indiferent de rezultat, se repornește emulatorul prin comanda\\ <​code>​adb -s 192.168.56.101:​5555 reboot</​code>​ (respectiv ''​adb reboot''​)
-    * se asociază datele unui cont Google (nume de utilizator, parola) din //​Settings//​ → //​Accounts//,​ selectându-se opțiunea //Add account//\\ {{ :​laboratoare:​laborator08:​google_account_setup01.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​google_account_setup02.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​google_account_setup03.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​google_account_setup04.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​google_account_setup05.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​google_account_setup06.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​google_account_setup07.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​google_account_setup08.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​google_account_setup09.png?​nolink }}  +    * se asociază datele unui cont Google (nume de utilizator, parola) din //​Settings//​ → //​Accounts//,​ selectându-se opțiunea //Add account//\\ {{ :​laboratoare:​laborator08:​google_account_setup01.png?​nolink&​400 ​}}\\ {{ :​laboratoare:​laborator08:​google_account_setup02.png?​nolink&​400 ​}}\\ {{ :​laboratoare:​laborator08:​google_account_setup03.png?​nolink&​400 ​}}\\ {{ :​laboratoare:​laborator08:​google_account_setup04.png?​nolink&​400 ​}}\\ {{ :​laboratoare:​laborator08:​google_account_setup05.png?​nolink&​400 ​}}\\ {{ :​laboratoare:​laborator08:​google_account_setup06.png?​nolink&​400 ​}}\\ {{ :​laboratoare:​laborator08:​google_account_setup07.png?​nolink&​400 ​}}\\ {{ :​laboratoare:​laborator08:​google_account_setup08.png?​nolink&​400 ​}}\\ {{ :​laboratoare:​laborator08:​google_account_setup09.png?​nolink&​400 ​}}  
-    * se actualizează //Play Store// prin accesarea opțiunii //​Settings//​ de mai multe ori (procesul de actualizare va fi pornit în fundal, în mod automat)\\ {{ :​laboratoare:​laborator08:​google_account_setup10.png?​nolink }}+    * se actualizează //Play Store// prin accesarea opțiunii //​Settings//​ de mai multe ori (procesul de actualizare va fi pornit în fundal, în mod automat)\\ {{ :​laboratoare:​laborator08:​google_account_setup10.png?​nolink&​400 ​}}
  
 **4.** În situația în care se va folosi un server CCS (XMPP), în prezent, nu mai este necesară o înregistrare suplimentară pentru a se obține acceptul Google de a utiliza serviciul de transmitere a mesajelor de pe dispozitivul mobil. Anterior, o astfel de solicitare trebuia transmisă la [[https://​services.google.com/​fb/​forms/​gcm/​|Upstream Google Cloud Messaging and User Notifications Sign-up]]. **4.** În situația în care se va folosi un server CCS (XMPP), în prezent, nu mai este necesară o înregistrare suplimentară pentru a se obține acceptul Google de a utiliza serviciul de transmitere a mesajelor de pe dispozitivul mobil. Anterior, o astfel de solicitare trebuia transmisă la [[https://​services.google.com/​fb/​forms/​gcm/​|Upstream Google Cloud Messaging and User Notifications Sign-up]].
Line 131: Line 131:
  
 **6**. Se descarcă cea mai recentă versiune stabilă a mediului de dezvoltare Eclipse IDE for Java EE Developers (Windows: [[http://​www.eclipse.org/​downloads/​download.php?​file=/​technology/​epp/​downloads/​release/​luna/​SR2/​eclipse-jee-luna-SR2-win32.zip|32-bit]]|[[http://​www.eclipse.org/​downloads/​download.php?​file=/​technology/​epp/​downloads/​release/​luna/​SR2/​eclipse-jee-luna-SR2-win32-x86_64.zip|64-bit]],​ Linux: [[http://​www.eclipse.org/​downloads/​download.php?​file=/​technology/​epp/​downloads/​release/​luna/​SR2/​eclipse-jee-luna-SR2-linux-gtk.tar.gz|32-bit]]|[[http://​www.eclipse.org/​downloads/​download.php?​file=/​technology/​epp/​downloads/​release/​luna/​SR2/​eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz|64-bit]]) și se integrează cu serverul web Apache Tomcat. **6**. Se descarcă cea mai recentă versiune stabilă a mediului de dezvoltare Eclipse IDE for Java EE Developers (Windows: [[http://​www.eclipse.org/​downloads/​download.php?​file=/​technology/​epp/​downloads/​release/​luna/​SR2/​eclipse-jee-luna-SR2-win32.zip|32-bit]]|[[http://​www.eclipse.org/​downloads/​download.php?​file=/​technology/​epp/​downloads/​release/​luna/​SR2/​eclipse-jee-luna-SR2-win32-x86_64.zip|64-bit]],​ Linux: [[http://​www.eclipse.org/​downloads/​download.php?​file=/​technology/​epp/​downloads/​release/​luna/​SR2/​eclipse-jee-luna-SR2-linux-gtk.tar.gz|32-bit]]|[[http://​www.eclipse.org/​downloads/​download.php?​file=/​technology/​epp/​downloads/​release/​luna/​SR2/​eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz|64-bit]]) și se integrează cu serverul web Apache Tomcat.
-  * //Window// → //​Preferences//​ → //Server// → //Runtime Environments//​ și se accesează butonul //​Add...//​\\ {{ :​laboratoare:​laborator08:​server_configuration01.png?​nolink }} +  * //Window// → //​Preferences//​ → //Server// → //Runtime Environments//​ și se accesează butonul //​Add...//​\\ {{ :​laboratoare:​laborator08:​server_configuration01.png?​nolink&​500 ​}} 
-  * se specifică tipul serverului web (''​Apache Tomcat v8.0''​)\\ {{ :​laboratoare:​laborator08:​server_configuration02.png?​nolink }} +  * se specifică tipul serverului web (''​Apache Tomcat v8.0''​)\\ {{ :​laboratoare:​laborator08:​server_configuration02.png?​nolink&​500 ​}} 
-  * se precizează locația la care se găsește serverul web (directorul în care a fost dezarhivat, fără alte configurări) și versiunea de Java Runtime Environment\\ {{ :​laboratoare:​laborator08:​server_configuration03.png?​nolink }}+  * se precizează locația la care se găsește serverul web (directorul în care a fost dezarhivat, fără alte configurări) și versiunea de Java Runtime Environment\\ {{ :​laboratoare:​laborator08:​server_configuration03.png?​nolink&​500 ​}}
 <note tip>Se oferă și posibilitatea descărcării și instalării unei instanțe a serverului web Apache Tomcat, însă de regulă aceasta nu referă cea mai recentă versiune.</​note>​ <note tip>Se oferă și posibilitatea descărcării și instalării unei instanțe a serverului web Apache Tomcat, însă de regulă aceasta nu referă cea mai recentă versiune.</​note>​
  
-{{ :​laboratoare:​laborator08:​server_configuration04.png?​nolink }}+{{ :​laboratoare:​laborator08:​server_configuration04.png?​nolink&​500 ​}}
  
-  * //Window// → //Show View// → //​Other...//​ → //Servers// → //Server// și se accesează legătura //No servers are available. Click this link to create a new server...// sau click pe butonul drept al mouse-ului în spațiul de lucru //Server// → //New// → //​Server//​\\ {{ :​laboratoare:​laborator08:​server_configuration05.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​server_configuration06.png?​nolink }} +  * //Window// → //Show View// → //​Other...//​ → //Servers// → //Server// și se accesează legătura //No servers are available. Click this link to create a new server...// sau click pe butonul drept al mouse-ului în spațiul de lucru //Server// → //New// → //​Server//​\\ {{ :​laboratoare:​laborator08:​server_configuration05.png?​nolink }}\\ {{ :​laboratoare:​laborator08:​server_configuration06.png?​nolink&​800 ​}} 
-  * se selectează serverul web definit anterior și se accesează butonul //​Finish//​\\ {{ :​laboratoare:​laborator08:​server_configuration07.png?​nolink }} +  * se selectează serverul web definit anterior și se accesează butonul //​Finish//​\\ {{ :​laboratoare:​laborator08:​server_configuration07.png?​nolink&​500 ​}} 
-  * se asociază proiectului un server web pe care va rula: click pe butonul drept al mouse-ului pe denumirea proiectului → //​Properties//​ → //Server// și se selectează serverul web definit anterior\\ {{ :​laboratoare:​laborator08:​server_configuration08.png?​nolink }}+  * se asociază proiectului un server web pe care va rula: click pe butonul drept al mouse-ului pe denumirea proiectului → //​Properties//​ → //Server// și se selectează serverul web definit anterior\\ {{ :​laboratoare:​laborator08:​server_configuration08.png?​nolink&​500 ​}}
   * se realizează o referință către biblioteca serverului web, aceasta fiind trecută în classpath: click pe butonul drept al mouse-ului pe denumirea proiectului → //Build Path// → //Add Library//   * se realizează o referință către biblioteca serverului web, aceasta fiind trecută în classpath: click pe butonul drept al mouse-ului pe denumirea proiectului → //Build Path// → //Add Library//
-    * se alege //Server Runtime//\\ {{ :​laboratoare:​laborator08:​server_configuration09.png?​nolink }} +    * se alege //Server Runtime//\\ {{ :​laboratoare:​laborator08:​server_configuration09.png?​nolink&​500 ​}} 
-    * se indică serverul web definit anterior și se accesează butonul ''​Finish''​\\ {{ :​laboratoare:​laborator08:​server_configuration10.png?​nolink }}+    * se indică serverul web definit anterior și se accesează butonul ''​Finish''​\\ {{ :​laboratoare:​laborator08:​server_configuration10.png?​nolink&​500 ​}}
  
 **7.** Se descarcă și se instalează cea mai recentă versiune stabilă a motorului pentru baze de date MySQL. **7.** Se descarcă și se instalează cea mai recentă versiune stabilă a motorului pentru baze de date MySQL.
Line 174: Line 174:
  
 Se realizează o referință către biblioteca pentru accesarea Google Cloud Messaging care este localizată în ''<​android-sdk>/​extras/​google/​google_play_services/​libproject/​google-play-services_lib''​ Se realizează o referință către biblioteca pentru accesarea Google Cloud Messaging care este localizată în ''<​android-sdk>/​extras/​google/​google_play_services/​libproject/​google-play-services_lib''​
-  * se accesează //File// → //Import// → //Android// → //Existing Android Code Into Workspace//​\\ {{ :​laboratoare:​laborator08:​google_cloud_messaging_library_import01.png?​nolink }} +  * se accesează //File// → //Import// → //Android// → //Existing Android Code Into Workspace//​\\ {{ :​laboratoare:​laborator08:​google_cloud_messaging_library_import01.png?​nolink&​500 ​}} 
-  * se indică locația unde se găsește instalată biblioteca pentru accesarea Google Cloud Messaging, creându-se o copie a acestuia în spațiul de lucru (se bifează opțiunea //Copy projects into workspace//​)\\ {{ :​laboratoare:​laborator08:​google_cloud_messaging_library_import02.png?​nolink }} +  * se indică locația unde se găsește instalată biblioteca pentru accesarea Google Cloud Messaging, creându-se o copie a acestuia în spațiul de lucru (se bifează opțiunea //Copy projects into workspace//​)\\ {{ :​laboratoare:​laborator08:​google_cloud_messaging_library_import02.png?​nolink&​800 ​}} 
-  * în fereastra corespunzătoare proiectului aferent aplicației Android (click dreapta pe denumirea proiectului în //Package Explorer// → //​Properties//​),​ se accesează opțiunea //Android// și se specifică referința către biblioteca respectivă în secțiunea //Library// (accesând butonul //Add//)\\ {{ :​laboratoare:​laborator08:​google_cloud_messaging_library_import03.png?​nolink }}+  * în fereastra corespunzătoare proiectului aferent aplicației Android (click dreapta pe denumirea proiectului în //Package Explorer// → //​Properties//​),​ se accesează opțiunea //Android// și se specifică referința către biblioteca respectivă în secțiunea //Library// (accesând butonul //Add//)\\ {{ :​laboratoare:​laborator08:​google_cloud_messaging_library_import03.png?​nolink&​800 ​}}
  
 ==== Structura Proiectului ==== ==== Structura Proiectului ====
Line 188: Line 188:
   - (opțional) un **serviciu** (''​GoogleCloudMessagingIntentService''​) lansat în execuție în momentul în care este livrat mesajul (de către ascultător) în cadrul căruia acesta este procesat propriu-zis;​ utilizarea unui serviciu este necesară doar în situația în care prelucrarea mesajului se realizează într-un interval de timp mai mare, fiind necesar să se asigure faptul că dispozitivul mobil nu devine inactiv între timp.   - (opțional) un **serviciu** (''​GoogleCloudMessagingIntentService''​) lansat în execuție în momentul în care este livrat mesajul (de către ascultător) în cadrul căruia acesta este procesat propriu-zis;​ utilizarea unui serviciu este necesară doar în situația în care prelucrarea mesajului se realizează într-un interval de timp mai mare, fiind necesar să se asigure faptul că dispozitivul mobil nu devine inactiv între timp.
  
-{{ :​laboratoare:​laborator08:​package_explorer.png?​nolink }}+{{ :​laboratoare:​laborator08:​package_explorer.png?​nolink&​500 ​}}
  
 === Activitatea GoogleCloudMessagingActivity === === Activitatea GoogleCloudMessagingActivity ===
Line 874: Line 874:
  
 <​note>​În cazul în care nu dispuneți de un cont Google, acesta va trebui creat înainte de a implementa aceste cerințe.</​note>​ <​note>​În cazul în care nu dispuneți de un cont Google, acesta va trebui creat înainte de a implementa aceste cerințe.</​note>​
 +
 +<note important>​Aceste valori nu vor fi utilizate decât împreună, altfel se vor genera erori de tipul ''​MismatchSenderId''​.</​note>​
  
 ==== Clientul Android ==== ==== Clientul Android ====
Line 903: Line 905:
 Mai multe detalii pot fi obținute în secțiunea [[:​laboratoare:​laborator08#​configurare_client|Configurare client]] Mai multe detalii pot fi obținute în secțiunea [[:​laboratoare:​laborator08#​configurare_client|Configurare client]]
  
-**6.** În interfața ''​ro.pub.cs.systems.pdsd.lab08.googlecloudmessaging.general.Constants'',​ trebuie modificate următoarele valori:+**6.** În interfața ''​ro.pub.cs.systems.pdsd.lab08.googlecloudmessaging.general.Constants'',​ trebuie modificate următoarele valori, __**numai în situația în care se folosește un server web Apache Tomcat**__:
   * ''​PROJECT_NUMBER''​ - cu numărul de proiect generat de consola Google API;   * ''​PROJECT_NUMBER''​ - cu numărul de proiect generat de consola Google API;
-  * în situația în care se folosește un server de aplicații Apache Tomcat, adresa ​Internet pentru serviciile care expun funcționalități către dispozitivul mobil:+  * adresele ​Internet pentru serviciile care expun funcționalități către dispozitivul mobil:
     * dispozitiv mobil - adresa Internet indicată ca default gateway a rețelei de calculatoare din care fac parte dispozitivul mobil și mașina pe care se găsește serverul de aplicații;     * dispozitiv mobil - adresa Internet indicată ca default gateway a rețelei de calculatoare din care fac parte dispozitivul mobil și mașina pe care se găsește serverul de aplicații;
     * AVD - 10.0.2.1;     * AVD - 10.0.2.1;
Line 1024: Line 1026:
 **15.** Să se instaleze motorul pentru gestiunea bazelor de date MySQL și să se ruleze script-ul ''​googlecloudmessaging.sql''​ din cadrul directorului ''​ServletsJSP''​ care creează o bază de date cu o tabelă în care vor fi stocate informațiile referitoare la identificatorii de înregistrare transmiși de clienții Android. **15.** Să se instaleze motorul pentru gestiunea bazelor de date MySQL și să se ruleze script-ul ''​googlecloudmessaging.sql''​ din cadrul directorului ''​ServletsJSP''​ care creează o bază de date cu o tabelă în care vor fi stocate informațiile referitoare la identificatorii de înregistrare transmiși de clienții Android.
  
-<​code ​sql>+<​code>​
 CREATE DATABASE googlecloudmessaging;​ CREATE DATABASE googlecloudmessaging;​
  
Line 1061: Line 1063:
 **18.** În acest moment, se poate realiza comunicația client Android ↔ server de aplicații prin intermediul serviciului Google Cloud Messaging: **18.** În acest moment, se poate realiza comunicația client Android ↔ server de aplicații prin intermediul serviciului Google Cloud Messaging:
   * clientul Android trimite identificatorul de înregistrare către serverul de aplicații;   * clientul Android trimite identificatorul de înregistrare către serverul de aplicații;
-  * se accesează componenta pentru transmiterea unui mesaj prin intermediul unei notificări în aplicația curentă de navigare (//eng.// browser)\\ {{ :​laboratoare:​message_push.png?​nolink }}+  * se accesează componenta pentru transmiterea unui mesaj prin intermediul unei notificări în aplicația curentă de navigare (//eng.// browser)\\ {{ pdsd:​laboratoare:​laborator08:​message_push.png?​nolink&​800 ​}}
     * PHP: http://​pdsd2015.andreirosucojocaru.ro/​exemple/​laboratoare/​laborator08/​googlecloudmessaging/​message_push.php;​     * PHP: http://​pdsd2015.andreirosucojocaru.ro/​exemple/​laboratoare/​laborator08/​googlecloudmessaging/​message_push.php;​
     * JavaServlets / JSP (local): http://​192.168.56.1:​8080/​GoogleCloudMessagingServer/​MessagePushServlet.     * JavaServlets / JSP (local): http://​192.168.56.1:​8080/​GoogleCloudMessagingServer/​MessagePushServlet.
Line 1074: Line 1076:
 [[http://​developer.android.com/​reference/​com/​google/​android/​gms/​gcm/​GoogleCloudMessaging.html|Google Cloud Messaging API]]\\ ​ [[http://​developer.android.com/​reference/​com/​google/​android/​gms/​gcm/​GoogleCloudMessaging.html|Google Cloud Messaging API]]\\ ​
 [[http://​stackoverflow.com/​questions/​20121883/​how-to-install-google-play-services-in-a-genymotion-vm-with-no-drag-and-drop-su|How to install Google Play Services in a Genymotion VM (with no drag and drop support)?​]]\\ ​ [[http://​stackoverflow.com/​questions/​20121883/​how-to-install-google-play-services-in-a-genymotion-vm-with-no-drag-and-drop-su|How to install Google Play Services in a Genymotion VM (with no drag and drop support)?​]]\\ ​
-[[http://​wiki.cyanogenmod.org/​w/​Google_Apps|Google Apps]]\\  +[[http://​forum.xda-developers.com/​showthread.php?​t=2528952|Installing ARM Translation and GApps]]\\  
-[[http://​forum.xda-developers.com/​showthread.php?​t=2528952|Installing ARM Translation and GApps]]+[[http://​developer.android.com/​guide/​topics/​ui/​notifiers/​notifications.html|Android Notifications]]
laboratoare/laborator08.1430141966.txt.gz · Last modified: 2015/04/27 16:39 by Andrei Roșu-Cojocaru
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0