SlideShare a Scribd company logo
1 of 53
Download to read offline
About PhoneGap
                   Starting with PhoneGap
                      Example application




                Introduction to PhoneGap
            Web development for mobile platforms


      Manuel Rego Casasnovas <rego@igalia.com>



          Master on Free Software / August 2012




Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                          Starting with PhoneGap
                             Example application


Outline

  1   About PhoneGap

  2   Starting with PhoneGap
        Development environment
        First PhoneGap application
        PhoneGap API overview
        Building PhoneGap

  3   Example application
        Example
        Exercise


       Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                       Starting with PhoneGap   About PhoneGap
                          Example application


What is PhoneGap?



    Mobile web development framework
    Based on JavaScript, HTML5 and CSS3
    Open source: Apache 2.0 License
    Supported platforms: iPhone, Android, Windows Phone,
    BlackBerry, Symbian, webOS and Bada (comming soon)
    Homepage:          http://phonegap.com/




    Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                        Starting with PhoneGap   About PhoneGap
                           Example application


History


     Started by Nitobi Software
     People’s Choice Award at O’Reilly Media’s 2009 Web 2.0
     Conference
     Adobe acquired Nitobi on October 2011
     PhoneGap was contributed to the Apache Software
     Foundation
            First it was called Apache Callback
            Renamed to Apache Cordova
            URL: http://incubator.apache.org/cordova/




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                        Starting with PhoneGap   About PhoneGap
                           Example application


Features
     JavaScript API to access different parts of the device:
            Accelerometer
            Camera
            Capture
            Compass
            Connection
            Contacts
            Device
            Events
            File
            Geolocation
            Media
            Notifications (alert, sound, vibration)
            Storage
     Documentation:            http://docs.phonegap.com/

     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                       Starting with PhoneGap   About PhoneGap
                          Example application


Advantages



    Multi-platform
    Well-known technologies: HTML + JavaScript + CSS
    Vast amount of JavaScript libraries/frameworks available:
           General purpose: jQuery, Prototype, . . .
           Mobile: jQuery Mobile, Enyo, . . .
           ...
    Conclusion: More and more web is everywhere




    Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Eclipse



     Download Eclipse Classic
     http://www.eclipse.org/downloads/
     Uncompress Eclipse
     # cd /opt/
     # tar -xzvf 
         /home/user/Downloads/eclipse-SDK-4.2-linux-gtk-x86_64.tar.gz
     # cd /usr/local/bin/
     # ln -s /opt/eclipse/eclipse
     Run Eclipse
     $ eclipse




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Android SDK and ADT Plugin


     Download Android SDK
     (http://developer.android.com/sdk/index.html)
     $ cd ~
     $ tar -xzvf ~/Downloads/android-sdk_r20.0.1-linux.tgz
     Download and install ADT Plugin in Eclipse
            Add site: Juno -
            http://download.eclipse.org/releases/juno
            Add site: ADT Plugin -
            https://dl-ssl.google.com/android/eclipse/
            Install ADT Plugin
                   Android SDK Manager
                   AVD Manager




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Android project with PhoneGap library I


     Download PhoneGap http://phonegap.com/download
     Create a new Android Application Project in Eclipse
     Create 2 new folders in the root of the project:
            libs/
            assets/www/
     Copy some files from donwloaded PhoneGap:
            Copy cordova-2.0.0.js to assets/www/
            Copy cordova-2.0.0.jar to libs/
            Copy xml/ folder to res/
     Add cordova-2.0.0.jar to project Build Path


     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Android project with PhoneGap library II

     Modify MainActivity to extend DroidGap
     package com.igalia.phonegap.example.helloworldphonegap;

     import org.apache.cordova.DroidGap;

     import android.os.Bundle;

     public class MainActivity extends DroidGap {

         @Override
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             super.loadUrl("file:///android_asset/www/index.html");
         }

     }




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Configure permissions
     Modify AndroidManifest.xml adding the following lines
     between <uses-sdk.../> and <application.../>
     <supports-screens
         android:largeScreens="true"
         android:normalScreens="true"
         android:smallScreens="true"
         android:resizeable="true"
         android:anyDensity="true" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.
           ACCESS_LOCATION_EXTRA_COMMANDS" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.RECEIVE_SMS" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="android.permission.WRITE_CONTACTS" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="android.permission.BROADCAST_STICKY" />


     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Basic UI


     Create a new file index.html inside assets/www/ with
     the following content
     <!DOCTYPE HTML>
     <html>
     <head>
         <title>PhoneGap Example</title>
         <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></
               script>
     </head>
     <body>
         <h1>Hello World!</h1>
     </body>
     </html>



     Run as Android Application



     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Check that PhoneGap is ready



     Add JavaScript waiting for PoneGap to be loaded
         <script type="text/javascript">
             document.addEventListener("deviceready", onDeviceReady, false);

             function onDeviceReady() {
                 alert("PhoneGap loaded");
             }
         </script>




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Screenshot




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                                About PhoneGap
                                                  First PhoneGap application
                         Starting with PhoneGap
                                                  PhoneGap API overview
                            Example application
                                                  Building PhoneGap


Notification I



      Alert
      function showAlert() {
          navigator.notification.alert(
                  "Testing notification.alert",
                  afterAlert,
                  "Alert title",
                  "Button"
              );
      }

      function afterAlert() {
          // Do something
      }




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                                About PhoneGap
                                                  First PhoneGap application
                         Starting with PhoneGap
                                                  PhoneGap API overview
                            Example application
                                                  Building PhoneGap


Notification II


      Confirm
      function showConfirm() {
          navigator.notification.confirm(
                  "Do you like PhoneGap?",
                  onConfirm,
                  "About PhoneGap",
                  "Yes,No"
              );
      }

      function onConfirm(buttonIndex) {
          // Do something depending on the button (index starting in 1)
      }




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                                About PhoneGap
                                                  First PhoneGap application
                         Starting with PhoneGap
                                                  PhoneGap API overview
                            Example application
                                                  Building PhoneGap


Notification III



      Beep
      navigator.notification.beep(1);



      Vibrate
      navigator.notification.vibrate(2000);




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                   First PhoneGap application
                        Starting with PhoneGap
                                                   PhoneGap API overview
                           Example application
                                                   Building PhoneGap


Connection


     Internet connection
     function checkConnection() {
         var networkState = navigator.network.connection.type;

         var states = {};
         states[Connection.UNKNOWN]        =   "Unknown connection";
         states[Connection.ETHERNET]       =   "Ethernet connection";
         states[Connection.WIFI]           =   "WiFi connection";
         states[Connection.CELL_2G]        =   "Cell 2G connection";
         states[Connection.CELL_3G]        =   "Cell 3G connection";
         states[Connection.CELL_4G]        =   "Cell 4G connection";
         states[Connection.NONE]           =   "No network connection";

         alert("Connection type: " + states[networkState]);
     }




     Manuel Rego Casasnovas <rego@igalia.com>      Introduction to PhoneGap
Development environment
                               About PhoneGap
                                                 First PhoneGap application
                        Starting with PhoneGap
                                                 PhoneGap API overview
                           Example application
                                                 Building PhoneGap


Device



     Device information (name, PhoneGap version, platform,
     UUID, version)
     function showDeviceInfo() {
         alert("name: " + device.name + "n" +
                 "cordova: " + device.cordova + "n" +
                 "platform: " + device.platform + "n" +
                 "uuid: " + device.uuid + "n" +
                 "version: " + device.version);
     }




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                              About PhoneGap
                                                First PhoneGap application
                       Starting with PhoneGap
                                                PhoneGap API overview
                          Example application
                                                Building PhoneGap


Camera


    Get picture
    function takePicture() {
        navigator.camera.getPicture(onSuccess, onFail, {
                quality: 50,
                destinationType: Camera.DestinationType.DATA_URL
            });
    }

    function onSuccess(imageData) {
        var image = document.getElementById("myImage");
        image.src = "data:image/jpeg;base64," + imageData;
    }

    function onFail(message) {
        alert("Failed because: " + message);
    }




    Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                                  About PhoneGap
                                                    First PhoneGap application
                           Starting with PhoneGap
                                                    PhoneGap API overview
                              Example application
                                                    Building PhoneGap


Other

        Accelerometer
        Capture
        Compass
        Contacts
        Events
        File
        Geolocation
        Media
        Storage
  Documentation:           http://docs.phonegap.com/


        Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                                About PhoneGap
                                                  First PhoneGap application
                         Starting with PhoneGap
                                                  PhoneGap API overview
                            Example application
                                                  Building PhoneGap


Building for other platforms



      Previous example is using Android as target platform
      About other platforms:
             Look for documentation and build it manually
             Use PhoneGap Build (https://build.phonegap.com/)
                    Free for public apps
                    Platforms: iOS (only if iOS developer), Android, Windows
                    Phone, BlackBerry, webOS and Symbian




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
Development environment
                              About PhoneGap
                                                First PhoneGap application
                       Starting with PhoneGap
                                                PhoneGap API overview
                          Example application
                                                Building PhoneGap


PhoneGap Build



     Special files:
           index.html: App main page
           config.xml: Basic data about your application (name,
           description, author, icon, permissions, ...) based on the
           W3C widget spec (http://www.w3.org/TR/widgets/)
           *.png: Icon in PNG format
     More info:      https://build.phonegap.com/docs/




    Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                Example
                       Starting with PhoneGap
                                                Exercise
                          Example application


Feed Reader



    Goal: Develop a simple feed reader
    Technologies:
           PhoneGap: HTML + JavaScript + CSS
           jQuery (http://jquery.com/download/)
           jQuery Mobile (http://jquerymobile.com/download/)
           jFeed (jQuery plugin): RSS/Atom feed parser
           (https://github.com/jfhovinne/jFeed/downloads)




    Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Basic page template I




     Include JavaScript and CSS for jQuery Mobile
     <script type="text/javascript" charset="utf-8"
         src="jquery-1.7.2.min.js"></script>
     <script type="text/javascript" charset="utf-8"
         src="jquery.mobile-1.1.1.min.js"></script>

     <link rel="stylesheet" type="text/css"
         href="jquery.mobile-1.1.1.min.css"></link>




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Basic page template II


     Page
     <div data-role="page" id="main">

         <div data-role="header">
             <h1>RSS/Atom Reader</h1>
         </div>

         <div data-role="content">
             TODO
         </div>

     </div>




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Basic page template III



     List
     <div data-role="content">
         <ul data-role="listview">
             <li><a href="#">Post 1</a></li>
             <li><a href="#">Post 2</a></li>
             <li><a href="#">Post 3</a></li>
         </ul>
     </div>




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Basic page template IV




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Read feed I




     Include JavaScript for jFeed
     <script type="text/javascript" charset="utf-8"
         src="jquery.jfeed.pack.js"></script>




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Read feed II


     Change onDeviceReady() function (using Planet
     GNOME as example)
     function onDeviceReady() {
         jQuery.getFeed({
             url: "http://planet.gnome.org/rss20.xml",
             success: function(feed) {
                 for (var i = 0; i < feed.items.length; i++) {
                     var item = feed.items[i];
                     console.log("Item " + i + ": " + item.title);
                 }
             }
         });
     }




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Read feed III
     Log
     07-31 11:37:39.110: I/Web Console(1222):
         Item 0: Richard Hughes: Being an OpenHardwar
         at file:///android_asset/www/index.html:24
     07-31 11:37:39.114: I/Web Console(1222):
         Item 1: Beth Hadley: GUADEC 2012
         at file:///android_asset/www/index.html:24
     07-31 11:37:39.125: I/Web Console(1222):
         Item 2: Eitan Isaacson: GUADEC!
         at file:///android_asset/www/index.html:24
     07-31 11:37:39.125: I/Web Console(1222):
         Item 3: Matilda Bernard: GUADEC
         at file:///android_asset/www/index.html:24

     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Fill the list with the posts I




      Change HTML
      <div data-role="content">
          <ul data-role="listview" id="posts">
          </ul>
      </div>




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Fill the list with the posts II

      Change onDeviceReady() function
      function onDeviceReady(){
          jQuery.getFeed({
              url: "http://planet.gnome.org/rss20.xml",
              success: function(feed) {
                  for (var i = 0; i < feed.items.length; i++) {
                      var item = feed.items[i];
                      appendPost(item);
                  }
              }
          });
      }

      function appendPost(item) {
          $("#posts").append("<li>" + item.title + "</li>");
      }




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Fill the list with the posts III




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Fix list rendering I


      Refresh list using listview("refresh")
      function onDeviceReady() {
          jQuery.getFeed({
              url: "http://planet.gnome.org/rss20.xml",
              success: function(feed) {
                  for (var i = 0; i < feed.items.length; i++) {
                      var item = feed.items[i];
                      appendPost(item);
                  }
                  $("#posts").listview("refresh");
              }
          });
      }




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Fix list rendering II




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Improving list of posts I



      Modify appendPost(item) function
      function appendPost(item) {
          var link = $("<a />").attr("href", item.link);
          $("<h3 />").append(item.title).appendTo(link);
          $("<p />").append(item.updated).appendTo(link);

          var li =    $("<li />").append(link);

          $("#posts").append(li);
      }




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Improving list of posts II




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Add option to configure feed



     Tasks TODO:
            Create a new Options page with the form
            Process the form with jQuery and save the URL using
            PhoneGap API for Storage
            Reload the posts list with the new URL
            Add feed title
            Manage possible erros in the URL and request a new one
            again
            Add warning if there is not Internet connection




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


New page for options I




     Add link to Options page
     <div data-role="header">
         <h1>RSS/Atom Reader</h1>
         <a href="#options" class="ui-btn-right"
             data-icon="gear" data-iconpos="notext">Options</a>
     </div>




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


New page for options II
     Add new Options page
     <div data-role="page" id="options">
         <div data-role="header">
             <a data-rel="back" data-role="button"
                 data-icon="back" data-iconpos="notext">Back</a>
             <h1>Options</h1>
         </div>
         <div data-role="content">
             <div data-role="fieldcontain">
                 <label for="url">Feed URL:</label>
                 <input id="url" type="text"></input>
             </div>
             <fieldset class="ui-grid-a">
                 <div class="ui-block-a">
                     <a href="#main" data-role="button"
                         data-icon="delete">Cancel</a>
                 </div>
                 <div class="ui-block-b">
                     <a href="#main" data-role="button"
                         data-icon="check" data-theme="b"
                         onClick="saveFeedURL();">Accept</a>
                 </div>
             </fieldset>
         </div>
     </div>


     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


New page for options III




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Save feed URL

     Save feed URL using Storage API
     function saveFeedURL() {
         var url = $("#url").val();
         window.localStorage.setItem("feedUrl", url);
     }



     Read the stored feed URL
     function onDeviceReady() {
         var url = window.localStorage.getItem("feedUrl");
         $("#url").val(url);

         jQuery.getFeed({
             url: url,
             success: function(feed) {
                 [...]
             }
         });
     }




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Reload posts lists I

      Move to a separate method the code inside
      onDeviceReady()
      function onDeviceReady() {
          refreshPosts();
      }

      function refreshPosts() {
          var url = window.localStorage.getItem("feedUrl");
          $("#url").val(url);

          $("#posts").empty();
          jQuery.getFeed({
              url: url,
              success: function(feed) {
                  for (var i = 0; i < feed.items.length; i++) {
                      var item = feed.items[i];
                      console.log("Item " + i + ": " + item.title);
                      appendPost(item);
                  }
                  $("#posts").listview("refresh");
              }
          });
      }


      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Reload posts lists II



      Call refreshPosts() from saveFeedURL()
      function saveFeedURL() {
          var url = $("#url").val();
          window.localStorage.setItem("feedUrl", url);

          refreshPosts();
      }




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Add feed title I



      Modify success function inside refreshPosts()
      success: function(feed) {
          $("#posts").append($("<li data-role="list-divider" />")
                  .append(feed.title));

          for (var i = 0; i < feed.items.length; i++) {
              var item = feed.items[i];
              console.log("Item " + i + ": " + item.title);
              appendPost(item);
          }
          $("#posts").listview("refresh");
      }




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                  Example
                         Starting with PhoneGap
                                                  Exercise
                            Example application


Add feed title II




      Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Manage errors reading feed I


     Add error function inside refreshPosts()
     jQuery.getFeed({
         url: url,
         success: function(feed) {
             [...]
         },
         error: function(error) {
             var msg = "URL: " + url + "n" +
                 error.status + ": " + error.statusText;
             navigator.notification.alert(
                 msg,
                 goToOptions,
                 "Problems reading feed",
                 "Ok"
             );
         }
     });




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Manage errors reading feed II




     Add new function goToOptions()
     function goToOptions() {
         $.mobile.changePage("#options");
     }




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Manage errors reading feed III




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Check Internet connection I

     Modify onDeviceReady()
     function onDeviceReady() {
         if (isOnline()) {
             refreshPosts();
         } else {
             navigator.notification.alert(
                     "Sorry but it needs Internet to download the posts",
                     null,
                     "Off-line",
                     "Ok"
                  );
         }
     }



     Create new function isOnline()
     function isOnline() {
         var networkState = navigator.network.connection.type;
         return (networkState != Connection.NONE);
     }




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
About PhoneGap
                                                 Example
                        Starting with PhoneGap
                                                 Exercise
                           Example application


Check Internet connection II




     Manuel Rego Casasnovas <rego@igalia.com>    Introduction to PhoneGap
References



References

    PhoneGap
    http://phonegap.com/

    Apache Cordova API Documentation
    http://docs.phonegap.com/

    PhoneGap Wiki
    http://wiki.phonegap.com/

    PhoneGap Build Documentation
    https://build.phonegap.com/docs/

    PhoneGap - Wikipedia, the free encyclopedia
    http://en.wikipedia.org/wiki/PhoneGap



     Manuel Rego Casasnovas <rego@igalia.com>   Introduction to PhoneGap

More Related Content

What's hot

Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGapRamesh Nair
 
PhoneGap: a brief history and apologia
PhoneGap: a brief history and apologiaPhoneGap: a brief history and apologia
PhoneGap: a brief history and apologialorinbeer
 
Building Native Mobile Applications with PhoneGap
Building Native Mobile Applications with PhoneGapBuilding Native Mobile Applications with PhoneGap
Building Native Mobile Applications with PhoneGapSimon MacDonald
 
PhoneGap Day US 2013 - Chrome Packaged Apps
PhoneGap Day US 2013 - Chrome Packaged AppsPhoneGap Day US 2013 - Chrome Packaged Apps
PhoneGap Day US 2013 - Chrome Packaged AppsPhoneGap
 
Cordova and PhoneGap Insights
Cordova and PhoneGap InsightsCordova and PhoneGap Insights
Cordova and PhoneGap InsightsMonaca
 
PhoneGap: Building Mobile Applications with HTML/JS
PhoneGap: Building Mobile Applications with HTML/JSPhoneGap: Building Mobile Applications with HTML/JS
PhoneGap: Building Mobile Applications with HTML/JSRyan Stewart
 
From mobile browser to mobile app
From mobile browser to mobile appFrom mobile browser to mobile app
From mobile browser to mobile appRyan Stewart
 
DroidCon 2011: Developing HTML5 and hybrid Android apps using Phonegap
DroidCon 2011: Developing HTML5 and hybrid Android apps using PhonegapDroidCon 2011: Developing HTML5 and hybrid Android apps using Phonegap
DroidCon 2011: Developing HTML5 and hybrid Android apps using PhonegapAyushman Jain
 
Phone gap in android technology
Phone gap in android technologyPhone gap in android technology
Phone gap in android technologyVikrant Thakare
 
Debugging and deploying with phone gap
Debugging and deploying with phone gapDebugging and deploying with phone gap
Debugging and deploying with phone gapRyan Stewart
 
Developing with Phonegap - Adobe Refresh 2012
Developing with Phonegap - Adobe Refresh 2012Developing with Phonegap - Adobe Refresh 2012
Developing with Phonegap - Adobe Refresh 2012Ryan Stewart
 
Getting Acquainted with PhoneGap
Getting Acquainted with PhoneGapGetting Acquainted with PhoneGap
Getting Acquainted with PhoneGapJoseph Labrecque
 
The Phonegap Architecture
The Phonegap ArchitectureThe Phonegap Architecture
The Phonegap ArchitectureFrank Gielen
 
Flutter vs React Native Development in 2020
Flutter vs React Native Development in 2020Flutter vs React Native Development in 2020
Flutter vs React Native Development in 2020Devathon
 
Hybrid App Development with PhoneGap
Hybrid App Development with PhoneGapHybrid App Development with PhoneGap
Hybrid App Development with PhoneGapDotitude
 
Phonegap
PhonegapPhonegap
PhonegapTim Kim
 

What's hot (20)

Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGap
 
PhoneGap: a brief history and apologia
PhoneGap: a brief history and apologiaPhoneGap: a brief history and apologia
PhoneGap: a brief history and apologia
 
PhoneGap
PhoneGapPhoneGap
PhoneGap
 
Building Native Mobile Applications with PhoneGap
Building Native Mobile Applications with PhoneGapBuilding Native Mobile Applications with PhoneGap
Building Native Mobile Applications with PhoneGap
 
Phonegap
PhonegapPhonegap
Phonegap
 
PhoneGap Day US 2013 - Chrome Packaged Apps
PhoneGap Day US 2013 - Chrome Packaged AppsPhoneGap Day US 2013 - Chrome Packaged Apps
PhoneGap Day US 2013 - Chrome Packaged Apps
 
Cordova and PhoneGap Insights
Cordova and PhoneGap InsightsCordova and PhoneGap Insights
Cordova and PhoneGap Insights
 
PhoneGap: Building Mobile Applications with HTML/JS
PhoneGap: Building Mobile Applications with HTML/JSPhoneGap: Building Mobile Applications with HTML/JS
PhoneGap: Building Mobile Applications with HTML/JS
 
From mobile browser to mobile app
From mobile browser to mobile appFrom mobile browser to mobile app
From mobile browser to mobile app
 
Phonegap
PhonegapPhonegap
Phonegap
 
DroidCon 2011: Developing HTML5 and hybrid Android apps using Phonegap
DroidCon 2011: Developing HTML5 and hybrid Android apps using PhonegapDroidCon 2011: Developing HTML5 and hybrid Android apps using Phonegap
DroidCon 2011: Developing HTML5 and hybrid Android apps using Phonegap
 
Phone gap in android technology
Phone gap in android technologyPhone gap in android technology
Phone gap in android technology
 
Debugging and deploying with phone gap
Debugging and deploying with phone gapDebugging and deploying with phone gap
Debugging and deploying with phone gap
 
Intro to PhoneGap
Intro to PhoneGapIntro to PhoneGap
Intro to PhoneGap
 
Developing with Phonegap - Adobe Refresh 2012
Developing with Phonegap - Adobe Refresh 2012Developing with Phonegap - Adobe Refresh 2012
Developing with Phonegap - Adobe Refresh 2012
 
Getting Acquainted with PhoneGap
Getting Acquainted with PhoneGapGetting Acquainted with PhoneGap
Getting Acquainted with PhoneGap
 
The Phonegap Architecture
The Phonegap ArchitectureThe Phonegap Architecture
The Phonegap Architecture
 
Flutter vs React Native Development in 2020
Flutter vs React Native Development in 2020Flutter vs React Native Development in 2020
Flutter vs React Native Development in 2020
 
Hybrid App Development with PhoneGap
Hybrid App Development with PhoneGapHybrid App Development with PhoneGap
Hybrid App Development with PhoneGap
 
Phonegap
PhonegapPhonegap
Phonegap
 

Similar to Introduction to PhoneGap

PhoneGap JavaScript API vs Native Components
PhoneGap JavaScript API vs Native ComponentsPhoneGap JavaScript API vs Native Components
PhoneGap JavaScript API vs Native ComponentsTechAhead
 
PhoneGap/PhoneGap Build - Amsterdam Adobe Camp
PhoneGap/PhoneGap Build - Amsterdam Adobe CampPhoneGap/PhoneGap Build - Amsterdam Adobe Camp
PhoneGap/PhoneGap Build - Amsterdam Adobe CampMihai Corlan
 
Georges Chitiga - Introduction to Phonegap - HTML5 & JS to native mobile app
Georges Chitiga - Introduction to Phonegap - HTML5 & JS to native mobile appGeorges Chitiga - Introduction to Phonegap - HTML5 & JS to native mobile app
Georges Chitiga - Introduction to Phonegap - HTML5 & JS to native mobile appCodecamp Romania
 
Getting started with PhoneGap
Getting started with PhoneGapGetting started with PhoneGap
Getting started with PhoneGapMihai Corlan
 
PhoneGap - Now and the Future
PhoneGap - Now and the FuturePhoneGap - Now and the Future
PhoneGap - Now and the FutureTim Kim
 
Choosing the Right Mobile Development Platform (Part 3)
Choosing the Right Mobile Development Platform (Part 3)Choosing the Right Mobile Development Platform (Part 3)
Choosing the Right Mobile Development Platform (Part 3)Chris Griffith
 
An introduction to Apache Cordova
An introduction to Apache CordovaAn introduction to Apache Cordova
An introduction to Apache Cordovavaluebound
 
Developing cross platform mobile applications with phone gap for windows phone
Developing cross platform mobile applications with phone gap for windows phoneDeveloping cross platform mobile applications with phone gap for windows phone
Developing cross platform mobile applications with phone gap for windows phoneColin Eberhardt
 
Android SDK and PhoneGap
Android SDK and PhoneGapAndroid SDK and PhoneGap
Android SDK and PhoneGapDoncho Minkov
 
Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGapQuang Minh Dao
 
Intro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap BuildIntro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap BuildChris Griffith
 
Cross Platform Mobile App Development
Cross Platform Mobile App Development Cross Platform Mobile App Development
Cross Platform Mobile App Development Jakir Hossain
 

Similar to Introduction to PhoneGap (20)

Phonegap
PhonegapPhonegap
Phonegap
 
PhoneGap JavaScript API vs Native Components
PhoneGap JavaScript API vs Native ComponentsPhoneGap JavaScript API vs Native Components
PhoneGap JavaScript API vs Native Components
 
PhoneGap/PhoneGap Build - Amsterdam Adobe Camp
PhoneGap/PhoneGap Build - Amsterdam Adobe CampPhoneGap/PhoneGap Build - Amsterdam Adobe Camp
PhoneGap/PhoneGap Build - Amsterdam Adobe Camp
 
What is PhoneGap?
What is PhoneGap?What is PhoneGap?
What is PhoneGap?
 
PhoneGap
PhoneGapPhoneGap
PhoneGap
 
Phone gap development, testing, and debugging
Phone gap development, testing, and debuggingPhone gap development, testing, and debugging
Phone gap development, testing, and debugging
 
phonegap_101
phonegap_101phonegap_101
phonegap_101
 
Georges Chitiga - Introduction to Phonegap - HTML5 & JS to native mobile app
Georges Chitiga - Introduction to Phonegap - HTML5 & JS to native mobile appGeorges Chitiga - Introduction to Phonegap - HTML5 & JS to native mobile app
Georges Chitiga - Introduction to Phonegap - HTML5 & JS to native mobile app
 
Getting started with PhoneGap
Getting started with PhoneGapGetting started with PhoneGap
Getting started with PhoneGap
 
PhoneGap - Now and the Future
PhoneGap - Now and the FuturePhoneGap - Now and the Future
PhoneGap - Now and the Future
 
Choosing the Right Mobile Development Platform (Part 3)
Choosing the Right Mobile Development Platform (Part 3)Choosing the Right Mobile Development Platform (Part 3)
Choosing the Right Mobile Development Platform (Part 3)
 
An introduction to Apache Cordova
An introduction to Apache CordovaAn introduction to Apache Cordova
An introduction to Apache Cordova
 
Developing cross platform mobile applications with phone gap for windows phone
Developing cross platform mobile applications with phone gap for windows phoneDeveloping cross platform mobile applications with phone gap for windows phone
Developing cross platform mobile applications with phone gap for windows phone
 
Android SDK and PhoneGap
Android SDK and PhoneGapAndroid SDK and PhoneGap
Android SDK and PhoneGap
 
Phone gap development, testing, and debugging
Phone gap development, testing, and debuggingPhone gap development, testing, and debugging
Phone gap development, testing, and debugging
 
Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGap
 
Phonegap
PhonegapPhonegap
Phonegap
 
Intro to PhoneGap
Intro to PhoneGapIntro to PhoneGap
Intro to PhoneGap
 
Intro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap BuildIntro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap Build
 
Cross Platform Mobile App Development
Cross Platform Mobile App Development Cross Platform Mobile App Development
Cross Platform Mobile App Development
 

More from degarden

MICHELIN_-AGILIS-CrossClimate_GB
MICHELIN_-AGILIS-CrossClimate_GBMICHELIN_-AGILIS-CrossClimate_GB
MICHELIN_-AGILIS-CrossClimate_GBdegarden
 
ABC 2021 Guia del vino
ABC 2021 Guia del vinoABC 2021 Guia del vino
ABC 2021 Guia del vinodegarden
 
Audi-A3-Sportback-catalogo-es-1146
Audi-A3-Sportback-catalogo-es-1146Audi-A3-Sportback-catalogo-es-1146
Audi-A3-Sportback-catalogo-es-1146degarden
 
Why btrfs is the Bread and Butter of Filesystems
Why btrfs is the Bread and Butter of FilesystemsWhy btrfs is the Bread and Butter of Filesystems
Why btrfs is the Bread and Butter of Filesystemsdegarden
 
Toshiba X300 salessheet english-web_r2
Toshiba X300 salessheet english-web_r2Toshiba X300 salessheet english-web_r2
Toshiba X300 salessheet english-web_r2degarden
 
Toshiba N300 salessheet english-web_r2
Toshiba N300 salessheet english-web_r2Toshiba N300 salessheet english-web_r2
Toshiba N300 salessheet english-web_r2degarden
 
The 20 maps that will help you understand Spain - The Local
The 20 maps that will help you understand Spain - The LocalThe 20 maps that will help you understand Spain - The Local
The 20 maps that will help you understand Spain - The Localdegarden
 
Toshiba X300 Performance Internal Hard Drive
Toshiba X300 Performance Internal Hard DriveToshiba X300 Performance Internal Hard Drive
Toshiba X300 Performance Internal Hard Drivedegarden
 
Sper Food Safety Thermometer with IR
Sper Food Safety Thermometer with IRSper Food Safety Thermometer with IR
Sper Food Safety Thermometer with IRdegarden
 
Plarad Torque and tension systems
Plarad Torque and tension systemsPlarad Torque and tension systems
Plarad Torque and tension systemsdegarden
 
Plarad Hydraulikaggregate Hydraulic Power Packs
Plarad Hydraulikaggregate Hydraulic Power PacksPlarad Hydraulikaggregate Hydraulic Power Packs
Plarad Hydraulikaggregate Hydraulic Power Packsdegarden
 
Hands-Free Profile 1.7
Hands-Free Profile 1.7Hands-Free Profile 1.7
Hands-Free Profile 1.7degarden
 
Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...
Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...
Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...degarden
 
Reverse Engineering BLE Devices Documentation
Reverse Engineering BLE Devices DocumentationReverse Engineering BLE Devices Documentation
Reverse Engineering BLE Devices Documentationdegarden
 
pWeb: A P2P Web Hosting Framework
pWeb: A P2P Web Hosting FrameworkpWeb: A P2P Web Hosting Framework
pWeb: A P2P Web Hosting Frameworkdegarden
 
¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android
¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android ¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android
¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android degarden
 
Bose NC 700 - User manual English
Bose NC 700 - User manual EnglishBose NC 700 - User manual English
Bose NC 700 - User manual Englishdegarden
 
MICHELIN CrossCLIMATE+
MICHELIN CrossCLIMATE+MICHELIN CrossCLIMATE+
MICHELIN CrossCLIMATE+degarden
 
Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017
Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017
Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017degarden
 

More from degarden (20)

MICHELIN_-AGILIS-CrossClimate_GB
MICHELIN_-AGILIS-CrossClimate_GBMICHELIN_-AGILIS-CrossClimate_GB
MICHELIN_-AGILIS-CrossClimate_GB
 
ABC 2021 Guia del vino
ABC 2021 Guia del vinoABC 2021 Guia del vino
ABC 2021 Guia del vino
 
Audi-A3-Sportback-catalogo-es-1146
Audi-A3-Sportback-catalogo-es-1146Audi-A3-Sportback-catalogo-es-1146
Audi-A3-Sportback-catalogo-es-1146
 
Why btrfs is the Bread and Butter of Filesystems
Why btrfs is the Bread and Butter of FilesystemsWhy btrfs is the Bread and Butter of Filesystems
Why btrfs is the Bread and Butter of Filesystems
 
Toshiba X300 salessheet english-web_r2
Toshiba X300 salessheet english-web_r2Toshiba X300 salessheet english-web_r2
Toshiba X300 salessheet english-web_r2
 
Toshiba N300 salessheet english-web_r2
Toshiba N300 salessheet english-web_r2Toshiba N300 salessheet english-web_r2
Toshiba N300 salessheet english-web_r2
 
The 20 maps that will help you understand Spain - The Local
The 20 maps that will help you understand Spain - The LocalThe 20 maps that will help you understand Spain - The Local
The 20 maps that will help you understand Spain - The Local
 
Toshiba X300 Performance Internal Hard Drive
Toshiba X300 Performance Internal Hard DriveToshiba X300 Performance Internal Hard Drive
Toshiba X300 Performance Internal Hard Drive
 
Bronces
BroncesBronces
Bronces
 
Sper Food Safety Thermometer with IR
Sper Food Safety Thermometer with IRSper Food Safety Thermometer with IR
Sper Food Safety Thermometer with IR
 
Plarad Torque and tension systems
Plarad Torque and tension systemsPlarad Torque and tension systems
Plarad Torque and tension systems
 
Plarad Hydraulikaggregate Hydraulic Power Packs
Plarad Hydraulikaggregate Hydraulic Power PacksPlarad Hydraulikaggregate Hydraulic Power Packs
Plarad Hydraulikaggregate Hydraulic Power Packs
 
Hands-Free Profile 1.7
Hands-Free Profile 1.7Hands-Free Profile 1.7
Hands-Free Profile 1.7
 
Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...
Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...
Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...
 
Reverse Engineering BLE Devices Documentation
Reverse Engineering BLE Devices DocumentationReverse Engineering BLE Devices Documentation
Reverse Engineering BLE Devices Documentation
 
pWeb: A P2P Web Hosting Framework
pWeb: A P2P Web Hosting FrameworkpWeb: A P2P Web Hosting Framework
pWeb: A P2P Web Hosting Framework
 
¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android
¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android ¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android
¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android
 
Bose NC 700 - User manual English
Bose NC 700 - User manual EnglishBose NC 700 - User manual English
Bose NC 700 - User manual English
 
MICHELIN CrossCLIMATE+
MICHELIN CrossCLIMATE+MICHELIN CrossCLIMATE+
MICHELIN CrossCLIMATE+
 
Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017
Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017
Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017
 

Recently uploaded

Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting DataJhengPantaleon
 
KSHARA STURA .pptx---KSHARA KARMA THERAPY (CAUSTIC THERAPY)————IMP.OF KSHARA ...
KSHARA STURA .pptx---KSHARA KARMA THERAPY (CAUSTIC THERAPY)————IMP.OF KSHARA ...KSHARA STURA .pptx---KSHARA KARMA THERAPY (CAUSTIC THERAPY)————IMP.OF KSHARA ...
KSHARA STURA .pptx---KSHARA KARMA THERAPY (CAUSTIC THERAPY)————IMP.OF KSHARA ...M56BOOKSTORE PRODUCT/SERVICE
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionSafetyChain Software
 
Introduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxIntroduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxpboyjonauth
 
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxNirmalaLoungPoorunde1
 
Hybridoma Technology ( Production , Purification , and Application )
Hybridoma Technology  ( Production , Purification , and Application  ) Hybridoma Technology  ( Production , Purification , and Application  )
Hybridoma Technology ( Production , Purification , and Application ) Sakshi Ghasle
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxGaneshChakor2
 
Solving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxSolving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxOH TEIK BIN
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdfSoniaTolstoy
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Celine George
 
Science 7 - LAND and SEA BREEZE and its Characteristics
Science 7 - LAND and SEA BREEZE and its CharacteristicsScience 7 - LAND and SEA BREEZE and its Characteristics
Science 7 - LAND and SEA BREEZE and its CharacteristicsKarinaGenton
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentInMediaRes1
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docxPoojaSen20
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 

Recently uploaded (20)

Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
 
KSHARA STURA .pptx---KSHARA KARMA THERAPY (CAUSTIC THERAPY)————IMP.OF KSHARA ...
KSHARA STURA .pptx---KSHARA KARMA THERAPY (CAUSTIC THERAPY)————IMP.OF KSHARA ...KSHARA STURA .pptx---KSHARA KARMA THERAPY (CAUSTIC THERAPY)————IMP.OF KSHARA ...
KSHARA STURA .pptx---KSHARA KARMA THERAPY (CAUSTIC THERAPY)————IMP.OF KSHARA ...
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory Inspection
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Introduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxIntroduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptx
 
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptx
 
Hybridoma Technology ( Production , Purification , and Application )
Hybridoma Technology  ( Production , Purification , and Application  ) Hybridoma Technology  ( Production , Purification , and Application  )
Hybridoma Technology ( Production , Purification , and Application )
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptx
 
Solving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxSolving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptx
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
 
Science 7 - LAND and SEA BREEZE and its Characteristics
Science 7 - LAND and SEA BREEZE and its CharacteristicsScience 7 - LAND and SEA BREEZE and its Characteristics
Science 7 - LAND and SEA BREEZE and its Characteristics
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media Component
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docx
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 

Introduction to PhoneGap

  • 1. About PhoneGap Starting with PhoneGap Example application Introduction to PhoneGap Web development for mobile platforms Manuel Rego Casasnovas <rego@igalia.com> Master on Free Software / August 2012 Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 2. About PhoneGap Starting with PhoneGap Example application Outline 1 About PhoneGap 2 Starting with PhoneGap Development environment First PhoneGap application PhoneGap API overview Building PhoneGap 3 Example application Example Exercise Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 3. About PhoneGap Starting with PhoneGap About PhoneGap Example application What is PhoneGap? Mobile web development framework Based on JavaScript, HTML5 and CSS3 Open source: Apache 2.0 License Supported platforms: iPhone, Android, Windows Phone, BlackBerry, Symbian, webOS and Bada (comming soon) Homepage: http://phonegap.com/ Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 4. About PhoneGap Starting with PhoneGap About PhoneGap Example application History Started by Nitobi Software People’s Choice Award at O’Reilly Media’s 2009 Web 2.0 Conference Adobe acquired Nitobi on October 2011 PhoneGap was contributed to the Apache Software Foundation First it was called Apache Callback Renamed to Apache Cordova URL: http://incubator.apache.org/cordova/ Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 5. About PhoneGap Starting with PhoneGap About PhoneGap Example application Features JavaScript API to access different parts of the device: Accelerometer Camera Capture Compass Connection Contacts Device Events File Geolocation Media Notifications (alert, sound, vibration) Storage Documentation: http://docs.phonegap.com/ Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 6. About PhoneGap Starting with PhoneGap About PhoneGap Example application Advantages Multi-platform Well-known technologies: HTML + JavaScript + CSS Vast amount of JavaScript libraries/frameworks available: General purpose: jQuery, Prototype, . . . Mobile: jQuery Mobile, Enyo, . . . ... Conclusion: More and more web is everywhere Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 7. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Eclipse Download Eclipse Classic http://www.eclipse.org/downloads/ Uncompress Eclipse # cd /opt/ # tar -xzvf /home/user/Downloads/eclipse-SDK-4.2-linux-gtk-x86_64.tar.gz # cd /usr/local/bin/ # ln -s /opt/eclipse/eclipse Run Eclipse $ eclipse Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 8. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Android SDK and ADT Plugin Download Android SDK (http://developer.android.com/sdk/index.html) $ cd ~ $ tar -xzvf ~/Downloads/android-sdk_r20.0.1-linux.tgz Download and install ADT Plugin in Eclipse Add site: Juno - http://download.eclipse.org/releases/juno Add site: ADT Plugin - https://dl-ssl.google.com/android/eclipse/ Install ADT Plugin Android SDK Manager AVD Manager Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 9. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Android project with PhoneGap library I Download PhoneGap http://phonegap.com/download Create a new Android Application Project in Eclipse Create 2 new folders in the root of the project: libs/ assets/www/ Copy some files from donwloaded PhoneGap: Copy cordova-2.0.0.js to assets/www/ Copy cordova-2.0.0.jar to libs/ Copy xml/ folder to res/ Add cordova-2.0.0.jar to project Build Path Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 10. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Android project with PhoneGap library II Modify MainActivity to extend DroidGap package com.igalia.phonegap.example.helloworldphonegap; import org.apache.cordova.DroidGap; import android.os.Bundle; public class MainActivity extends DroidGap { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/www/index.html"); } } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 11. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Configure permissions Modify AndroidManifest.xml adding the following lines between <uses-sdk.../> and <application.../> <supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:resizeable="true" android:anyDensity="true" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission. ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 12. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Basic UI Create a new file index.html inside assets/www/ with the following content <!DOCTYPE HTML> <html> <head> <title>PhoneGap Example</title> <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></ script> </head> <body> <h1>Hello World!</h1> </body> </html> Run as Android Application Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 13. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Check that PhoneGap is ready Add JavaScript waiting for PoneGap to be loaded <script type="text/javascript"> document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { alert("PhoneGap loaded"); } </script> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 14. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Screenshot Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 15. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Notification I Alert function showAlert() { navigator.notification.alert( "Testing notification.alert", afterAlert, "Alert title", "Button" ); } function afterAlert() { // Do something } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 16. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Notification II Confirm function showConfirm() { navigator.notification.confirm( "Do you like PhoneGap?", onConfirm, "About PhoneGap", "Yes,No" ); } function onConfirm(buttonIndex) { // Do something depending on the button (index starting in 1) } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 17. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Notification III Beep navigator.notification.beep(1); Vibrate navigator.notification.vibrate(2000); Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 18. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Connection Internet connection function checkConnection() { var networkState = navigator.network.connection.type; var states = {}; states[Connection.UNKNOWN] = "Unknown connection"; states[Connection.ETHERNET] = "Ethernet connection"; states[Connection.WIFI] = "WiFi connection"; states[Connection.CELL_2G] = "Cell 2G connection"; states[Connection.CELL_3G] = "Cell 3G connection"; states[Connection.CELL_4G] = "Cell 4G connection"; states[Connection.NONE] = "No network connection"; alert("Connection type: " + states[networkState]); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 19. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Device Device information (name, PhoneGap version, platform, UUID, version) function showDeviceInfo() { alert("name: " + device.name + "n" + "cordova: " + device.cordova + "n" + "platform: " + device.platform + "n" + "uuid: " + device.uuid + "n" + "version: " + device.version); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 20. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Camera Get picture function takePicture() { navigator.camera.getPicture(onSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.DATA_URL }); } function onSuccess(imageData) { var image = document.getElementById("myImage"); image.src = "data:image/jpeg;base64," + imageData; } function onFail(message) { alert("Failed because: " + message); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 21. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Other Accelerometer Capture Compass Contacts Events File Geolocation Media Storage Documentation: http://docs.phonegap.com/ Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 22. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap Building for other platforms Previous example is using Android as target platform About other platforms: Look for documentation and build it manually Use PhoneGap Build (https://build.phonegap.com/) Free for public apps Platforms: iOS (only if iOS developer), Android, Windows Phone, BlackBerry, webOS and Symbian Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 23. Development environment About PhoneGap First PhoneGap application Starting with PhoneGap PhoneGap API overview Example application Building PhoneGap PhoneGap Build Special files: index.html: App main page config.xml: Basic data about your application (name, description, author, icon, permissions, ...) based on the W3C widget spec (http://www.w3.org/TR/widgets/) *.png: Icon in PNG format More info: https://build.phonegap.com/docs/ Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 24. About PhoneGap Example Starting with PhoneGap Exercise Example application Feed Reader Goal: Develop a simple feed reader Technologies: PhoneGap: HTML + JavaScript + CSS jQuery (http://jquery.com/download/) jQuery Mobile (http://jquerymobile.com/download/) jFeed (jQuery plugin): RSS/Atom feed parser (https://github.com/jfhovinne/jFeed/downloads) Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 25. About PhoneGap Example Starting with PhoneGap Exercise Example application Basic page template I Include JavaScript and CSS for jQuery Mobile <script type="text/javascript" charset="utf-8" src="jquery-1.7.2.min.js"></script> <script type="text/javascript" charset="utf-8" src="jquery.mobile-1.1.1.min.js"></script> <link rel="stylesheet" type="text/css" href="jquery.mobile-1.1.1.min.css"></link> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 26. About PhoneGap Example Starting with PhoneGap Exercise Example application Basic page template II Page <div data-role="page" id="main"> <div data-role="header"> <h1>RSS/Atom Reader</h1> </div> <div data-role="content"> TODO </div> </div> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 27. About PhoneGap Example Starting with PhoneGap Exercise Example application Basic page template III List <div data-role="content"> <ul data-role="listview"> <li><a href="#">Post 1</a></li> <li><a href="#">Post 2</a></li> <li><a href="#">Post 3</a></li> </ul> </div> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 28. About PhoneGap Example Starting with PhoneGap Exercise Example application Basic page template IV Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 29. About PhoneGap Example Starting with PhoneGap Exercise Example application Read feed I Include JavaScript for jFeed <script type="text/javascript" charset="utf-8" src="jquery.jfeed.pack.js"></script> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 30. About PhoneGap Example Starting with PhoneGap Exercise Example application Read feed II Change onDeviceReady() function (using Planet GNOME as example) function onDeviceReady() { jQuery.getFeed({ url: "http://planet.gnome.org/rss20.xml", success: function(feed) { for (var i = 0; i < feed.items.length; i++) { var item = feed.items[i]; console.log("Item " + i + ": " + item.title); } } }); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 31. About PhoneGap Example Starting with PhoneGap Exercise Example application Read feed III Log 07-31 11:37:39.110: I/Web Console(1222): Item 0: Richard Hughes: Being an OpenHardwar at file:///android_asset/www/index.html:24 07-31 11:37:39.114: I/Web Console(1222): Item 1: Beth Hadley: GUADEC 2012 at file:///android_asset/www/index.html:24 07-31 11:37:39.125: I/Web Console(1222): Item 2: Eitan Isaacson: GUADEC! at file:///android_asset/www/index.html:24 07-31 11:37:39.125: I/Web Console(1222): Item 3: Matilda Bernard: GUADEC at file:///android_asset/www/index.html:24 Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 32. About PhoneGap Example Starting with PhoneGap Exercise Example application Fill the list with the posts I Change HTML <div data-role="content"> <ul data-role="listview" id="posts"> </ul> </div> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 33. About PhoneGap Example Starting with PhoneGap Exercise Example application Fill the list with the posts II Change onDeviceReady() function function onDeviceReady(){ jQuery.getFeed({ url: "http://planet.gnome.org/rss20.xml", success: function(feed) { for (var i = 0; i < feed.items.length; i++) { var item = feed.items[i]; appendPost(item); } } }); } function appendPost(item) { $("#posts").append("<li>" + item.title + "</li>"); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 34. About PhoneGap Example Starting with PhoneGap Exercise Example application Fill the list with the posts III Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 35. About PhoneGap Example Starting with PhoneGap Exercise Example application Fix list rendering I Refresh list using listview("refresh") function onDeviceReady() { jQuery.getFeed({ url: "http://planet.gnome.org/rss20.xml", success: function(feed) { for (var i = 0; i < feed.items.length; i++) { var item = feed.items[i]; appendPost(item); } $("#posts").listview("refresh"); } }); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 36. About PhoneGap Example Starting with PhoneGap Exercise Example application Fix list rendering II Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 37. About PhoneGap Example Starting with PhoneGap Exercise Example application Improving list of posts I Modify appendPost(item) function function appendPost(item) { var link = $("<a />").attr("href", item.link); $("<h3 />").append(item.title).appendTo(link); $("<p />").append(item.updated).appendTo(link); var li = $("<li />").append(link); $("#posts").append(li); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 38. About PhoneGap Example Starting with PhoneGap Exercise Example application Improving list of posts II Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 39. About PhoneGap Example Starting with PhoneGap Exercise Example application Add option to configure feed Tasks TODO: Create a new Options page with the form Process the form with jQuery and save the URL using PhoneGap API for Storage Reload the posts list with the new URL Add feed title Manage possible erros in the URL and request a new one again Add warning if there is not Internet connection Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 40. About PhoneGap Example Starting with PhoneGap Exercise Example application New page for options I Add link to Options page <div data-role="header"> <h1>RSS/Atom Reader</h1> <a href="#options" class="ui-btn-right" data-icon="gear" data-iconpos="notext">Options</a> </div> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 41. About PhoneGap Example Starting with PhoneGap Exercise Example application New page for options II Add new Options page <div data-role="page" id="options"> <div data-role="header"> <a data-rel="back" data-role="button" data-icon="back" data-iconpos="notext">Back</a> <h1>Options</h1> </div> <div data-role="content"> <div data-role="fieldcontain"> <label for="url">Feed URL:</label> <input id="url" type="text"></input> </div> <fieldset class="ui-grid-a"> <div class="ui-block-a"> <a href="#main" data-role="button" data-icon="delete">Cancel</a> </div> <div class="ui-block-b"> <a href="#main" data-role="button" data-icon="check" data-theme="b" onClick="saveFeedURL();">Accept</a> </div> </fieldset> </div> </div> Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 42. About PhoneGap Example Starting with PhoneGap Exercise Example application New page for options III Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 43. About PhoneGap Example Starting with PhoneGap Exercise Example application Save feed URL Save feed URL using Storage API function saveFeedURL() { var url = $("#url").val(); window.localStorage.setItem("feedUrl", url); } Read the stored feed URL function onDeviceReady() { var url = window.localStorage.getItem("feedUrl"); $("#url").val(url); jQuery.getFeed({ url: url, success: function(feed) { [...] } }); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 44. About PhoneGap Example Starting with PhoneGap Exercise Example application Reload posts lists I Move to a separate method the code inside onDeviceReady() function onDeviceReady() { refreshPosts(); } function refreshPosts() { var url = window.localStorage.getItem("feedUrl"); $("#url").val(url); $("#posts").empty(); jQuery.getFeed({ url: url, success: function(feed) { for (var i = 0; i < feed.items.length; i++) { var item = feed.items[i]; console.log("Item " + i + ": " + item.title); appendPost(item); } $("#posts").listview("refresh"); } }); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 45. About PhoneGap Example Starting with PhoneGap Exercise Example application Reload posts lists II Call refreshPosts() from saveFeedURL() function saveFeedURL() { var url = $("#url").val(); window.localStorage.setItem("feedUrl", url); refreshPosts(); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 46. About PhoneGap Example Starting with PhoneGap Exercise Example application Add feed title I Modify success function inside refreshPosts() success: function(feed) { $("#posts").append($("<li data-role="list-divider" />") .append(feed.title)); for (var i = 0; i < feed.items.length; i++) { var item = feed.items[i]; console.log("Item " + i + ": " + item.title); appendPost(item); } $("#posts").listview("refresh"); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 47. About PhoneGap Example Starting with PhoneGap Exercise Example application Add feed title II Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 48. About PhoneGap Example Starting with PhoneGap Exercise Example application Manage errors reading feed I Add error function inside refreshPosts() jQuery.getFeed({ url: url, success: function(feed) { [...] }, error: function(error) { var msg = "URL: " + url + "n" + error.status + ": " + error.statusText; navigator.notification.alert( msg, goToOptions, "Problems reading feed", "Ok" ); } }); Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 49. About PhoneGap Example Starting with PhoneGap Exercise Example application Manage errors reading feed II Add new function goToOptions() function goToOptions() { $.mobile.changePage("#options"); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 50. About PhoneGap Example Starting with PhoneGap Exercise Example application Manage errors reading feed III Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 51. About PhoneGap Example Starting with PhoneGap Exercise Example application Check Internet connection I Modify onDeviceReady() function onDeviceReady() { if (isOnline()) { refreshPosts(); } else { navigator.notification.alert( "Sorry but it needs Internet to download the posts", null, "Off-line", "Ok" ); } } Create new function isOnline() function isOnline() { var networkState = navigator.network.connection.type; return (networkState != Connection.NONE); } Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 52. About PhoneGap Example Starting with PhoneGap Exercise Example application Check Internet connection II Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap
  • 53. References References PhoneGap http://phonegap.com/ Apache Cordova API Documentation http://docs.phonegap.com/ PhoneGap Wiki http://wiki.phonegap.com/ PhoneGap Build Documentation https://build.phonegap.com/docs/ PhoneGap - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/PhoneGap Manuel Rego Casasnovas <rego@igalia.com> Introduction to PhoneGap