The Cordova framework
Recurrent app architecture
Cordova CLI
Debugging Cordova applications
My development environment
Cordova APIs
This presentation has been developed in the context of the Mobile Applications Development course, DISIM, University of L'Aquila (Italy), Spring 2014.
http://www.ivanomalavolta.com
2. Roadmap
• The Cordova framework
• Recurrent app architecture
• Cordova CLI
• Debugging Cordova applications
• My development environment
• Cordova APIs
3. PhoneGap VS Cordova
Adobe/Nitobi donated the PhoneGap codebase to the Apache foundation
à
wider audience and contributors
à
transparent governance
Better documentation
à
easier contributions for companies
Apache Licensing
There was only one problem....
trademark ambiguity
à CORDOVA
PhoneGap is a distribution of
Apache Cordova
4. Cordova
You develop your app using the usual three guys
You use the same web view of the native OS
• iOS = UIWebView
• Android = android.webkit.WebView
http://phonegap.com/blog/2013/06/20/coming-soon-phonegap30/
5. Cordova
The UI layer is a web browser view
• 100% width
• 100% height
Headless web browser
• No URL bar
• No decorations
• No zooming
• No text selection
6. Can I use HTML5, JS and CSS libraries I use
everyday?
9. When Cordova API is not enough...
Sometimes Cordova is not enough as is for our purposes
• unsupported feature
• heavyweight data processing is faster in native code
ex. images manipulation
• background processing is better handled natively
ex. files sync
• complex business logic
à You can develop a
Cordova plugin
10. Cordova plugins
Purpose:
To expose a Phone native functionality to the browser
This is done by developing
• a custom Native Component
it will be different for each platform
• a custom JavaScript API
it should be always the same
Mobile Web app
JavaScript
Plugin A
JavaScript
Plugin B
iOS
Plugin A
iOS
Plugin B
Native Platform
11. Cordova plugin architecture
Since the 3.0 version, Cordova has a slim core with only the very basic native to web bridge
technology
All other APIs are optionally installable
Plugins are installed and removed using the Cordova CLI instrument
Developers
Can compose a version of
Cordova suited to their
project needs
Cordova contributors
Can revision APIs
independently + it is easier
to upgrade and extend APIs
Users
Smaller and faster apps
12. Cordova plugin architecture
Cordova core is now
composed of 17 repos
Comparing it to the old plugin architecture...
http://phonegap.com/blog/2013/06/20/coming-soon-phonegap30/
14. Roadmap
• The Cordova framework
• Recurrent app architecture
• Cordova CLI
• Debugging Cordova applications
• My development environment
• Cordova APIs
15. Recurrent app architecture
The app acts as a client for user interaction
The app communicates with an application server to receive data
The application server handles business logic and communicates with a back-end data
repository
App
Application server
Data repository
16. The app
It generally uses the single-page application model
• the application logic is inside a single HTML page
• this page is never unloaded from memory
• data will be displayed by updating the HTML DOM
• data is retrieved from the application server using Ajax
17. The server
It is a classical web server
• server-side scripting language such as Java, .NET, PHP, etc…
• communication can be based on:
-
RESTful services (XML, JSON, etc.)
-
SOAP
• it performs business logic, and generally gets or pushes data from a separate repository
18. The data repository
It may be:
• a standard DB (even deployed in the same machine of the application server)
• an external API
Both application server and back-end repository can be provided as a service à BaaS
19. Roadmap
• The Cordova framework
• Recurrent app architecture
• Cordova CLI
• Debugging Cordova applications
• My development environment
• Cordova APIs
20. Cordova CLI
The main tool to use for the cross-platform workflow
It allows you to:
• create new projects
• add platforms
• build a project w.r.t. different platforms
• emulate a project on platform-specific emulators
• run a project on device
• include specific plugins into a project
CLI = Command-Line Interface
If you prefer to use platform-
specific SDKs, you can still use it
to initialize your project
21. Creates template project
• PATH
the folder that will contain your project
• ID
package identifier in reverse-domain style (optional)
• NAME
display name of the app (optional)
Project creation
22. The create command creates a
predefined project structure
• merges
a mirror of the www folder containing platform-specific assets
• platforms
platform specific projects (ex. an Eclipse project for Android, XCode for iOS)
• plugins
installed plugins (both JS files and native resources)
• www
contains your HTML, JS, CSS files
Project structure
config.xml contains core Cordova API
features, plugins, and platform-specific
settings. See here for the iOS values:
http://goo.gl/1CcmyL
23. With this command you add a target platform of your project.
The platform will appear as subfolder of platforms
containing the platform-specific project
mirroring the www folder
• PLATFORM_NAME
the name of the platform (e.g., ios, android, wp8)
Add platforms
If you do something like this:
cordova
platform
remove
ios
you are removing a specific platform
You can use an SDK such as Eclipse or
Xcode to open the project you created
24. This generates platform-specific code within the project's platforms subdirectory
• PLATFORM_NAME
the name of the platform to be built (e.g., ios, android, wp8)
Build the app
If you do not specify the
PLATFORM_NAME, Cordova will build for
all installed platforms
25. The emulate command will run the app on a platform-specific emulator
The run command will run the app on a previously setup device (e.g., connected via USB and
configured for being used as device for testing purposes)
• PLATFORM_NAME
the name of the platform to be built (e.g., ios, android, wp8)
emulate/run the app
26. This generates platform-specific code within the project's platforms subdirectory
• PLUGIN_ID
the id of the repository containing the source code of the plugin to be added to the project
add plugins
If you do something like this:
cordova
plugin
remove
PLUGIN_NAME
you are removing a specific plugin
The list of plugins can be found
here
http://plugins.cordova.io
If the plugin you want to add is
not in the cordova.io registry, you
can directly refer to the URL of his
GitHub repository
27. Sometimes it may happen to need different JavaScript code, CSS stylesheets or generic assets for
a specific platform
ex.
Android-specific CSS stylesheet
iOS-specific assets for managing the back button graphics
...
In these cases you can put the platform-specific assets into the merges/PLATFORM_NAME folder
Cordova’s build command will take care of integrating them in your deployed app for the specific
platform
Platform custom code
28. Roadmap
• The Cordova framework
• Recurrent app architecture
• Cordova CLI
• Debugging Cordova applications
• My development environment
• Cordova APIs
29. The killer app!
• Check console
• Breakpoints
• Update the DOM at run-time
• Access to all local DBs
• Network profiling
• CPU and memory profiling
• Monitor event listeners
• Monitor elements’ rendering time
30. Desktop Browser
• very quick
• very handy functions
• see Chrome’s Web Development Tools
• Breakpoints
PRO
• browsers’ small differences and bugs
• cannot test all Cordova’s specific functionalities
• you need Phonegap shims
CONS
32. Chrome Security Restriction
If you need to test your JSON calls from a local web app, you need to relax Chrome’s security policies
with respect to local files access and cross-domain resources access
• OSX
open
-‐a
Google
Chrome.app
-‐-‐args
“
-‐-‐disable-‐web-‐security“
• Windows
chrome.exe
-‐-‐disable-‐web-‐security
DO IT ONLY FOR
DEBUGGING!
33. Desktop Browser - Tools
Browser’s extension for window dimensions
Resolution Test
http://goo.gl/fQpbH
PhoneGap Shims, there are many, this is the most used:
PhoneGap-Desktop
https://github.com/jxp/phonegap-desktop
34. Ripple
• very quick
• can use Chrome’s Web Development Tools
• You can test Cordova’s API from the Desktop
• browsers’ small differences and bugs
• cannot test the interaction with external apps
PRO
CONS
It is based on Ripple, a Chrome
plugin for mobile dev
from Cordova 3.0.0, you need to use
the Ripple available at Apache
npm
install
-‐g
ripple-‐emulator
ripple
emulate
36. Simulator
• Officially supported by platform vendors
• You use the “real” device’s browser
PRO
• device’s performance is not considered
• this is iOS-specific
• Android’s emulator is a joke
• device’s capabilities are only simulated
CONS
37. On device
• accurate
• still handy
• real performance tests
• real browser tests
PRO
• Deployment takes some time (~6 seconds for iOS)
CONS
38. Remote Debugging
From iOS 6, Apple provided Mobile Safari with a remote web inspector
à You can debug your app by using the classical web inspector of Desktop Safari
It can connect both to
• The iOS emulator
• The real device
Since Android 4.4, this feature is
available via Chrome’s web dev kit
39. Remote Debugging for older platforms
Weinre http://people.apache.org/~pmuellr/weinre/docs/latest/
3 main components:
Debug Server
the HTTP server for debug data
Debug Target
the (web) app you are debugging
Debug Client
the Web Inspector user interface
Public debug server:
debug.phonegap.com
40. Debugging reference table
Make a favor to yourself,
don’t debug craftsman way:
console.log()
+
alert()
iOS
Android
Desktop Browser
Ripple
Device/emulator
Weinre
Safari Web
Inspector
X
Chrome Web
Inspector
X
41. Roadmap
• The Cordova framework
• Recurrent app architecture
• Cordova CLI
• Debugging Cordova applications
• My development environment and workflow
• Cordova APIs
42. My development environment
Sublime Text 2
http://www.sublimetext.com
SublimeText Package Control
http://wbond.net/sublime_packages/package_control
Sidebar Enhancer
https://github.com/titoBouzout/SideBarEnhancements
HTML Prettify
https://github.com/victorporof/Sublime-HTMLPrettify
SublimeLinter
https://github.com/SublimeLinter/SublimeLinter
JsFormat
https://github.com/jdc0589/JsFormat
43. My development workflow
1. Code & test using Ripple (very quick)
Quick sketch of layout and complete business logic
2. Run and debug in the XCode simulator (handy & accurate)
Complete the UI for iOS devices and ~99% confidence about business logic
3. Run and debug on devices
(complete control & confidence)
Complete the UI for Android too and ~99% confidence about business logic
44. Remarks
These are MY development environment and development workflow
There are many tools and IDEs out there
à Consider this as a starting point & feel free to use the ones that fit well with your
attitude
45. Roadmap
• The Cordova framework
• Recurrent app architecture
• Cordova CLI
• Debugging Cordova applications
• My development environment
• Cordova APIs
• Accelerometer
• Compass
• Capturing audio and video & camera
• Media playback
• Contacts
• Connection
• Device information
• Events
• Notification
46. Accelerometer
navigator.accelerometer
It is a global object that captures device motion in the x, y, and z directions
You can call 3 methods on it:
getCurrentAcceleration
watchAcceleration
clearWatch
Accelerometer
48. watchAcceleration
var
watchID
=
navigator.accelerometer.watchAcceleration(win,
fail,
[options]);
It gets the device's current acceleration at a regular interval
win
callback function with an Acceleration parameter, it is called at regular intervals
fail
error callback
options
the interval is specified in the frequency parameter
50. The Acceleration object
It contains accelerometer data captured at a specific point in time
Properties
x (Number): Amount of acceleration on the x-axis. (in m/s^2)
y (Number): Amount of acceleration on the y-axis. (in m/s^2)
z (Number): Amount of acceleration on the z-axis. (in m/s^2)
timestamp (DOMTimestamp): Creation timestamp in milliseconds
these values include the effect
of gravity (9.81 m/s^2)
51. Accelerometer example
var
options
=
{
frequency:
3000
};
var
watchID
=
navigator.accelerometer.watchAcceleration(win,
fail,
options);
function
win(acc)
{
if((acc.x
==
0)
&&
(acc.y
==
0)
&&
(acc.z
==
9,81))
{
console.log(“I
am
on
a
table”);
stop();
}
else
{
console.log(“Please,
leave
me
on
the
table”);
}
}
function
fail()
{
console.log(“error”);
}
function
stop()
{
if(watchID)
{
navigator.accelerometer.clearWatch(watchID);
watchID
=
null;
}
}
53. Accelerometer
navigator.device.capture
Provides access for capturing directly from the device
Audio
Image
Video
Capturing Audio and Video
Omogeneous APIs between audio, image, and video
capturing based on a W3C specification
54. Supported formats
The navigator.device.capture
object contains the supported formats it can record in
three properties
supportedAudioModes
The audio recording formats supported by the device
supportedImageModes
The recording image sizes and formats supported by
the device
supportedVideoModes
The recording video resolutions and formats
supported by the device
They all contain an array of
ConfigurationData objects
55. The ConfigurationData object
It is used to describe media capture modes supported by the device
Properties
type (String)
the string in lower case representing the media type
height (Number)
the height of the image or video in pixels
width (Number)
the height of the image or video in pixels
ex.
• video/3gpp
• video/quicktime
• image/jpeg
• audio/amr
• audio/wav
56. Supported format example
var
imageModes
=
navigator.device.capture.supportedImageModes;
for(var
i=0;
i
<imageModes.length;
i++)
{
var
mode
=
imageModes[i];
console.log(mode.type);
console.log(mode.height);
console.log(mode.width);
}
57. Audio capture
captureAudio(win,
[fail],
[options]);
Starts the audio recorder app and returns information about captured audio clip files
win
callback function with an array of MediaFile parameter
fail
error or when the users cancels the capture operation before capturing any media file
options
audio capture options
It uses the device's default
audio recording app
The operation allows the device
user to capture multiple
recordings in a single session
58. Options
limit (Number)
the maximum number of audio clips the user can record in a single capture operation
duration (Number)
the maximum duration of an audio sound clip, in seconds
not supported in iOS
not supported in Android
59. Audio capture example
var
options
=
{
limit:
2,
duration:
5
};
navigator.device.capture.captureAudio(win,
fail,
options);
function
win(mediaFiles)
{
var
i;
for
(i=0;
i<mediaFiles.length;
i++)
{
console.log(mediaFiles[i]);
}
}
function
fail(error)
{
console.log(‘Error
with
code:
'
+
error.code);
}
60. Image capture
captureImage(win,
[fail],
[options]);
Start the camera application and return information about captured image file(s)
win
callback function with an array of MediaFile parameter
fail
error or when the users cancels the capture operation before capturing any media file
options
image capture options
It uses the device's
default camera app
The operation allows the device
user to capture multiple images
in a single session
62. Video capture
captureVideo(win,
[fail],
[options]);
Start the camera application and return information about captured video file(s)
win
callback function with an array of MediaFile parameter
fail
error or when the users cancels the capture operation before capturing any media file
options
video capture options
It uses the device's
default camera app
The operation allows the device
user to capture multiple videos
in a single session
63. Options
limit (Number)
the maximum number of videos the user can take in a single capture operation
duration (Number)
the maximum duration of each video, in seconds
not supported in iOS
64. The MediaFile object
A MediaFile encapsulates properties of a media capture file
Properties
name (String): the name of the file, without path information
fullPath (String) : the full path of the file, including the name
type (String): The file's mime type
lastModifiedDate (Date): the date and time that the file was last modified
size (Number): the size of the file, in bytes
65. MediaFile format data
mediaFile.getFormatData(win,
[fail]);
It is used to get information about the format of a captured media file
win
callback function with a MediaFileData parameter
fail
error callback
66. The MediaFileData object
Encapsulates format information about a media file
Properties
codecs (String): The actual format of the audio and video content
bitrate (Number) : The average bitrate of the content (zero for images)
height (Number): the height of the image or video in pixels (zero for audio clips)
width (Number): the width of the image or video in pixels (zero for audio clips)
duration (Number): the length of the video or sound clip in seconds (zero for images)
67. Capture Error
Encapsulates the error code resulting from a failed media capture operation
It contains a pre-defined error code
CaptureError.CAPTURE_INTERNAL_ERR
CaptureError.CAPTURE_APPLICATION_BUSY
CaptureError.CAPTURE_INVALID_ARGUMENT
CaptureError.CAPTURE_NO_MEDIA_FILES
CaptureError.CAPTURE_NOT__SUPPORTED
68. Camera
navigator.camera
It provides an home-grown API for capturing images from the device’s default camera
application
It is developed in-house by Cordova in order to provide more options to developers
Methods:
getPicture
cleanup
69. Getting pictures from the camera
camera.getPicture(win,
[fail],
[options]);
Takes a photo using the camera or retrieves a photo from the device's album
win
callback function with a image data parameter
fail
error callback
options
capture parameters
The result of getPicture can be:
• a base64 encoded string
• the URI of an image file
Encoding the image using Base64
can cause memory issues on some
devices
76. Camera cleanup
camera.cleanup(win,
[fail]);
Removes intermediate photos taken by the camera from temporary storage
win
callback function
fail
error callback
Valid only when
• the value of Camera.sourceType === Camera.PictureSourceType.CAMERA
• the Camera.destinationType === Camera.DestinationType.FILE_URI
iOS only
77. Camera example
var
options
=
{
quality:
50,
destinationType:
destinationType.FILE_URI,
sourceType:
pictureSource.PHOTOLIBRARY
});
navigator.camera.getPicture(win,
fail,
options);
function
win(imageURI)
{
var
element
=
$(“#block”);
element.src(imageURI);
}
function
fail
(error)
{
console.log(error);
//
this
is
provided
by
the
device’s
native
code
}
78. Accelerometer
Media
The Media object provides the ability to record and play back audio files on a device
Media playback
It does not adhere to any W3C
specification, it is just a convenience API
provided by Cordova
79. The Media object
var
media
=
new
Media(src,
win,
[fail],
[status]);
src (String): A URI containing the audio content
The URI can be local or can be a URL addressable by a standard HTTP get request
win: callback executed when the object executes a play, record, or stop action
fail: error callback
status: callback executed to indicate status changes
Media status possible parameters:
• Media.MEDIA_NONE = 0;
• Media.MEDIA_STARTING = 1;
• Media.MEDIA_RUNNING = 2;
• Media.MEDIA_PAUSED = 3;
• Media.MEDIA_STOPPED = 4;
81. Media Error
Encapsulates the error code resulting from a failed media operation
It contains a pre-defined error code
MediaError.MEDIA_ERR_ABORTED
MediaError.MEDIA_ERR_NETWORK
MediaError.MEDIA_ERR_DECODE
MediaError.MEDIA_ERR_NONE_SUPPORTED
82. Media example
var
media
=
new
Media(“http://path/to/mp3”,
win,
fail);
//
every
second
we
log
the
position
var
myTimer
=
setInterval(function
()
{
media.getCurrentPosition(
function
(position)
{
if
(position
>
-‐1)
{
console.log((position)
+
"
seconds");
}
});
},
1000);
function stopAudio() {
if (media) {
media.stop();
}
clearInterval(myTimer);
myTimer = null;
}
83. Accelerometer
navigator.contacts
A global object that provides access to the device contacts DB
You can call 2 methods on navigator.contacts
• contacts.create
• contacts.find
Contacts
84. Creating contacts
navigator.contacts.create(properties);
One of the few synchronous functions of Cordova
It that returns a new Contact object
The properties parameter is a map of properties of the new Contact object
To persist the Contact object to the device, you have to invoke the Contact.save method
85. The Contact object
It contains all the properties that a contact can have
Every platform has its own quirks,
you better check them on the
Cordova documentation
86. The Contact object
A contact object provides the following methods:
clone()
returns a new Contact object that is a deep copy of the calling object, its id property is null
remove(win, fail)
removes the contact from the device contacts database
save(win, fail)
saves a new contact to the device contacts database
updates an existing contact if a
contact with the same id already exists
87. Create contact example
var
contact
=
navigator.contacts.create({
displayName:
“Ivano“
});
var
name
=
new
ContactName();
name.givenName
=
“Ivano“;
name.familyName
=
“Malavolta“;
contact.name
=
name;
contact.birthday
=
new
Date(“19
July
1983);
contact.save(win,
fail);
function
win(contact)
{
console.log(Save
Success);
};
function
fail(contactError)
{
console.log(Error
=
+
contactError.code);
};
88. Finding contacts
navigator.contacts.find(fields,
win,
fail,
options);
It queries the device contacts database and returns an array of Contact objects
fields: contact fields to be used as search qualifier. Only these fields will have values in the
resulting Contact objects
win: callback function with the array of contacts returned from the contacts database
fail: error callback
fail: search options to filter contacts
89. Contact fields
Specifies which fields should be included in the Contact objects resulting from a find
operation
var
fields
=
[displayName,
name];
//
or
[“*”]
navigator.contacts.find(fields,
win,
fail);
function
win(contacts)
{
console.log(‘ok');
};
function
fail(err)
{
console.log(err.code);
};
90. Contact find options
Contains properties that can be used to filter the results
filter (String)
the search string used to find contacts, a case-insensitive, partial value match is applied
to each field specified in the contactFields parameter
multiple (Boolean)
determines if the find operation should return multiple contacts
91. Contact Error
Encapsulates the error code resulting from a failed lookup operation in the contacts DB
It contains a pre-defined error code
ContactError.UNKNOWN_ERROR
ContactError.INVALID_ARGUMENT_ERROR
ContactError.TIMEOUT_ERROR
ContactError.PENDING_OPERATION_ERROR
ContactError.IO_ERROR
ContactError.NOT_SUPPORTED_ERROR
ContactError.PERMISSION_DENIED_ERROR
92. Contact find example
var
options
=
new
ContactFindOptions();
options.filter
=
“Ivano;
options.multiple
=
true;
filter
=
[displayName,“birthday];
navigator.contacts.find(filter,
win,
fail,
options);
function
win(contacts)
{
for
(var
i=0;
icontacts.length;
i++)
{
console.log(contacts[i].displayName);
}
};
function
fail(contactError)
{
console.log(Error
=
+
contactError.code);
};
94. Connection.type
Encapsulates the error code resulting from a failed lookup operation in the contacts DB
Values:
Connection.UNKNOWN
Connection.ETHERNET
Connection.WIFI
Connection.CELL_2G
Connection.CELL_3G
Connection.CELL_4G
Connection.CELL
Connection.NONE
iOS can't detect the type of cellular network
connection, it will return always Connection.CELL_2G
96. Device properties
A device object provides the following properties:
device.model
the name of the device's model or product (ex. “iPad 2”, “iPhone 5,1”, etc.)
device.cordova
the version of Cordova running on the device
device.platform
the devices’ operating system (ex. “Android”, “iOS”, etc.)
http://theiphonewiki.com/wiki/Models
97. Device properties
device.uuid
a unique identifier of the user’s device (UUID)
Android: a unique 64-bit integer generated at device’s first boot
iOS: a string of hash values created from multiple hardware identifies
device.version
the OS version of the device (ex. “4.1”, “2.2”, etc.)
in iOS it is not reliable: The uuid on iOS is not unique to a
device, but varies for each application, for each installation
99. Accelerometer
An event is an action that can be detected by your JavaScript code
In traditional JS programs, any element of the page can have certain events
ontouchstart, onclick, ...
To use any event, you’ll want to use an event listener
document.addEventListener(EVENTNAME,
callback,
false);
Events
100. Cordova events
• deviceready
• pause, resume
• online, offline
• batterycritical, batterylow, batterystatus
• backbutton, menubutton, searchbutton
• startcallbutton, endcallbutton
• volumedownbutton, volumeupbutton
these work on Blackberry 10 only
Android buttons events
101. deviceready
It is the most important in event in a Cordova app
Once deviceready is fired, you know two things:
• The DOM has loaded
• the Cordova native API are loaded too
102. App lifecycle events
Based on two main events:
pause
fires when an application is put into the background
resume
fires when a paused application is put back into the foreground
resign, active
iOS-specific events that are triggered when the users locks/unlocks the device
In the pause handler, any calls to the Cordova API or to native
plugins that go through Objective-C do not work,, they are
only processed when the app resumes.
103. Connection events
Based on two main events:
online
fires when the application's network connection changes to being online
(that is, it is
connected to the Internet)
offline
fires when the application's network connection changes to being offline
(that is, no Internet connection available)
104. Battery events
Based on two main events:
batterycritical
fires when the battery has reached the critical level threshold
batterylow
similar to batterycritical, but with a higher threeshold
batterystatus
fires a change in the battery status is detected
This value is device-specific
The battery status must
change of at least 1%
105. Battery events
The handler of a battery event is always called with an object that contains two properties:
level (Integer)
The percentage of battery (0-100)
isPlugged (Boolean)
true if the device is plugged to the battery charger
106. Accelerometer
Allows yout to provide feedback to the user
• alert
• confirm
• prompt
• beep
• vibrate
Notifications
107. Alert
navigator.notification.alert(message,
callback,
[title],
[button]);
Shows a custom alert to the user
• message: the string to present to the user
• callback: the function invoked when the user taps on the button
• title: title of the alert (default is “Alert”)
• button: name of the confirm button (default is “Ok”)
108. Confirm
navigator.notification.alert(message,
callback,
[title],
[buttons]);
Similarly to alert, it shows a customizable confirmation dialog to the user
• message: the string to present to the user
• callback: the function invoked when the dialog is dismissed
it takes a “buttonIndex“ parameter to know which button has been pressed (it starts from 1)
• title: title of the dialog (default is “Confirm”)
• buttons: comma-separated string containing the button labels (default is “Ok, Cancel”)
109. Prompt
navigator.notification.prompt(message,
callback,
[title],
[buttons],
[text]);
It shows a customizable dialog with a prompt to the user
• message: the string to present to the user
• callback: the function invoked when the dialog is dismissed
it takes a “results“ parameter to know which button has been pressed (it starts from 1) and
the
text entered by the user
• title: title of the dialog (default is “Prompt”)
• buttons: comma-separated string containing the button labels (default is “Ok, Cancel”)
• text: default text in the input box
110. Beep
navigator.notification.beep(times);
It playes a beep sound
• times (Number): the number of times to repeat the beep
Android plays the default Notification ringtone specified
under the Settings/Sound Display panel
113. What is not covered in this lecture
• Cordova Native Platform Dev workflow Plugman
• Cordova’s secondary APIs:
• Splashscreen, InAppBrowser, Globalization
• Geolocalization
• Local storage File API
• PhoneGap Build
• How to develop a plugin
We will have dedicated
lectures on these