App Stores & Selling Your App

App Stores & Selling Your App

week 2 to 11/Week10 (2).pptx

COIT20270 Application Development for Mobile Platforms Week 10: App Stores and Marketing

Dr. R. Balsys, CQU, 2018.

Source: Beginning Mobile Application Development in the Cloud, R. Rodger, 2012, ch. 13 pp. 435-441.

Week 10 – App Stores & Selling Your App

This week we:

Create icons & splash screens for Apps

Prepare screenshots and App metadata

Understand AppStore terms and conditions

Determine how to develop a marketing plan

Understand freelance work

Understand how to use apps for business promotion

Use both standard and guerilla marketing tactics

Learn about building communities around our apps

2

CQU – COIT20270 Application Development for Mobile Platforms

Icons and Splash screens

Icons are visually associated with your app and need to be well designed and aesthetically pleasing

They should be designed by a graphics designer and a number of different sized .png images are required

You full app also requires a “splash” screen

Screenshots of the main screens of your app are required for submission to Apple’s App Store and the Android marketplace

On Android you can get a screenshot by holding the Back key and also holding the Home key down for a few seconds or by taking a screenshot from the emulator

3

CQU – COIT20270 Application Development for Mobile Platforms

App Metadata

When submitting an App to a store the following information is required

A short textual description of the app

The category to which your app belongs

Keywords relevant to search results for the app

Supporting website address for the app

Any promotional graphics or video

A change log for the app

A content rating

The market geographical regions

4

CQU – COIT20270 Application Development for Mobile Platforms

Working With the App Store

App must be submitted and accepted before they are available

Apps need to be digitally signed

The general business model is that the store receives 30% of either the sales price or the subscription fee, to be paid every 30 days

In-app advertising revenue appears to be exempt from the terms

You need to read the terms and conditions that apply to the use of both the Android Marketplace and Apple’s App Store

5

CQU – COIT20270 Application Development for Mobile Platforms

Determining a Marketing Strategy

A number of questions need to be answered to define a marketing strategy. Specifics include:

Demographics, what are the sex, ages and incomes of target audience

Needs, what user need does the app fill?

Cost of promotion, how much will advertising cost relative to the market size?

How will the app be used?

You need to test and verify that your answers are correct

6

CQU – COIT20270 Application Development for Mobile Platforms

Building Apps for Other

Most likely you will be building apps for your employer or on a contract basis for someone. You should build for success

Explain to clients the importance of usability, meeting app store guidelines, common interface conventions, the economics of cloud hosting, and how to launch and market the app

Make sure you have a documented contract for work, have received a down-payment before starting and invoice your time and costs as they occur

Offer fixed rate or standard time and materials day rates. The fixed price should be about 50% extra to cover time blow-outs in development

Offer a discount for early payment

7

CQU – COIT20270 Application Development for Mobile Platforms

Promoting Your Business

A number of strategies can be used to promote your business

Subscription Based Services. Here the app is distributed for free but a monthly subscription is charged for services. The key is that the service must be of value to the customer or they will not pay

Offering free versions of the app. These all limit the functionality of the app. The idea is the user can get a feel for the app. The fully featured app is then purchased

If your business already has a commercial presence then the app can be promoted through those channels

Selling in-app Ads. If enough people use your app then selling advertising space in the app can be a useful revenue stream

Premium services can be offered at a higher rate

In-app purchases. In this model the app is free or almost so, revenue is gained by selling items, eg games offering magical items for real $’s

Cross application apps are developed once but deployed across multiple devices thus increasing market base and potential revenue

8

CQU – COIT20270 Application Development for Mobile Platforms

Selling Apps

You need to be clear on why you are developing apps and whether you are building reputation or trying to make money

Coding plays a relatively small part in the time involved in selling apps. Most of your time will be spent marketing the app

You need to set goals such as

What apps for what audience

How much income per month are you targeting

Only build what can be done. Plan for apps that take about a month to develop

Consider how you will pay the bills before your income starts turning up

Set timelines for the progress in 1st 3 months and stick to it

Use a spreadsheet to model all your expenses and expected income

9

CQU – COIT20270 Application Development for Mobile Platforms

Embracing Marketing

You need to understand marketing. If you want to make money then your target demographic must be able to buy the app

You need to understand where your market goes to find information and make sure your product information can be found there

Each app must be continually updated and marketed

You must either develop 1 or 2 high value apps or, more likely, develop a large number of less costly apps

10

CQU – COIT20270 Application Development for Mobile Platforms

Marketing Tactics

There are a large number of apps out there, getting noticed is hard

You need to keep track of every $ spent on an app and your time spent on an app. Use a spreadsheet for this and convert your time into dollars on a contracting basis. Monitor this on a weekly basis and if an app does not pay then consider spending your time elsewhere

Only advertise in arenas where you know you will get customers from

Use real people to help you user test your ideas. From this develop your marketing ideas

Plan your marketing campaign to last months, using advertising, blogs and other means for this

11

CQU – COIT20270 Application Development for Mobile Platforms

Standard Tactics

Create a website to go with your app. It allows you to market and service your customers

Have a forum on the website and continuously mine the forum for useful information

Use social forums to spread the message about your app

Create a mailing list forum for you app and use this to spread marketing information

Develop promotional material for your app and use it. Use different promotional material and track the effectiveness of it

Give your app to well known bloggers in the hope they will write about it

You can use traditional media for advertising as well

Submit your apps to mobile app competitions

Provide a free lite version of your app

Price your app competitively

12

CQU – COIT20270 Application Development for Mobile Platforms

Expensive Tactics

Advertise your apps on on app directory site where the ad will be seen

You can target high readership content sites and or advertise within other popular apps

Create a sustained media campaign targeting social media and major content sites

Use an advertising agency to do the promotion for you

You can also use offline advertising such as radio, TV and newspapers to advertise

13

CQU – COIT20270 Application Development for Mobile Platforms

Guerilla Tactics

A young individual is unlikely to have much money to put into advertising, so use non-traditional ways of getting your message out

Build a community around your app. Forums where you actively participate with your users is one way to do this

You can start a forum with your test users and encourage them to bring their friends along

You can offer in-app rewards to people for helping marketing your product

You can offer rewards to bug-hunters to find bugs in your code

Have a social media sharing page in your app users can use to connect to social sites

14

CQU – COIT20270 Application Development for Mobile Platforms

…Guerilla Tactics

Direct potential customers to the app websites where screenshots, videos etc., can help them make the buy decision

Ignore piracy – pop up a “please buy” message occasionally to encourage purchase

Try to develop a high value content blog for your app

Provide links to your apps and app website in your email signature

15

CQU – COIT20270 Application Development for Mobile Platforms

week 2 to 11/Week11.pptx

COIT20270 Application Development for Mobile Platforms Week 11: Researching Mobile Systems

Dr. R. Balsys, CQU, 2018.

Week 11 – Research vs. Scholarship

Scholarship consists of collecting books and articles with view to study or interpret the data, e.g. going to the library to study information for an essay

Research is a process of inquiry that involves the purposeful, systematic and rigorous collection, analysis and interpretation of data to gain new knowledge

Research needs to be differentiated from scholarship

2

CQU – COIT20270 Application Development for Mobile Platforms

Why study (a bit of) research in Mobile systems?

As with any new technology we must learn the pro’s and con’s of the technology. To realistically determine these requires application of the scientific method

To be able to critique a technology means we need to understand philosophy so we can get to the meaning of things

It is common to use surveys or other instruments to gain feedback or in usability studies, and mobile devices represent an opportunity for this

3

CQU – COIT20270 Application Development for Mobile Platforms

What is Science?

The Oxford dictionary defines science as:

The state of fact or knowing

Knowledge obtained by study

A particular branch of knowledge

There are two main ways of knowing:

Empiricism – which is through trust in the information gained through the use of the senses

Rationalism – which is the use of the mind to infer relationships and understanding

We need to introduce and define a group of words to help us discuss the philosophy of the sciences

4

CQU – COIT20270 Application Development for Mobile Platforms

4

Important terms- Philosophy

According to Bertrand Russel (1946) “Philosophy, as I understand the word is something intermediate between theology and science. Like theology, it consists of speculation on matters as to which definite knowledge has, so far, been unobtainable; but like science, it appeals to human reason rather than authority. All definite knowledge – so I would contend – belongs to science; all dogma belongs to theology. But between science and theology lies a No Man’s Land, … this No Man’s Land is philosophy”

Philosophy has three main branches; logic, metaphysics and ethics

5

CQU – COIT20270 Application Development for Mobile Platforms

5

Important terms- Metaphysics

Metaphysics is concerned with being and knowing, it can explore the supra-sensible, it concerns itself with 1st principles, concepts such as being, substance, essence, time, space, causation etc.

Metaphysics has two main branches;

Ontology – the differentiation between the real and the appearance, the assumptions underlying theories or systems of ideas

Epistemology – is the theory of methods or grounds for knowledge

6

CQU – COIT20270 Application Development for Mobile Platforms

6

Important terms- Ethics and paradigm

Ethics is concerned with moral principles, what is right or wrong, what ought to be done and what must not be done

According to Kuhn, 1970, “a paradigm can be considered a set of ontological and epistemological assumptions, theories and methods which a group of researchers accept and share as the best way to develop knowledge”

7

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

7

Research Paradigms

Three research paradigms can be identified:

Logico-empirical paradigm – the traditional scientific method as practiced in the natural sciences

Interpretive paradigm as practiced by some psychologists, nurses and anthropologists

Critical paradigm which is research with the intent of political empowerment and human emancipation

8

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

8

Historical Overview – Empiricism

The Greek philosophers Plato and Aristotle where the best known philosophers from antiquity.

Copernicus, Galileo and Newton founded empiricism. Empiricists believe that all knowledge is based on experience and denies idealism that posits that the mind already has pre-existing ideas and concepts

Famous empiricists include Newton (1642-1727), John Locke (1632-1704) and David Hume (1711-1776). In the 19th century Auguste Comte (1798-1857) and Charles Darwin (1855-1882) where major proponents of empiricism

9

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

9

Historical Overview – Rationalism

In the 18th century Descartes, Spinoza and Leibniz developed the rationalist tradition

Rationalism includes a belief that

By reason alone the nature of existence can be found

That knowledge forms a single system

That this system is deductible in character

That everything is understandable within this single system

10

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

10

…Historical Overview

Kant’s philosophy is recognised as a turning point for philosophy. His position is that we construct knowledge by the interaction of sense perceptions and judgment which makes sense of the sense data

Hegel developed this to say that knowledge is discovered by the contemplative faculty of the mind, the universe exists as a complex whole (holism) and he rejects reductionism

Husserl founded phenomenology which involves suspending assumed knowledge so that one is able to observe in an ideal, disinterested scientific fashion and can questions ones own beliefs and interpretations

11

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

11

Historical Overview – logico-empiricism

By the 1930’s a group called the Vienna Circle published a manifesto that was later modified by Carl Popper and others

The central tenants are that there is a single reality out there; science depends upon repeatable experiments; that theory and empirical observations are separate entities; that causality is linear in that event E can be deduced from initial conditions and general laws; that reliable knowledge of a field or phenomena reduces to particular instances or patterns of sensation; the goal of positivist science is prediction and control of the physical or social world and finally there is a need to demonstrate reliability and repeatability of measurements

12

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

12

Logico-empiricism – Criticisms

A number of criticisms of logico-epiricism have been made particularly the application of a single scientific method, that facts and theories can be separated, and “facts” can prove our theories

This lead to the development of post-positivism which takes into account these criticisms, it no longer attempts to find cause/effect relationships, but that rather truth is imperfect and probabilistic

Post-positivists say there are no context free universal facts, and whilst acknowledging that people cannot be totally objective, they can be as objective as humanely possible

13

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

13

Interpretive/Constructivist & Critical Theory

Interpretive/Constructivist paradigm seeks answers about meaning, about uncommon elements, it seeks to interpret the observations

Critical theory provides guidelines to bring about change, applies to humans and not things, and so is not predicable. Theory is about a critique of power and relationships, about determining the way forward by changing ideologies and power relationships

14

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

14

A Model of the Research Process

Generally the research process follows a number of steps

Development of a theory

Develop testable ideas from the theory

Work out how to test the theory and devise a set of task to be carried out to do this

Collection of the data

Interpret the results and reflect back on how these support or otherwise the theory

15

CQU – COIT20270 Application Development for Mobile Platforms

Research Types

Two broad approaches to research can be identified in the literature – these are qualitative and quantitative research

Quantitative research implies quantitative data can be collected and statistical relationships can be found

Qualitative research attempts to measure things where interpretation is required, are usually qualified by words, not numbers, and provide insights into possibilities

16

CQU – COIT20270 Application Development for Mobile Platforms

16

week 2 to 11/Week5 (4).pptx

COIT20270 Application Development for Mobile Platforms Week 5: Displaying Pictures and Menus, Data Persistence

Dr. R. Balsys, CQU, 2016.

Source: Beginning Android Programming with Android Studio, J.F. DiMarzio, 2016

Week 5 – Displaying Pictures and Menus

Objectives, to :

use image views to display pictures

Use menu’s with views

Examine some additional views

2

CQU – COIT20270 Application Development for Mobile Platforms

Using Image Views to Display Pictures

You display images with ImageView, Gallery, ImageSwitcher and GridView views

An ImageView is used to display an individual image

The Gallery view displays images as a center-locked horizontally scrolling list of images

The ImageSwitcher view is used when you wish to apply animation or transitions when moving from one image to another

The GridView shows images as a two dimensional array of rows and columns of images

3

CQU – COIT20270 Application Development for Mobile Platforms

Using Menu’s With Views

There are two main types of menus in Android

Options menu – activated using the keyboard Menu button and it displays menus for the current activity

Context menu – displays information about the current view in an activity when the user taps and holds on the view

The way menu’s are created and handled in Android 6 and greater has changed and is different to that given in the text

4

CQU – COIT20270 Application Development for Mobile Platforms

4

The Menu XML file

An XML defining the menu items is added as an XML file to the projects res/menu folder

The menu items should be contained within

<menu xmlns:android=”http://schemas.android.com/apk/res/android“>

 

</menu>

All menu items are defined within <item> </item> tags

As a minimum the item need the following options

android:id – identifier of the item

android:orderInCategory – the position of the item in the menu, higher goes first

android:title – the text of the menu item

5

CQU – COIT20270 Application Development for Mobile Platforms

5

The Menu Inflater

The onCreateOptionsMenu() is called when the Menu is drawn

Call getMenuInflater().inflate(R.menu.menu_main, menu);

and then return true;

You should replace menu_main with the name of the xml file you created your menu resource in

6

CQU – COIT20270 Application Development for Mobile Platforms

6

The onOptionsItemSelected method

The onCreateOptionsMenu() is called when the Menu is drawn

Call getMenuInflater().inflate(R.menu.menu_main, menu);

and then return true;

You should replace menu_main with the name of the xml file you created your menu resource in

7

CQU – COIT20270 Application Development for Mobile Platforms

7

Context Menu

To associate a context menu with a view you call the setOnCreateContextMenuListener() on the view

The item to associate the context menu with uses the setOnCreateContextMenuListener() to listen for any tap and holds on the view

You override the onCreateContextMenu() method and call your CreateMenu() method within it

8

CQU – COIT20270 Application Development for Mobile Platforms

Get student to Google epistemological

8

Data Persistence

Objectives, to :

Save and load data with user preferences

Persist data to files

Create and use databases

9

CQU – COIT20270 Application Development for Mobile Platforms

Saving and Loading User Preferences

To save data objects you can

Write the objects to a file

Save the object to a database

Use a SharedPreferences object

To use a SharedPreferences object you save a name/value pair to SharedPreferences and this is then saved into an XML file for you

10

CQU – COIT20270 Application Development for Mobile Platforms

Accessing Preferences in an Activity

You 1st need to create a myapppreferences.xml file to use for saving your data

Within this xml file you need to create key:value pairs for the data you wish to save

Create an activity that extends the PreferenceActivity class and call the addPreferencesFromResource() method to load the xml file containing the preferences

11

CQU – COIT20270 Application Development for Mobile Platforms

Retrieving and Modifying Preference Values

To make use of preferences you use the SharedPreferences class

The getSharedPreferences() method is used to get an instance of the SharedPreferences class using the name of the XML preferences file

You then create a SharedPreferences.Editor() object and use a putString() method to change the value of a string preference

To save the change to the XML file you use the commit() method

12

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the files working and discuss how they work

12

Changing the Default Name of a Preferences File

Using the PreferenceManager class you can call a getPreferenceManager() method and then set the instance of this to use a new name by calling the setSharedPreferenceName() and passing in the new name

13

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

13

Persisting Data to Files

To store data to files use the java.io package

You can write data to the devices internal store by

Writing text to a file using the FileOutputStream class and the openFileOutput() method with MODE_WORLD_READABLE (public read access), MODE_PRIVATE (private access), MODE_APPEND or MODE_WORLD_WRITEABLE (public write access)

To convert a character stream to a byte stream create a OutputStreamWriter instance using OutputStreamWriter() and then use the write() method to write to the file. Remember to flush() and close() the file

14

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

14

…Persisting Data to Files

You can read data from the devices internal store by

using the FileInputStream class and the openFileInput() passing the file name as an input parameter. Then use the instance of the FileInputStream to create a new InputStreamReader()

The input file is read in blocks of READ_BLOCK_SIZE bytes into a character array buffer you create. The read() method is used for this. read() returns -1 when the end of file is reached

15

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

15

Saving to External (SD card) Storage

Use the getExternalStorageDirectory() method to get a File object that points to your SD card’s path

To write to the SD card you then create a new directory using the previously found path using mkdirs()

You can then use the previously discussed FileOutputStream() method to write objects to the file

16

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

16

…Saving to External (SD card) Storage

To load data from the SD card use the path and filename approach used to write to the file and use a FileInputStream object instance along with an InputStream instance to read from the file

In order to write to a file you need to set the WRITE_EXTERNAL_STORAGE permission in your Android.Manifest file

17

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

17

Choosing a Storage Option

If you have data that can be represented using name:value pairs then use the SharedPreferences approach to store your data

If your data is not in easily put into name:value pairs and is not going to be shared with other apps then use internal storage to save your data

If your data is to be shared with other apps or users then use the SD card storage option

18

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

18

Using Static Resources

You can add files to your projects res/raw folder. These files are then usable in your app

Use the getResources() method to return a Resources object to get access to the file in res/raw

The resource ID is used to identify the required resource. It is the name of the file in res/raw without its extension

19

CQU – COIT20270 Application Development for Mobile Platforms

Creating and Using Databases

Using a relational database to store tables of data is efficient as database queries can be used to retrieve the data

Android uses the SQLite database system to provide access to a database, only to the app that created it

The created database is stored in the /data/data/<package_name>/databases folder

20

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the files working and discuss how they work

20

Creating a DBAdapter Helper Class

It is a good idea to create a helper class to create, open, close and use a SQLite database

A database has a name, tables and columns

You need to create constants to name the fields of your database

The DATABASE_CREATE constant contains the SQL statements for creating the table of the database

Within your DBAdapter class create a DatabaseHelper class that extends SQLiteOpenHelper

21

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

21

…Creating a DBAdapter Helper Class

Override the onCreate() method to create the new database

Override the onUpgrade() method for use when the database is upgraded

You then define methods to use for opening, closing and adding, deleting or updating rows in the table

Android uses the Cursor class to return values from queries

ContentValues object is used to store name:value pairs using its put() method

22

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

22

CRUD Operations on the Database

As an example we will look at adding contacts to the contacts database

Use the DBAdapter class to create a new instance of the DBAdapter class

To retrieve contacts in the contacts table use the getAllContacts() method. This returns a Cursor object.

You can use the moveToFirst() and moveToNext() methods to examine each contact in turn. The contact details are found by calling DisplayContact() on the cursor object

23

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

23

…CRUD Operations on the Database

To retrieve a single contact use its ID and call the getContact() method to get the details which is returned in a Cursor object

To update a contact call the updateContact() method passing the ID as the 1st parameter

To delete a contact use the deleteContact() method with the contact ID as the parameter

To upgrade a new database to a new one change the DATABASE_VERSION field in the DBAdapter class to a higher value than the old one. This deletes the old table, ready for the new table to be created from an existing one or otherwise

24

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

24

Pre-creating a Database

Often the database is pre-created at design time and used at run-time

Tools are used to create the initial database, such as that at sourceforge.net/projects/sqlitebrowser. This tool allows you to visually create the fields for the database and populate the fields with values

The database is copied into the assets folder of your project. When the application is created you copy the database in the assets folder into the /data/data/<project_name>/databases folder if it does not already exist. You can then use it as before

25

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate the file working and discuss how it works

25

week 2 to 11/Week6 (3).pptx

COIT20270 Application Development for Mobile Platforms Week 6: Content Providers

Dr. R. Balsys, CQU, 2018.

Source: Beginning Android Programming with Android Studio, J.F. DiMarzio, 2016

Content Providers

Objectives, to :

share data in Android

use a content provider

CQU – COIT20270 Application Development for Mobile Platforms

Content Providers

Content providers are the recommended way of sharing data in Android application

Content providers provide a consistent interface programming interface across all Android applications

Content providers provide much the same services as databases – add, delete, query, edit

but can be stored as databases, files or over a network

Basic Android content providers include;

Browser – bookmarks, history, etc.

CallLog – missed calls, call details, etc.

Contacts – contact details from address book

MediaStore – for audio, video and images

Settings – device settings and preferences

CQU – COIT20270 Application Development for Mobile Platforms

…Content Providers

A URI is used to query a content provider. Query strings always have the form

content:// <authority> / <path> / <id>

where

authority– name of the content provider. For user defined content providers it is the fully qualified name, eg wrox.com.provider

path– specifies the content provider data path to the service provided

id– specifies the actual record required

Eg. Content://contacts/people/4 the fourth person in the people table of the devices contacts database

Table 8.1 in chapter 8 of the DiMarzio text gives further examples

CQU – COIT20270 Application Development for Mobile Platforms

Using a Content Provider

You must first specify the URI of the content provider

Uri myContacts = Uri.parse(“content://contacts/people/”);

Post Honeycomb devices use CursorLoader() to get a cursor instance to the data, but does not block the application thread

The CursorAdapter object maps data from the source to the destination variables. You set up an array of string, String[], for the column variable and an int[] for the views

You then create a new instance of a SimpleCursorAdapter class variable using the column and view values as parameters

Honeycomb and later requires the addition of a FLAG_REGISTER_CONTENT_OBSERVER argument

You also need to set READ_CONTACTS permission in the Android.manifest file

CQU – COIT20270 Application Development for Mobile Platforms

Pre-defined Querystring Parameters

A number of pre-defined Query string constants are defined including:

Browser.BOOKMARKS_URI

CallLog.CONTENT_URI

MediaStore.Images.Media.INTERNAL_CONTENT_URI

MediaStore.Images.Media.EXTERNAL_CONTENT_URI

Settings.CONTENT_URI

Eg Uri contacts= ContactsContract.Contacts.CONTENT_URI;

If you want to retrieve the 1st setting use Uri settings= ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, 2);

CQU – COIT20270 Application Development for Mobile Platforms

Printing Cursor objects

Create a method that takes the Cursor variable as input

Use the Cursor classes moveToFirst() and moveToNext() to iterate through the items in the Cursor object

The ContactsContract.Contacts._ID field returns the ID of the contact and the ContactsContract.Contacts.DISPLAY_NAME returns the contacts name

Use ContactsContract.Contacts.HAS_PHONE_NUMBER to determine if the contact has a phone number and then ContactsContract.CommonDataKinds.Phone.NUMBER to access the phone number

CQU – COIT20270 Application Development for Mobile Platforms

Content Providers – Projections

The 3rd parameter of CursorLoader() returns the columns that are returned by the query – this parameter is known as the projection

You can set up an array to contain the columns you wish to return from the data source and pass this as the projection parameter

String[] projection= new String[] {

ContactsContract.Contacts._ID,

ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER

};

CQU – COIT20270 Application Development for Mobile Platforms

Content Providers – Filtering

The 4th and 5th parameters of CursorLoader() enable you to make a WHERE clause enquiry

CursorLoader cL=new CursorLoader(this, contacts, projection, ContactsContract.Contacts.DISPLAY_NAME” + “ LIKE ‘Ron’ ”, null, null);

You can use the next parameter to supply a list strings to use instead

CursorLoader cL=new CursorLoader(this, contacts, projection, ContactsContract.Contacts.DISPLAY_NAME” + “ LIKE ? ”, new String[] {“Ron”, “Mary”}, null);

CQU – COIT20270 Application Development for Mobile Platforms

Content Providers – Sorting

The last parameter of CursorLoader() enables you to specify an ORDER BY clause of a SQL query

CursorLoader cL=new CursorLoader(this, contacts, projection, ContactsContract.Contacs.DISPLAY_NAME” + “ LIKE ? ”, new String[] {“Ron”, “Mary”}, ContactsContract.Contacts.DISPLAY_NAME” + “ ASC ”);

CQU – COIT20270 Application Development for Mobile Platforms

Creating Your Own Content Provider

To create your own content provider you provide a class that extends the ContentProvider base class

You need to override the following methods;

getType() – to return the MIME type of the data for the URI

onCreate() – called when provider created

query() – receives a client request and returns a Cursor object

insert() – inserts a new record in the content provide

delete() – deletes records in the content provider

update() – updates a record in the content provider

You can store your data in the file system, a database, an XML file or through a web service

CQU – COIT20270 Application Development for Mobile Platforms

…Creating Your Own Content Provider

You then need to define a number of strings such as the PROVIDER_NAME, CONTENT_URI, _ID, a UriMatcher instance, and a SQLiteDatabase with its associated constants

The UriMatcher object is used to parse the content URI through the ContentResolver

You write a SQLiteHelperDatabase class to help manage the database

You then write the implementations for getType(), onCreate(), query(), insert(), delete() and update()

Call notifyChange() of the ContentResolver after insert() and delete()

Modify the Android.Manifest file by adding the <provider> element

CQU – COIT20270 Application Development for Mobile Platforms

Using Your Own Content Provider

You need to create an activity to test your content provider

To add to the provider create a ContentValues object and populate it with the required values for your data object

If the ContentProvider is in the same package as your tester you can directly reference the provider fields, otherwise you need to specify the field names directly

For external packages you need to refer to the content URI using a fully qualified URI

You should then write methods to display the contents of you content provider and to test the update() and delete() methods

CQU – COIT20270 Application Development for Mobile Platforms

week 2 to 11/Week7 (3).pptx

COIT20270 Application Development for Mobile Platforms Week 7: SMS and email Messaging, Location Based Services

Dr. R. Balsys, CQU, 2018.

Source: Beginning Android Programming with Android Studio, J.F. DiMarzio, 2016

Week 7 – SMS and email Messaging

This week we:

Send SMS messages programmatically

Use the built in messaging application in our app

Receive SMS messages programmatically

Send emails from our applications

2

CQU – COIT20270 Application Development for Mobile Platforms

SMS Messaging

SMS messaging is a “killer app” for mobile phones

SMS messaging has billions of users in todays world

Being able to send and receive SMS messages within our applications is an attractive proposition, e.g. tracker app

You can test SMS messaging on the simulator

3

CQU – COIT20270 Application Development for Mobile Platforms

Switch to site and read through section. Do not follow any links

3

Sending SMS Messages Programmatically

You need to set <uses-permission android:name=“android.permissions.SEND_SMS”/> in your Android Manifest file

You create an instance of the SmsManager class. When declaring the instance you must use the getDefault() method to get a SmsManager object

The sendTextMessage() method on the SmsManager instance object is used to send the message

4

CQU – COIT20270 Application Development for Mobile Platforms

…sendTextMessage

sendTextMessage() has the following 5 parameters:

destinationAddress: phone number of recipient

scAddress: service Centre address or null for default

text: content of the SMS

sentIntent: pending intent to invoke when sent

deliveryIntent: pending intent to invoke when delivered

5

CQU – COIT20270 Application Development for Mobile Platforms

Using Built-in SMS app

It is simple to invoke the built in SMS app from your app. When the SMS message is sent you return to your app

Create a new Intent instance with new Intent(android.content.Intent.ACTION-VIEW) as the constructor

The putExtra() method can then be used to load the “address”, “sms_body” and “text” fields of the SMS messenger app when it loads

You must also set the MIME type of the message using setType(“vnd.android-dir/mms-sms”)

The startActivity() method is invoked with the Intent instance as parameter to start the messenger app when the setup is complete

6

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate and Explain how it works

6

Receiving SMS Messages

You need to set <uses-permission android:name=“android.permissions.RECEIVE_SMS”/> in your Android Manifest file

Receiving SMS messages is done using a BroadcastReceiver object which allows you to receive Intents using sendBroadcast(), that allows you to handle an event raised by another application

To handle the event you override the onReceive() method

The SMS message is contained in the 2nd parameter of onReceive() (an Intent object)

7

CQU – COIT20270 Application Development for Mobile Platforms

Explain how the files work

7

…Receiving SMS Messages

SMS messages are stored in an Object array in PDU format. The message is split into 160 character sub-arrays

You extract the content using the static createFromPdu() method of the SmsMessage class

The phone number of the sender is found by calling the getOriginatingAddress() method and the body of the message is found using getMessageBody()

BroadcastReceiver’s remain running even when your app is not running and so can respond to events even when the app is not running

8

CQU – COIT20270 Application Development for Mobile Platforms

Explain how the files work

8

Preventing Messaging Apps from Receiving Messages

The default behavior is that your application and the built-in SMS app get any messages

To prevent another application from receiving the message use

<intent-filter android:priority=“100”/>

<action android:name= “android.provider.Telephony.SMS_RECEIVED” /></intent-filter>

in your Android manifest file and call abortBroacast() in your onReceive() event handler

This will permanently block all incoming SMS calls

9

CQU – COIT20270 Application Development for Mobile Platforms

Explain how the files work

9

Updating Activities from BroadcastReceiver

To display an SMS message in a TextView of your activity class you create a modified SMSReceiver class that listens for a new Intent type to use for the application, eg “MY_APP_RECEIVED”

Then you override the onReceive() method of your BroadcastReceiver object to display the SMS in the TextView

You need to create an IntentFilter object so you can listen for the Intent. This is done by adding your “MY_APP_RECEIVED” parameter when you call addAction() on your new IntentFilter instance

10

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate and Explain how the files work

10

…Updating Activities from BroadcastReceiver

You call registerReceiver() in onResume() and unregisterReceiver() in onPause() so the message is only updated when the Activity is running in the foreground

11

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate and Explain how the files work

11

If your activity is in the background when a message is received it is possible to automatically bring it to the foreground to display the message

Register your BroadcastReceiver in your activities onCreate() instead of in onResume() and unregister it in your onDestroy() event rather than the onPause() event

Then modify the onReceive() event using an Intent to bring the activity to the foreground by calling Intent’s setFlag(“Intent.FLAG_ACTIVITY_NEW_CLASS”) and then stating your Intent’s instance using startActivity()

12

CQU – COIT20270 Application Development for Mobile Platforms

Invoking Activities from BroadcastReceiver

Demonstrate and Explain how the files work

12

You also need to add the tag android:launchMode=“singleTask” to the activity section of your Android manifest file. This prevents a new instance of your application being launched whenever a message is received

Using SMS messaging inside your app has various legal and ethical considerations

Once your app is granted permission to send SMS’s the user gets no further indication that messaging and associated costs occur

13

CQU – COIT20270 Application Development for Mobile Platforms

…Invoking Activities from BroadcastReceiver

Demonstrate and Explain how the files work

13

Sending E-Mail

The Gmail/email app lets you configure e-mail accounts using POP3 or IMAP.

You can use the built-in app or send and receive e-mails programmatically

You use an Intent object to do this. Use the setData() method on your Intent instance variable and use Uri.parse(“mailto:”) as the parameter

14

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate and Explain how the files work

14

Sending E-Mail

Then use putExtra() with parameters

Intent.EXTRA_EMAIL , array of strings containing recipients addresses

Intent.EXTRA_CC, array of strings containing other recipients addresses

Intent.EXTRA_SUBJECT, string for the subject field of e-mail

Intent.EXTRA_TEXT, string containing the message

Set the Intent message type to “message/fc822” using the Intent setType() method

Call startActivity() with Intent.createChooser (your_intent_instance, “Email’) as parameter

15

CQU – COIT20270 Application Development for Mobile Platforms

Demonstrate and Explain how the files work

15

Week 7 – Location Based Services

Objectives, to:

Display Google maps in your app, with pan and zoom control, switching between views and to add markers to the maps

Getting address of locations tapped on a map

Performing geocoding and reverse geocoding

Getting geographical data using GPS, Cell-ID and Wi-Fi

Location monitor and build a location tracker app

16

CQU – COIT20270 Application Development for Mobile Platforms

Location Based Services (LBS)

In recent times apps that take advantage of the current location of the mobile device have become popular

Use of location along with readily accessible maps allow for the integration of direction to the required service

Google maps integrates with the Android device allowing use of Google map and other services

17

CQU – COIT20270 Application Development for Mobile Platforms

Displaying Maps

Google Maps comes bundle with the Android system

The textbook is out of date – we will be using Google Maps Android API v2

For up-to-date instructions on creating the project and obtaining the Maps API key see this weeks Lecture/Tutorial

The material in chapter 9 of the Lee text will only work if you have a real Android phone (v4 or later) to test the code on, otherwise you will need to create an Android Virtual device as described in the Lecture/Tutorial. The default display now shows the Zoom control automatically

18

CQU – COIT20270 Application Development for Mobile Platforms

Changing Views

You can display Google maps in either maps view or satellite view

In some countries (US, France, UK, Australia and Canada) it is possible to display traffic conditions on the map in major cities

Green reflects smooth traffic flow, yellow moderate flow and red indicates traffic congestion

19

CQU – COIT20270 Application Development for Mobile Platforms

Navigating to a Specific Location and Adding Location Markers

You can programmatically navigate to a specific location in the world

You can also place location markers at specific points on the map

See this weeks Lecture/Tutorial for details

20

CQU – COIT20270 Application Development for Mobile Platforms

Eclipse (with Android additions) should already be installed in the labs, so these instructions are for installing on a students PC

20

Getting Touch Location

You can find the latitude and longitude of a location touched on the display

From the latitude and longitude you can find the closest address – a process known as reverse geocoding

See this weeks Lecture/Tutorial for details

21

CQU – COIT20270 Application Development for Mobile Platforms

Getting location programmatically

See this weeks Lecture/Tutorial for details

22

CQU – COIT20270 Application Development for Mobile Platforms

week 2 to 11/Week8 (2).pptx

COIT20270 Application Development for Mobile Platforms Week 8: Networking

Dr. R. Balsys, CQU, 2018.

Source: Beginning Android Programming with Android Studio, J.F. DiMarzio, 2016

Week 8 – Networking

This week we:

Connect to the web using HTTP

Use XML web services

Use Jason web services

2

CQU – COIT20270 Application Development for Mobile Platforms

Using the HTTP web services

HTTP is used as the main protocol in the WWW

It is used in tasks such as downloading web pages, and binary data such as images, sound and video

To use the HTTP protocol your app must set the uses INTERNET permission in your Android manifest file

You use the OpenHttpConnection() method that takes an URL string as parameter to open a connection to the specified URL

By opening an InputStream object you can download bytes from the URL

3

CQU – COIT20270 Application Development for Mobile Platforms

…Using the HTTP web services

You must set the connection method using setRequestMethod(). Usually you use the HTTP GET verb for this

When the connection is established a HTTP response code is returned. If this is HTTP_OK then you can proceed to get the data using getInputStream()

4

CQU – COIT20270 Application Development for Mobile Platforms

Downloading Binary Data

To download an image from a web server you use the synchronous DownloadImage() method. This returns a Bitmap object. It does this by opening a HTTP connection to the URL and uses the decodeStream() method of the BitmapFactory class to decode the InputStream instance and return it as a Bitmap

Since Android 3.0 all synchronous tasks must be wrapped in the AsyncTask class to prevent them from stalling the UI

You create a DownloadImageTask that extends AsyncTask<String, Void, Bitmap>

5

CQU – COIT20270 Application Development for Mobile Platforms

…Downloading Binary Data

In the DownloadImageTask class you define the methods doInBackground() and onPostExecute()

In doInBackground() you call DownloadImage() to get the bitmap

In onPostExecute() you display the image in your UI using a UI element

You call your DownloadImageTask class by creating an instance of it in onCreate() and then calling execute() on the instance, passing a URL as the parameter

6

CQU – COIT20270 Application Development for Mobile Platforms

…Downloading Binary Data

To read multiple images you modify the doInBackground() method to use a for loop to loop through each of the URLs. As each image is completed you call publishProgress() to give feedback

An extra onProgressUpdate() method is defined in the DownloadImageTask class to display the downloaded images

In onCreate() you pass multiple URLs as the parameters of the execute() method

NOTE: On the emulator localhost refers to the emulator itself. If getting images from your PC use your PCs IP address instead of localhost or the files will not be found

7

CQU – COIT20270 Application Development for Mobile Platforms

Downloading Text

In some circumstances you may wish to GET plain text files. The text file is stored as a String on the device

To achieve this write a DownLoadText(URL) method that returns the text file as a single String

You open a Http connection to an InputStream object. Then use an InputStreamReader instance to a new InputStreamReader() instantiated with your InputStream object

You read the incoming stream of bytes into character buffers and append the incoming String copy of the buffer contents to the final returned String

You create a subclass of AsyncTask to call DownLoadText(URL) asynchronously as before

8

CQU – COIT20270 Application Development for Mobile Platforms

Accessing Web Services using GET

Many Web services respond to a GET query with an XML file

We need to be able to connect to the web service and then parse the contents of the XML file

For example consider a web service that returns the dictionary definition of the word (eg http://services.aonware.com/DictService / DictService.asmx?op=word )

Here you need to establish the connection to the web service and then parse the XML returned

9

CQU – COIT20270 Application Development for Mobile Platforms

…Accessing Web Services using GET

Here we create a WordDefinition(String) method that returns the XML file in a local String object. We wrap this in a subclass of AsyncTask and call WordDefinition (String) asynchronously

Use OpenHttpConnection() and pass the request string as the URL, remembering to use the required word at the end of the string

You create a local instance of a Document object and use the newInstance() method of the DocumentBuilderFactory class to create a DocumentBuilderFactory instance

10

CQU – COIT20270 Application Development for Mobile Platforms

…Accessing Web Services using GET

You also need a DocumentBuilder object defined and then you can use your DocumentBuilderFactory instance to try and get a valid DocumentBuilder object. You call the parse() method get a Document object

The elements of the word definition are then found within the <definition> tags in the Document object model (DOM)

11

CQU – COIT20270 Application Development for Mobile Platforms

Consuming Jason Services

XML has a number of disadvantages:

Documents sizes get big as the complexity goes up and so costs rise

Parsing the XML to extract the content of the message is CPU intensive, requires the complete DOM to be stored locally as a tree structure so is memory intensive

A more efficient representation scheme is to use JavaScript object notation (JSON) to encode the information

12

CQU – COIT20270 Application Development for Mobile Platforms

JASON

JavaScript Object Notation (JSON) is a data exchange format for defining data structures

JSON is light-weight and easy to read and write

JASON objects are represented as “key”:”value” pairs enclosed in {}’s, eg. {“a”:”I”, “b”: [“d”, “e”, “f”], “c”:{“a”: 1000, “b”:[“fred”]} }

13

CQU – COIT20270 Application Development for Mobile Platforms

Consuming JSON Services

To consume JSON services you create a readJSONFeed() method

This method connects to the specified URL and then reads the response from the web service as a String

You call the readJSONFeed() method asynchronously using the AsyncTask class

readJSONFeed() in called in the AsyncTask’s doInBackground() method and the JSON String you fetch is passed into the onPostExecute() method of the AsyncTask

14

CQU – COIT20270 Application Development for Mobile Platforms

Go to the API and read through the entries

14

…Consuming JSON Services

To obtain the list of objects in the JSON String you pass the JSON received into a JSONArray() constructor to get a local JSONArray object representing the JSON data

You can then use the length() method to get the length of the JSON array and get a JSONObject from the JSONArray using the getJSONObject() method

To get the key:value pair from a JSON object you use getString(), getInt(), getLong() or get Boolean()

15

CQU – COIT20270 Application Development for Mobile Platforms

Go to the API and read through the entries

15

week 2 to 11/Week9 (4).pptx

COIT20270 Application Development for Mobile Platforms Week 9: Developing Android Services and App testing

Dr. R. Balsys, CQU, 2018.

Source: Beginning Android Programming with Android Studio, J.F. DiMarzio, 2016 and https://www.tutorialspoint.com/mobile_testing/mobile_testing_quick_guide.htm

Week 9 – Developing Services

Objectives, to:

To create an Android service that runs in the background

Perform long running tasks in threads

Perform repeated tasks in a service

Understand how activities and services communicate

Understand threading in Android

2

CQU – COIT20270 Application Development for Mobile Platforms

Android Services

Services are tasks that run in the background without the need for a UI, e.g playing background music or repeatedly polling for the devices current location

To create a service you extend the Service base class and override:

onBind(): binds the activity to the service

onStart(): used to do things when the service first starts

onDestroy(): called when the service terminates and is used to clean up resources used by the service

3

CQU – COIT20270 Application Development for Mobile Platforms

Go to the API and read through the entries

3

…Android Services

Services must be declared using the service tag, or an action tag in your intent-filter section for services that are available to other applications, in the Android manifest file

You start the service using the startServices() method

You stop a service by calling the stopService() method

4

CQU – COIT20270 Application Development for Mobile Platforms

Go to the API and read through the entries

4

Performing Long Running Tasks

Long running tasks will stall your UI making your activity unresponsive

For this reason long running tasks are put into a separate thread so the main thread can keep running

You implement an inner class that extends the asynchronous AsyncTask class without manually creating threads and handlers

5

CQU – COIT20270 Application Development for Mobile Platforms

Go to the API and read through the entries

5

The AsyncTask Class

The AsyncTask class has three generic types URL, Integer and Long

These type of parameters are passed to the doInBackground(), onProgressUpdate() and onPostExecute() methods of the AsyncTask class

doInBackground() accepts an array of String’s corresponding to URL’s as its parameter. In this method you implement the long running task. To report progress you call publishProgress() method passing the Integer % complete

onProgressUpdate() connects to UI’s elements to show tasks percentage complete

onPostExecute() takes the Long value returned by doInBackground() when it completes as its parameter and is used to take action when this happens

Call stopSelf() in onPostExecute() to terminate the Service or it keeps running

6

CQU – COIT20270 Application Development for Mobile Platforms

new Media is correct capitalisation for the constructor

6

Doing Repeated Tasks in a Service

You may want to use the Timer class to arrange for a service to be run at set time intervals

The TimerTask class implements a Runnable interface and runs on its own thread. Hence it does not have to extend the AsyncTask class to be run in the background

7

CQU – COIT20270 Application Development for Mobile Platforms

7

…Doing Repeated Tasks in a Service

To repeat the service in the class create a method in your Service and in it use a Timer object and call its scheduleAtFixedRate() method passing in a new TimerTask() that implements a run() method as scheduleAtFixedRate()’s 1st parameter, the delay before the 1st call of the run() method as the 2nd parameter and the delay between successive calls in milli-seconds as the 3rd parameter

Call your new method directly from the onStartCommand() method of your Service

8

CQU – COIT20270 Application Development for Mobile Platforms

8

Asynchronous Tasks on Separate Threads Using IntentService

The IntentService class makes it easy to create an asynchronous task that terminates when completed

IntentService is based on the Service class and handles asynchronous requests on demand

It is started like a normal service, executes on a separate worker thread and terminates itself when completed

9

CQU – COIT20270 Application Development for Mobile Platforms

9

…Asynchronous Tasks on Separate Threads Using IntentService

To use IntentService class you define a new class that extends IntentService

You need to implement a constructor that calls the superclass passing in a string to name the service

You also need to override the onHandleIntent() method to specify the action the service is to take when executing on the worker thread

When onHandleIntent() is finished the thread is terminated and then service is automatically stopped

10

CQU – COIT20270 Application Development for Mobile Platforms

10

Week 9 – Mobile App Testing

This week we:

Understand the importance of testing the the apps we develop for mobile devices

Develop a methodology for testing mobile devices

Understand how to choose which mobile devices we should test

Discuss strategies for testing on a range of devices (including emulators)

Look at developing a mobile device test plan

11

CQU – COIT20270 Application Development for Mobile Platforms

The Importance of App testing

There is a lot of competition for application and services on mobile devices

Testing ensures that your device functions as intended

If your app fails at some task, is poorly designed or is unresponsive your customers will move on to something else very quickly

The goal of testing is to determine the quality of the software – does it work, does it function as intended and does it meet the users needs

Failure means your customers will desert you for other suppliers

12

CQU – COIT20270 Application Development for Mobile Platforms

Mobile Testing Methodology

Comprehensive testing is complicated and expensive

In Mobile apps use is often made of the WWW (even though it does not have too) so account must be taken of this

Testing must not just be restricted to the mobile device but any services or peripherals the app uses

13

CQU – COIT20270 Application Development for Mobile Platforms

Note: The reading addresses testing mobile web sites rather than mobile app testing. However, a lot of similarity occurs between the two

13

…Mobile Testing Methodology

According to Wikipedia mobile application testing includes

Functional testing

Laboratory testing – of complete wireless network

Performance testing – undertaken under different conditions

Memory leakage – test apps memory management

Interrupt testing – how it handles interrupts such as battery removal, notifications, incoming/outgoing calls, etc..

Usability testing

Installation testing in actual practice

Any certification testing required by customers

14

CQU – COIT20270 Application Development for Mobile Platforms

Note: The reading addresses testing mobile web sites rather than mobile app testing. However, a lot of similarity occurs between the two

14

Choosing Devices to Test

Comprehensive testing targets multiple device models, operating systems, mobile networks and possible browsers

It generally is not possible to test on every mobile device so a reasonable subset must be chosen

The process to follow includes;

List all target devices

Organise devices by operating system and version

Organise devices by modality and input method

Choose the strongest and weakest from the list for testing

15

CQU – COIT20270 Application Development for Mobile Platforms

Note: The reading addresses testing mobile web sites rather than mobile app testing. However, a lot of similarity occurs between the two

15

Strategies for Testing on Devices

The greatest issue is to acquire the range of devices needed for testing

This can be done by

Purchasing the devices outright

Joining industry developer programs

Use the services of a commercial provider to test

Use device emulators for testing

16

CQU – COIT20270 Application Development for Mobile Platforms

Note: The reading addresses testing mobile web sites rather than mobile app testing. However, a lot of similarity occurs between the two

16

Developer Programs and Emulators

All the major manufactures of mobile devices have developer programs that you can join for a fee that may provide discounted device purchases, you to rent or borrow devices and/or access to virtual devices

Emulators are a relatively inexpensive alternate to real devices, however these are not the real devices and problems or errors can slip through the testing process

In particular gestures and touches do not emulate well

17

CQU – COIT20270 Application Development for Mobile Platforms

Note: The reading addresses testing mobile web sites rather than mobile app testing. However, a lot of similarity occurs between the two

17

Develop a Mobile Test Plan

Start by writing a summary to describe the purpose of the app, its use cases and how you plan to test the device

Review the list of devices, OS versions etc. you plan to test

Decide whether testing uses actual devices, emulators or both. If using actual devices decide how the devices are to be acquired

Write scripts to detail the tests to be undertaken on the devices and carry out the tests

18

CQU – COIT20270 Application Development for Mobile Platforms

Note: The reading addresses testing mobile web sites rather than mobile app testing. However, a lot of similarity occurs between the two

18


Comments are closed.