UDSM Android App Development Guide
UDSM Android App Development Guide
Table of Contents
Introduction to Android Application Development.................................................................................................. 5
What is Android? .......................................................................................................................................................... 5
Why Android?................................................................................................................................................................ 5
Features of Android ..................................................................................................................................................... 6
Android Applications.................................................................................................................................................... 7
History of Android ....................................................................................................................................................... 7
What is API level? ......................................................................................................................................................... 7
Android - Environment Setup......................................................................................................................................... 9
Set-up Java Development Kit (JDK).......................................................................................................................... 9
Android IDEs................................................................................................................................................................ 10
Android - Architecture .................................................................................................................................................. 11
Linux kernel .................................................................................................................................................................. 11
Libraries ......................................................................................................................................................................... 11
Android Libraries ........................................................................................................................................................ 12
Android Runtime......................................................................................................................................................... 12
Application Framework ............................................................................................................................................. 13
Applications .................................................................................................................................................................. 13
Android - Application Components............................................................................................................................ 14
Activities ........................................................................................................................................................................ 14
Services .......................................................................................................................................................................... 14
Broadcast Receivers ................................................................................................................................................... 15
Content Providers ...................................................................................................................................................... 15
Additional Components ............................................................................................................................................ 15
Android - Hello World Example ................................................................................................................................. 17
Create Android Application ..................................................................................................................................... 17
Anatomy of Android Application ............................................................................................................................ 19
The Main Activity File................................................................................................................................................. 21
The Manifest File ......................................................................................................................................................... 22
The Strings File ............................................................................................................................................................ 23
The Layout File ............................................................................................................................................................ 24
Running the Application............................................................................................................................................. 24
Android Resources Organizing & Accessing ............................................................................................................. 26
Organize resource in Android Studio .................................................................................................................... 26
1|Page
University of Dar es Salaam
Alternative Resources ................................................................................................................................................ 27
Accessing Resources .................................................................................................................................................. 29
Accessing Resources in Code .................................................................................................................................. 29
Accessing Resources in XML ................................................................................................................................... 30
Android - UI Layouts ...................................................................................................................................................... 32
Android Layout Types ............................................................................................................................................... 33
Layout Attributes ........................................................................................................................................................ 34
View Identification ...................................................................................................................................................... 38
Android - UI Controls .................................................................................................................................................... 39
Android UI Controls .................................................................................................................................................. 40
Create UI Controls .................................................................................................................................................... 41
Android - Activities ......................................................................................................................................................... 43
Android - Services ........................................................................................................................................................... 49
Android - Broadcast Receivers .................................................................................................................................... 62
Creating the Broadcast Receiver ............................................................................................................................ 62
Registering Broadcast Receiver ............................................................................................................................... 62
Broadcasting Custom Intents ................................................................................................................................... 64
Android - Content Providers ....................................................................................................................................... 73
Content URIs ............................................................................................................................................................... 73
Create Content Provider .......................................................................................................................................... 74
Android – Fragments ...................................................................................................................................................... 93
Fragment Life Cycle .................................................................................................................................................... 94
How to use Fragments? ............................................................................................................................................. 95
Types of Fragments .................................................................................................................................................... 96
Android - Intents and Filters ......................................................................................................................................... 97
Intent Objects .............................................................................................................................................................. 99
Action ........................................................................................................................................................................ 99
Data ........................................................................................................................................................................... 99
Category ................................................................................................................................................................ 100
Extras ...................................................................................................................................................................... 101
Flags......................................................................................................................................................................... 101
Component Name .............................................................................................................................................. 101
Types of Intents ........................................................................................................................................................ 101
Explicit Intents ...................................................................................................................................................... 102
2|Page
University of Dar es Salaam
Implicit Intents ...................................................................................................................................................... 103
Intent Filters .............................................................................................................................................................. 111
Android - Event Handling ........................................................................................................................................... 123
Event Listeners & Event Handlers ........................................................................................................................ 123
Event Listeners Registration .................................................................................................................................. 124
Touch Mode .............................................................................................................................................................. 124
Focus ........................................................................................................................................................................... 125
onTouchEvent() ........................................................................................................................................................ 125
Event Handling Examples........................................................................................................................................ 126
Android - Styles and Themes ..................................................................................................................................... 133
Defining Styles........................................................................................................................................................... 133
Using Styles ................................................................................................................................................................ 133
Style Inheritance ....................................................................................................................................................... 134
Applying Colors to Theme Attributes ................................................................................................................ 135
Using a Custom Nine-Patch With Buttons........................................................................................................ 136
Android Themes....................................................................................................................................................... 138
Styling the colour palette ....................................................................................................................................... 139
Default Styles & Themes ........................................................................................................................................ 140
Android – Restful API (PHP/MYSQL) ...................................................................................................................... 141
Creating Database.................................................................................................................................................... 141
Creating Tables .................................................................................................................................................... 141
Inserting Values in tables.................................................................................................................................... 142
PHP - GET and POST methods ....................................................................................................................... 142
Android - Connecting MYSQL ............................................................................................................................. 143
Connecting Via Get Method ............................................................................................................................. 143
Connecting Via Post Method ............................................................................................................................ 143
PHP - MYSQL part .............................................................................................................................................. 144
Android Part ......................................................................................................................................................... 145
Publishing Android Application ................................................................................................................................. 161
ANDROID DEVELOPMENT LIFE CYCLE ........................................................................................................ 161
Export Android Application Process................................................................................................................... 162
Google Play Registration ........................................................................................................................................ 165
Signing Your App Manually .................................................................................................................................... 165
3|Page
University of Dar es Salaam
4|Page
University of Dar es Salaam
Introduction to Android Application Development
What is Android?
Android is an open source and Linux-based Operating System for mobile devices such as
smartphones and tablet computers. Android was developed by the Open Handset Alliance, led by
Google, and other companies.
Android offers a unified approach to application development for mobile devices which means
developers need only develop for Android, and their applications should be able to run on
different devices powered by Android.
The first beta version of the Android Software Development Kit (SDK) was released by Google
in 2007 where as the first commercial version, Android 1.0, was released in September 2008.
The source code for Android is available under free and open source software licenses.
Why Android?
5|Page
University of Dar es Salaam
Features of Android
Android is a powerful operating system with great features. Few of them are listed below –
Beautiful UI - Android OS basic screen provides a beautiful and intuitive user interface.
Connectivity - GSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth, Wi-Fi, LTE, NFC and
WiMAX.
Storage - SQLite, a lightweight relational database, is used for data storage purposes.
Media support - H.263, H.264, MPEG-4 SP, AMR, AMR-WB, AAC, HE-AAC, AAC 5.1,
MP3, MIDI, Ogg Vorbis, WAV, JPEG, PNG, GIF, and BMP.
Web browser - Based on the open-source WebKit layout engine, coupled with Chrome's
V8 JavaScript engine supporting HTML5 and CSS3.
Multi-touch - Android has native support for multi-touch which was initially made available
in handsets such as the HTC Hero.
Multi-tasking - User can jump from one task to another and same time various application
can run simultaneously.
Multi-tasking - User can jump from one task to another and same time various application
can run simultaneously.
Resizable widgets - Widgets are resizable, so users can expand them to show more
content or shrink them to save space.
GCM - Google Cloud Messaging (GCM) is a service that lets developers send short message
data to their users on Android devices, without needing a proprietary sync solution.
Wi-Fi Direct - A technology that lets apps discover and pair directly, over a high-bandwidth
peer-to-peer connection.
Android Beam - A popular NFC-based technology that lets users instantly share, just by
touching two NFC-enabled phones together.
6|Page
University of Dar es Salaam
Android Applications
Android applications are usually developed in the Java language using the Android Software
Development Kit.
Once developed, Android applications can be packaged easily and sold out either through a
store such as Google Play, SlideME, Opera Mobile Store, Mobango, F-droid and
the Amazon Appstore.
Android powers hundreds of millions of mobile devices in more than 190 countries around the
world. It's the largest installed base of any mobile platform and growing fast. Every day more
than 1 million new Android devices are activated worldwide.
History of Android
The code names of android ranges from A to N currently, such as Aestro, Blender, Cupcake,
Donut, Eclair, Froyo, Gingerbread, Honeycomb, Ice Cream Sandwitch, Jelly Bean, KitKat,
Lollipop and Marshmallow. Let's understand the android history in a sequence.
7|Page
University of Dar es Salaam
Platform Version API Level VERSION_CODE
Android 6.0 23 MARSHMALLOW
Android 5.1 22 LOLLIPOP_MR1
Android 5.0 21 LOLLIPOP
Android 2.3.4
10 GINGERBREAD_MR1
Android 2.3.3
Android 2.3.2
9 GINGERBREAD
Android 2.3.1
Android 2.3
Android 2.2.x 8 FROYO
Android 2.1.x 7 ECLAIR_MR1
Android 2.0.1 6 ECLAIR_0_1
Android 2.0 5 ECLAIR
Android 1.6 4 DONUT
Android 1.5 3 CUPCAKE
Android 1.1 2 BASE_1_1
Android 1.0 1 BASE
8|Page
University of Dar es Salaam
Android - Environment Setup
You will be glad to know that you can start your Android application development on either of
the following operating systems −
Second point is that all the required tools to develop Android applications are freely available
and can be downloaded from the Web. Following is the list of software's you will need before
you start your Android application programming.
Android Studio
Here last two components are optional and if you are working on Windows machine then these
components make your life easy while doing Java based application development. So let us have
a look how to proceed to set required environment.
If you are running Windows and installed the JDK in C:\jdk1.8.0_102, you would have to put the
following line in your C:\[Link] file.
9|Page
University of Dar es Salaam
set PATH=C:\jdk1.8.0_102\bin;%PATH%
set JAVA_HOME=C:\jdk1.8.0_102
Alternatively, you could also right-click on My Computer, select Properties, then Advanced,
then Environment Variables. Then, you would update the PATH value and press the OK button.
On Linux, if the SDK is installed in /usr/local/jdk1.8.0_102 and you use the C shell, you would
put the following code into your .cshrc file.
setenv PATH /usr/local/jdk1.8.0_102/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.8.0_102
Alternatively, if you use Android studio, then it will know automatically where you have installed
your Java.
Android IDEs
There are so many sophisticated Technologies are available to develop android applications, the
familiar technologies, which are predominantly using tools as follows
Android Studio
Eclipse IDE(Deprecated)
10 | P a g e
University of Dar es Salaam
Android - Architecture
Android operating system is a stack of software components which is roughly divided into five
sections and four main layers as shown below in the architecture diagram.
Linux kernel
At the bottom of the layers is Linux - Linux 3.6 with approximately 115 patches. This provides
a level of abstraction between the device hardware and it contains all the essential hardware
drivers like camera, keypad, display etc. Also, the kernel handles all the things that Linux is really
good at such as networking and a vast array of device drivers, which take the pain out of
interfacing to peripheral hardware.
Libraries
On top of Linux kernel there is a set of libraries including open-source Web browser engine
WebKit, well known library libc, SQLite database which is a useful repository for storage and
sharing of application data, libraries to play and record audio and video, SSL libraries responsible
for Internet security etc.
11 | P a g e
University of Dar es Salaam
Android Libraries
This category encompasses those Java-based libraries that are specific to Android development.
Examples of libraries in this category include the application framework libraries in addition to
those that facilitate user interface building, graphics drawing and database access. A summary of
some key core Android libraries available to the Android developer is as follows −
[Link] − Provides access to the application model and is the cornerstone of all Android
applications.
[Link] − Facilitates content access, publishing and messaging between applications and
application components.
[Link] − Used to access data published by content providers and includes SQLite
database management classes.
[Link] − Provides applications with access to standard operating system services including
messages, system services and inter-process communication.
[Link] − A rich collection of pre-built user interface components such as buttons, labels,
list views, layout managers, radio buttons etc.
Having covered the Java-based core libraries in the Android runtime, it is now time to turn our
attention to the C/C++ based libraries contained in this layer of the Android software stack.
Android Runtime
This is the third section of the architecture and available on the second layer from the bottom.
This section provides a key component called Dalvik Virtual Machine which is a kind of Java
Virtual Machine specially designed and optimized for Android.
The Dalvik VM makes use of Linux core features like memory management and multi-threading,
which is intrinsic in the Java language.
12 | P a g e
University of Dar es Salaam
Application Framework
The Application Framework layer provides many higher-level services to applications in the form
of Java classes. Application developers are allowed to make use of these services in their
applications.
Activity Manager − Controls all aspects of the application lifecycle and activity stack.
Content Providers − Allows applications to publish and share data with other applications.
Resource Manager − Provides access to non-code embedded resources such as strings, color
settings and user interface layouts.
Notifications Manager − Allows applications to display alerts and notifications to the user.
View System − An extensible set of views used to create application user interfaces.
Applications
You will find all the Android application at the top layer. You will write your application to be
installed on this layer only. Examples of such applications are Contacts Books, Browser, and
Games etc.
13 | P a g e
University of Dar es Salaam
Android - Application Components
Application components are the essential building blocks of an Android application. These
components are loosely coupled by the application manifest file [Link] that
describes each component of the application and how they interact.
There are following four main components that can be used within an Android application −
Activities
1
They dictate the UI and handle the user interaction to the smart phone screen.
Services
2
They handle background processing associated with an application.
Broadcast Receivers
3
They handle communication between Android OS and applications.
Content Providers
4
They handle data and database management issues.
Activities
An activity represents a single screen with a user interface,in-short Activity performs actions on
the screen. For example, an email application might have one activity that shows a list of new
emails, another activity to compose an email, and another activity for reading emails. If an
application has more than one activity, then one of them should be marked as the activity that
is presented when the application is launched.
Services
A service is a component that runs in the background to perform long-running operations. For
example, a service might play music in the background while the user is in a different application,
or it might fetch data over the network without blocking user interaction with an activity.
14 | P a g e
University of Dar es Salaam
A service is implemented as a subclass of Service class as follows −
Broadcast Receivers
Broadcast Receivers simply respond to broadcast messages from other applications or from the
system. For example, applications can also initiate broadcasts to let other applications know that
some data has been downloaded to the device and is available for them to use, so this is
broadcast receiver who will intercept this communication and will initiate appropriate action.
Content Providers
A content provider component supplies data from one application to others on request. Such
requests are handled by the methods of the ContentResolverclass. The data may be stored in the
file system, the database or somewhere else entirely.
We will go through these tags in detail while covering application components in individual
chapters.
Additional Components
There are additional components which will be used in the construction of above mentioned
entities, their logic, and wiring between them. These components are −
15 | P a g e
University of Dar es Salaam
[Link] Components & Description
Fragments
1
Represents a portion of user interface in an Activity.
Views
2
UI elements that are drawn on-screen including buttons, lists forms etc.
Layouts
3
View hierarchies that control screen format and appearance of the views.
Intents
4
Messages wiring components together.
Resources
5
External elements, such as strings, constants and drawable pictures.
Manifest
6
Configuration file for the application.
16 | P a g e
University of Dar es Salaam
Android - Hello World Example
Let us start actual programming with Android Framework. Before you start writing your first
example using Android SDK, you have to make sure that you have set-up your Android
development environment properly as explained earlier sessions.
So let us proceed to write a simple Android Application which will print "Hello World!".
You can start your application development by calling start a new android studio project. in a
new installation frame should ask Application name, package information and location of the
project.−
17 | P a g e
University of Dar es Salaam
After entered application name, it going to be called select the form factors your application
runs on, here need to specify Minimum SDK, in our tutorial, I have declared as API23: Android
6.0(Mashmallow) −
The next level of installation should contain selecting the activity to mobile, it specifies the default
layout for Applications.
18 | P a g e
University of Dar es Salaam
At the final stage it going to be open development tool to write the application code.
19 | P a g e
University of Dar es Salaam
[Link]. Folder, File & Description
Java
1 This contains the .java source files for your project. By default, it includes
an [Link] source file having an activity class that runs when your app is launched
using the app icon.
res/drawable-hdpi
2
This is a directory for drawable objects that are designed for high-density screens.
20 | P a g e
University of Dar es Salaam
res/layout
3
This is a directory for files that define your app's user interface.
res/values
4 This is a directory for other various XML files that contain a collection of resources, such as
strings and colours definitions.
[Link]
5 This is the manifest file which describes the fundamental characteristics of the app and defines
each of its components.
[Link]
6 This is an auto generated file which contains compileSdkVersion, buildToolsVersion,
applicationId, minSdkVersion, targetSdkVersion, versionCode and versionName
Following section will give a brief overview of the important application files.
package [Link];
import [Link];
import [Link];
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
21 | P a g e
University of Dar es Salaam
Here, [Link].activity_main refers to the activity_main.xml file located in the res/layout folder.
The onCreate() method is one of many methods that are figured when an activity is loaded.
<manifest xmlns:android="[Link]
package="[Link]">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
</application>
</manifest>
22 | P a g e
University of Dar es Salaam
Here <application>...</application> tags enclosed the components related to the application.
Attribute android:icon will point to the application icon available under res/drawable-hdpi. The
application uses the image named ic_launcher.png located in the drawable folders
The <activity> tag is used to specify an activity and android:name attribute specifies the fully
qualified class name of the Activity subclass and the android:label attributes specifies a string to
use as the label for the activity. You can specify multiple activities using <activity> tags.
The action for the intent filter is named [Link] to indicate that this activity
serves as the entry point for the application. The categoryfor the intent-filter is
named [Link] to indicate that the application can be launched from
the device's launcher icon.
The @string refers to the [Link] file explained below. Hence, @string/app_name refers to
the app_name string defined in the [Link] file, which is "HelloWorld". Similar way, other
strings get populated in the application.
Following is the list of tags which you will use in your manifest file to specify different Android
application components −
<activity>elements for activities
<resources>
<string name="app_name">HelloWorld</string>
<string name="menu_settings">Settings</string>
<string name="title_activity_main">MainActivity</string>
</resources>
23 | P a g e
University of Dar es Salaam
The Layout File
The activity_main.xml is a layout file available in res/layout directory, that is referenced by
your application when building its interface. You will modify this file very frequently to change
the layout of your application. For your "Hello World!" application, this file will have following
content related to default layout −
<RelativeLayout xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:padding="@dimen/padding_medium"
android:text="@string/hello_world"
tools:context=".MainActivity" />
</RelativeLayout>
24 | P a g e
University of Dar es Salaam
your project's activity files and click Run icon from the tool bar. Android studio installs the
app on your AVD and starts it and if everything is fine with your set-up and application, it will
display following Emulator window −
25 | P a g e
University of Dar es Salaam
Android Resources Organizing & Accessing
There are many more items which you use to build a good Android application. Apart from
coding for the application, you take care of various other resources like static content that
your code uses, such as bitmaps, colors, layout definitions, user interface strings, animation
instructions, and more. These resources are always maintained separately in various sub-
directories under res/ directory of the project.
This chapter will explain you how you can organize your application resources, specify
alternative resources and access them in your applications.
1 anim/
XML files that define property animations. They are saved in res/anim/ folder and accessed from
the [Link] class.
2 color/
XML files that define a state list of colors. They are saved in res/color/ and accessed from
the [Link] class.
3 drawable/
Image files like .png, .jpg, .gif or XML files that are compiled into bitmaps, state lists, shapes,
animation drawable. They are saved in res/drawable/ and accessed from the [Link] class.
4 layout/
26 | P a g e
University of Dar es Salaam
XML files that define a user interface layout. They are saved in res/layout/ and accessed from
the [Link] class.
5 menu/
XML files that define application menus, such as an Options Menu, Context Menu, or Sub Menu.
They are saved in res/menu/ and accessed from the [Link] class.
6 raw/
Arbitrary files to save in their raw form. You need to call [Link]() with the
resource ID, which is [Link] to open such raw files.
7 values/
XML files that contain simple values, such as strings, integers, and colors. For example, here are
some filename conventions for resources you can create in this directory −
[Link] for resource arrays, and accessed from the [Link] class.
[Link] for resource integers, and accessed from the [Link] class.
[Link] for resource boolean, and accessed from the [Link] class.
[Link] for color values, and accessed from the [Link].
[Link] for dimension values, and accessed from the [Link] class.
[Link] for string values, and accessed from the [Link] class.
[Link] for styles, and accessed from the [Link] class.
8 xml/
Arbitrary XML files that can be read at runtime by calling [Link](). You can save various
configuration files here which will be used at run time.
Alternative Resources
Your application should provide alternative resources to support specific device configurations.
For example, you should include alternative drawable resources ( [Link] ) for different screen
resolution and alternative string resources for different languages. At runtime, Android detects
the current device configuration and loads the appropriate resources for your application.
To specify configuration-specific alternatives for a set of resources, follow the following steps −
27 | P a g e
University of Dar es Salaam
be used. You can check official documentation for a complete list of qualifiers for different type of
resources.
Save the respective alternative resources in this new directory. The resource files must be named
exactly the same as the default resource files as shown in the below example, but these files will have
content specific to the alternative. For example though image file name will be same but for high
resolution screen, its resolution will be high.
Example which specifies images for a default screen and alternative images for high resolution
screen.
MyProject/
app/
manifest/
[Link]
java/
[Link]
res/
drawable/
[Link]
[Link]
drawable-hdpi/
[Link]
[Link]
layout/
activity_main.xml
[Link]
values/
[Link]
Below is another example which specifies layout for a default language and alternative layout for
swahili language.
MyProject/
app/
manifest/
[Link]
java/
[Link]
res/
drawable/
[Link]
[Link]
drawable-hdpi/
[Link]
[Link]
layout/
activity_main.xml
[Link]
layout-sw/
[Link]
values/
[Link]
28 | P a g e
University of Dar es Salaam
Accessing Resources
During your application development you will need to access defined resources either in your
code, or in your layout XML files. Following section explains how to access your resources in
both the scenarios −
To access res/drawable/[Link] and set an ImageView you will use following code −
[Link]([Link]);
Here first line of the code make use of [Link] to get ImageView defined with
id myimageview in a Layout file. Second line of code makes use of [Link] to get an
image with name myimage available in drawable sub-directory under /res.
Example
<resources>
</resources>
Now you can set the text on a TextView object with ID msg using a resource ID as follows −
[Link]([Link]);
Example
29 | P a g e
University of Dar es Salaam
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
</LinearLayout>
This application code will load this layout for an Activity, in the onCreate() method as follows −
[Link](savedInstanceState);
setContentView([Link].activity_main);
<resources>
30 | P a g e
University of Dar es Salaam
<color name="opaque_red">#f00</color>
<string name="hello">Hello!</string>
</resources>
Now you can use these resources in the following layout file to set the text color and text string
as follows −
<EditText xmlns:android="[Link]
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="@string/hello" />
Now if you will go through previous chapter once again where I have explained Hello
World! example, and I'm sure you will have better understanding on all the concepts explained
in this chapter. So I highly recommend to check previous chapter for working example and check
how I have used various resources at very basic level.
31 | P a g e
University of Dar es Salaam
Android - UI Layouts
The basic building block for user interface is a View object which is created from the View class
and occupies a rectangular area on the screen and is responsible for drawing and event handling.
View is the base class for widgets, which are used to create interactive UI components like
buttons, text fields, etc.
The ViewGroup is a subclass of View and provides invisible container that hold other Views
or other ViewGroups and define their layout properties.
At third level we have different layouts which are subclasses of ViewGroup class and a typical
layout defines the visual structure for an Android user interface and can be created either at run
time using View/ViewGroupobjects or you can declare your layout using simple XML
file main_layout.xml which is located in the res/layout folder of your project.
LAYOUT PARAMS
This tutorial is more about creating your GUI based on layouts defined in XML file. A layout
may contain any type of widgets such as buttons, labels, textboxes, and so on. Following is a
simple example of XML file having LinearLayout −
<LinearLayout xmlns:android="[Link]
android:layout_width="fill_parent"
32 | P a g e
University of Dar es Salaam
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
</LinearLayout>
Once your layout has created, you can load the layout resource from your application code, in
your [Link]() callback implementation as shown below −
[Link](savedInstanceState);
setContentView([Link].activity_main);
33 | P a g e
University of Dar es Salaam
1 Linear Layout
LinearLayout is a view group that aligns all children in a single direction, vertically or
horizontally.
2 Relative Layout
3 Table Layout
4 Absolute Layout
5 Frame Layout
The FrameLayout is a placeholder on screen that you can use to display a single view.
6 List View
7 Grid View
Layout Attributes
Each layout has a set of attributes which define the visual properties of that layout. There are
few common attributes among all the layouts and their are other attributes which are specific
to that layout. Following are common attributes and will be applied to all the layouts:
1
android:id
34 | P a g e
University of Dar es Salaam
2
android:layout_width
3
android:layout_height
4
android:layout_marginTop
5
android:layout_marginBottom
6
android:layout_marginLeft
7
android:layout_marginRight
8
android:layout_gravity
9
android:layout_weight
This specifies how much of the extra space in the layout should be allocated to the View.
10
android:layout_x
11
android:layout_y
35 | P a g e
University of Dar es Salaam
12
android:layout_width
13
android:layout_width
14
android:paddingLeft
15
android:paddingRight
16
android:paddingTop
17
android:paddingBottom
Here width and height are the dimension of the layout/view which can be specified in terms of
dp (Density-independent Pixels), sp ( Scale-independent Pixels), pt ( Points which is 1/72 of an
inch), px( Pixels), mm ( Millimeters) and finally in (inches).
You can specify width and height with exact measurements but more often, you will use one of
these constants to set the width or height −
Gravity attribute plays important role in positioning the view object and it can take one or more
(separated by '|') of the following constant values.
36 | P a g e
University of Dar es Salaam
top 0x30 Push object to the top of its container, not changing its size.
bottom 0x50 Push object to the bottom of its container, not changing its size.
left 0x03 Push object to the left of its container, not changing its size.
right 0x05 Push object to the right of its container, not changing its size.
center_vertical 0x10 Place object in the vertical center of its container, not changing its
size.
fill_vertical 0x70 Grow the vertical size of the object if needed so it completely fills
its container.
center_horizontal 0x01 Place object in the horizontal center of its container, not changing
its size.
fill_horizontal 0x07 Grow the horizontal size of the object if needed so it completely
fills its container.
center 0x11 Place the object in the center of its container in both the vertical
and horizontal axis, not changing its size.
fill 0x77 Grow the horizontal and vertical size of the object if needed so it
completely fills its container.
clip_vertical 0x80 Additional option that can be set to have the top and/or bottom
edges of the child clipped to its container's bounds. The clip will be
based on the vertical gravity: a top gravity will clip the bottom
edge, a bottom gravity will clip the top edge, and neither will clip
both edges.
clip_horizontal 0x08 Additional option that can be set to have the left and/or right
edges of the child clipped to its container's bounds. The clip will be
based on the horizontal gravity: a left gravity will clip the right
37 | P a g e
University of Dar es Salaam
edge, a right gravity will clip the left edge, and neither will clip both
edges.
start 0x00800003 Push object to the beginning of its container, not changing its size.
end 0x00800005 Push object to the end of its container, not changing its size.
View Identification
A view object may have a unique ID assigned to it which will identify the View uniquely within
the tree. The syntax for an ID, inside an XML tag is −
android:id="@+id/my_button"
The at-symbol (@) at the beginning of the string indicates that the XML parser should parse and
expand the rest of the ID string and identify it as an ID resource.
The plus-symbol (+) means that this is a new resource name that must be created and added to our
resources. To create an instance of the view object and capture it from the layout, use the following
−
38 | P a g e
University of Dar es Salaam
Android - UI Controls
Input controls are the interactive components in your app's user interface. Android provides a wide variety
of controls you can use in your UI, such as buttons, text fields, seek bars, check box, zoom buttons, toggle
buttons, and many more.
UI ELEMENTS
A View is an object that draws something on the screen that the user can interact with and
a ViewGroup is an object that holds other View (and ViewGroup) objects in order to define
the layout of the user interface.
You define your layout in an XML file which offers a human-readable structure for the layout,
similar to HTML. For example, a simple vertical layout with a text view and a button looks like
this −
<LinearLayout xmlns:android="[Link]
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
39 | P a g e
University of Dar es Salaam
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
</LinearLayout>
Android UI Controls
There are number of UI controls provided by Android that allow you to build the graphical user
interface for your app.
1 TextView
2 EditText
EditText is a predefined subclass of TextView that includes rich editing capabilities.
3 AutoCompleteTextView
The AutoCompleteTextView is a view that is similar to EditText, except that it shows a list
of completion suggestions automatically while the user is typing.
4 Button
A push-button that can be pressed, or clicked, by the user to perform an action.
5 ImageButton
An ImageButton is an AbsoluteLayout which enables you to specify the exact location of its
children. This shows a button with an image (instead of text) that can be pressed or clicked
by the user.
6 CheckBox
An on/off switch that can be toggled by the user. You should use check box when presenting
users with a group of selectable options that are not mutually exclusive.
7 ToggleButton
40 | P a g e
University of Dar es Salaam
An on/off button with a light indicator.
8 RadioButton
The RadioButton has two states: either checked or unchecked.
9 RadioGroup
A RadioGroup is used to group together one or more RadioButtons.
10 ProgressBar
The ProgressBar view provides visual feedback about some ongoing tasks, such as when you
are performing a task in the background.
11 Spinner
A drop-down list that allows users to select one value from a set.
12 TimePicker
The TimePicker view enables users to select a time of the day, in either 24-hour mode or
AM/PM mode.
13 DatePicker
The DatePicker view enables users to select a date of the day.
Create UI Controls
Input controls are the interactive components in your app's user interface. Android provides a
wide variety of controls you can use in your UI, such as buttons, text fields, seek bars, check
box, zoom buttons, toggle buttons, and many more.
As explained in previous chapter, a view object may have a unique ID assigned to it which will
identify the View uniquely within the tree. The syntax for an ID, inside an XML tag is −
android:id="@+id/text_id"
To create a UI Control/View/Widget you will have to define a view/widget in the layout file and
assign it a unique ID as follows −
<LinearLayout xmlns:android="[Link]
41 | P a g e
University of Dar es Salaam
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
</LinearLayout>
Then finally create an instance of the Control object and capture it from the layout, use the
following −
42 | P a g e
University of Dar es Salaam
Android - Activities
An activity represents a single screen with a user interface just like window or frame of [Link] activity
is the subclass of ContextThemeWrapper class.
If you have worked with C, C++ or Java programming language then you must have seen that
your program starts from main() function. Very similar way, Android system initiates its
program with in an Activity starting with a call on onCreate() callback method. There is a
sequence of callback methods that start up an activity and a sequence of callback methods that
tear down an activity as shown in the below Activity life cycle diagram: (image courtesy :
[Link] )
43 | P a g e
University of Dar es Salaam
The Activity class defines the following call backs i.e. events. You don't need to implement all
the callbacks methods. However, it's important that you understand each one and implement
those that ensure your app behaves the way users expect.
onCreate()
1
This is the first callback and called when the activity is first created.
onStart()
2
This callback is called when the activity becomes visible to the user.
onResume()
3
This is called when the user starts interacting with the application.
onPause()
4 The paused activity does not receive user input and cannot execute any code and called when
the current activity is being paused and the previous activity is being resumed.
onStop()
5
This callback is called when the activity is no longer visible.
onDestroy()
6
This callback is called before the activity is destroyed by the system.
onRestart()
7
This callback is called when the activity restarts after stopping it.
Example
This example will take you through simple steps to show Android application activity life cycle.
Follow the following steps to modify the Android application we created in Hello World
Example chapter –
44 | P a g e
University of Dar es Salaam
Step Description
1 You will use Android studio to create an Android application and name it as HelloWorld under a
package [Link] as explained in the Hello World Example chapter.
2 Modify main activity file [Link] as explained below. Keep rest of the files unchanged.
3 Run the application to launch Android emulator and verify the result of the changes done in the
application.
package [Link];
import [Link];
import [Link];
import [Link];
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
45 | P a g e
University of Dar es Salaam
/** Called when the activity is about to become visible. */
@Override
[Link]();
@Override
[Link]();
@Override
[Link]();
@Override
[Link]();
@Override
46 | P a g e
University of Dar es Salaam
public void onDestroy() {
[Link]();
An activity class loads all the UI component using the XML file available in res/layout folder of the
project. Following statement loads UI components from res/layout/activity_main.xml file:
setContentView([Link].activity_main);
An application can have one or more activities without any restrictions. Every activity you define
for your application must be declared in your [Link] file and the main activity for
your app must be declared in the manifest with an <intent-filter> that includes the MAIN action
and LAUNCHER category as follows:
<manifest xmlns:android="[Link]
package="[Link]">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
</application>
47 | P a g e
University of Dar es Salaam
</manifest>
If either the MAIN action or LAUNCHER category are not declared for one of your activities,
then your app icon will not appear in the Home screen's list of apps.
Let's try to run our modified Hello World! application we just modified. I assume you had
created your AVD while doing environment setup. To run the app from Android studio, open
one of your project's activity files and click Run icon from the toolbar. Android studio installs
the app on your AVD and starts it and if everything is fine with your setup and application, it will
display Emulator window and you should see following log messages in LogCatwindow in
Android studio −
08-23 10:32:07.682 4480-4480/[Link] D/Android :: The onCreate() event
08-23 10:32:07.683 4480-4480/[Link] D/Android :: The onStart() event
08-23 10:32:07.685 4480-4480/[Link] D/Android :: The onResume() event
Let us try to click lock screen button on the Android emulator and it will generate following
events messages in LogCat window in android studio:
08-23 10:32:53.230 4480-4480/[Link] D/Android :: The onPause() event
08-23 10:32:53.294 4480-4480/[Link] D/Android :: The onStop() event
Let us again try to unlock your screen on the Android emulator and it will generate following
events messages in LogCat window in Android studio:
08-23 10:34:41.390 4480-4480/[Link] D/Android :: The onStart() event
08-23 10:34:41.392 4480-4480/[Link] D/Android :: The onResume() event
Next, let us again try to click Back button on the Android emulator and it will generate
following events messages in LogCat window in Android studio and this completes the Activity
Life Cycle for an Android Application.
08-23 10:37:24.806 4480-4480/[Link] D/Android :: The onPause() event
08-23 10:37:25.668 4480-4480/[Link] D/Android :: The onStop() event
08-23 10:37:25.669 4480-4480/[Link] D/Android :: The onDestroy() event
48 | P a g e
University of Dar es Salaam
Android - Services
A service is a component that runs in the background to perform long-running operations without needing
to interact with the user and it works even if application is destroyed. A service can essentially take two
states −
1
Started
2
Bound
A service has life cycle callback methods that you can implement to monitor changes in the
service's state and you can perform work at the appropriate stage. The following diagram on
the left shows the life cycle when the service is created with startService() and the diagram on
the right shows the life cycle when the service is created with bindService(): (image courtesy :
[Link] )
49 | P a g e
University of Dar es Salaam
To create an service, you create a Java class that extends the Service base class or one of its
existing subclasses. The Service base class defines various callback methods and the most
important are given below. You don't need to implement all the callbacks methods. However,
it's important that you understand each one and implement those that ensure your app behaves
the way users expect.
1
onStartCommand()
The system calls this method when another component, such as an activity, requests that the
service be started, by calling startService(). If you implement this method, it is your
50 | P a g e
University of Dar es Salaam
responsibility to stop the service when its work is done, by
calling stopSelf() or stopService() methods.
2
onBind()
The system calls this method when another component wants to bind with the service by
calling bindService(). If you implement this method, you must provide an interface that clients
use to communicate with the service, by returning an IBinder object. You must always
implement this method, but if you don't want to allow binding, then you should return null.
3
onUnbind()
The system calls this method when all clients have disconnected from a particular interface
published by the service.
4
onRebind()
The system calls this method when new clients have connected to the service, after it had
previously been notified that all had disconnected in its onUnbind(Intent).
5
onCreate()
The system calls this method when the service is first created
using onStartCommand() or onBind(). This call is required to perform one-time set-up.
6
onDestroy()
The system calls this method when the service is no longer used and is being destroyed. Your
service should implement this to clean up any resources such as threads, registered listeners,
receivers, etc.
51 | P a g e
University of Dar es Salaam
The following skeleton service demonstrates each of the life cycle methods −
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
int mStartMode;
IBinder mBinder;
boolean mAllowRebind;
@Override
@Override
52 | P a g e
University of Dar es Salaam
public int onStartCommand(Intent intent, int flags, int startId) {
return mStartMode;
@Override
return mBinder;
@Override
return mAllowRebind;
@Override
/** Called when The service is no longer used and is being destroyed */
@Override
53 | P a g e
University of Dar es Salaam
Example
This example will take you through simple steps to show how to create your own Android
Service. Follow the following steps to modify the Android application we created in Hello World
Example chapter −
Step Description
1 You will use Android StudioIDE to create an Android application and name it as My
Application under a package [Link] as explained in the Hello World
Example chapter.
2 Modify main activity file [Link] to add startService() and stopService() methods.
3 Create a new java file [Link] under the package [Link] Application. This file will
have implementation of Android service related methods.
4 Define your service in [Link] file using <service.../> tag. An application can have
one or more services without any restrictions.
5 Modify the default content of res/layout/activity_main.xml file to include two buttons in linear
layout.
6 No need to change any constants in res/values/[Link] file. Android studio take care of string
values
7 Run the application to launch Android emulator and verify the result of the changes done in
the application.
Following is the content of the modified main activity file [Link]. This file can
include each of the fundamental life cycle methods. We have
added startService() and stopService() methods to start and stop the service.
54 | P a g e
University of Dar es Salaam
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
55 | P a g e
University of Dar es Salaam
stopService(new Intent(getBaseContext(), [Link]));
Following is the content of [Link]. This file can have implementation of one or more
methods associated with Service based on requirements. For now we are going to implement
only two methods onStartCommand() and onDestroy() −
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
*/
@Nullable
@Override
return null;
@Override
56 | P a g e
University of Dar es Salaam
[Link](this, "Service Started", Toast.LENGTH_LONG).show();
return START_STICKY;
@Override
[Link]();
Following will the modified content of [Link] file. Here we have added <service.../>
tag to include our service −
<manifest xmlns:android="[Link]
package="[Link]">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
57 | P a g e
University of Dar es Salaam
</intent-filter>
</activity>
</application>
</manifest>
<RelativeLayout xmlns:android="[Link]
xmlns:tools="[Link] android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Example of services"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
58 | P a g e
University of Dar es Salaam
android:layout_height="wrap_content"
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="Start Services"
android:onClick="startService"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop Services"
59 | P a g e
University of Dar es Salaam
android:id="@+id/button"
android:onClick="stopService"
android:layout_below="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_alignRight="@+id/button2"
android:layout_alignEnd="@+id/button2" />
</RelativeLayout>
Let's try to run our modified Hello World! application we just modified. I assume you had
created your AVD while doing environment setup. To run the app from Android studio, open
one of your project's activity files and click Run icon from the tool bar. Android Studio installs
the app on your AVD and starts it and if everything is fine with your set-up and application, it
will display following Emulator window −
60 | P a g e
University of Dar es Salaam
Now to start your service, let's click on Start Service button, this will start the service and as
per our programming in onStartCommand() method, a message Service Started will appear on the
bottom of the the simulator as follows −
To stop the service, you can click the Stop Service button.
61 | P a g e
University of Dar es Salaam
Android - Broadcast Receivers
Broadcast Receivers simply respond to broadcast messages from other applications or from the system
itself. These messages are sometime called events or intents. For example, applications can also initiate
broadcasts to let other applications know that some data has been downloaded to the device and is available
for them to use, so this is broadcast receiver who will intercept this communication and will initiate
appropriate action.
There are following two important steps to make BroadcastReceiver works for the system
broadcasted intents −
There is one additional steps in case you are going to implement your custom intents then you
will have to create and broadcast those intents.
@Override
62 | P a g e
University of Dar es Salaam
BROADCAST-RECEIVER
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="[Link].BOOT_COMPLETED">
</action>
</intent-filter>
</receiver>
</application>
There are several system generated events defined as final static fields in the Intent class. The
following table lists a few important system events.
63 | P a g e
University of Dar es Salaam
[Link] Event Constant & Description
[Link].BATTERY_CHANGED
1
Sticky broadcast containing the charging state, level, and other information about the battery.
[Link].BATTERY_LOW
2
Indicates low battery condition on the device.
[Link].BATTERY_OKAY
3
Indicates the battery is now okay after being low.
[Link].BOOT_COMPLETED
4
This is broadcast once, after the system has finished booting.
[Link].BUG_REPORT
5
Show activity for reporting a bug.
[Link]
6
Perform a call to someone specified by the data.
[Link].CALL_BUTTON
7 The user pressed the "call" button to go to the dialer or other appropriate UI for placing a
call.
[Link].DATE_CHANGED
8
The date has changed.
[Link]
9
Have the device reboot.
64 | P a g e
University of Dar es Salaam
public void broadcastIntent(View view) {
[Link]("[Link].CUSTOM_INTENT");
sendBroadcast(intent);
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="[Link].CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
Example
This example will explain you how to create BroadcastReceiver to intercept custom intent. Once
you are familiar with custom intent, then you can program your application to intercept system
generated intents. So let's follow the following steps to modify the Android application we
created in Hello World Example chapter –
65 | P a g e
University of Dar es Salaam
Step Description
1 You will use Android studio to create an Android application and name it as My
Application under a package [Link] as explained in the Hello World
Example chapter.
4 An application can handle one or more custom and system intents without any restrictions.
Every intent you want to intercept must be registered in your [Link] file using
<receiver.../> tag
6 No need to modify the string file, Android studio take care of [Link] file.
7 Run the application to launch Android emulator and verify the result of the changes done in
the application.
Following is the content of the modified main activity file [Link]. This file can
include each of the fundamental life cycle methods. We have added broadcastIntent() method to
broadcast a custom intent.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
66 | P a g e
University of Dar es Salaam
public class MainActivity extends Activity {
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
[Link]("[Link].CUSTOM_INTENT"); sendBroadcast(intent);
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
67 | P a g e
University of Dar es Salaam
* Created by Coict7 on 01/19/2018.
*/
@Override
Following will the modified content of [Link] file. Here we have added
<receiver.../> tag to include our service:
<manifest xmlns:android="[Link]
package="[Link]">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
68 | P a g e
University of Dar es Salaam
</activity>
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="[Link].CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
</manifest>
<RelativeLayout
xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
69 | P a g e
University of Dar es Salaam
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Example of Broadcast"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
70 | P a g e
University of Dar es Salaam
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="Broadcast Intent"
android:onClick="broadcastIntent"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
</RelativeLayout>
Let's try to run our modified Hello World! application we just modified. I assume you had
created your AVD while doing environment set-up. To run the app from Android studio, open
one of your project's activity files and click Run icon from the tool bar. Android Studio installs
the app on your AVD and starts it and if everything is fine with your set-up and application, it
will display following Emulator window −
Now to broadcast our custom intent, let's click on Broadcast Intent button, this will
broadcast our custom intent "[Link].CUSTOM_INTENT"which will be intercepted by our
71 | P a g e
University of Dar es Salaam
registered BroadcastReceiver i.e. MyReceiver and as per our implemented logic a toast will
appear on the bottom of the the simulator as follows −
You can try implementing other BroadcastReceiver to intercept system generated intents like
system boot up, date changed, low battery etc.
72 | P a g e
University of Dar es Salaam
Android - Content Providers
A content provider component supplies data from one application to others on request. Such requests are
handled by the methods of the ContentResolver class. A content provider can use different ways to store its
data and the data can be stored in a database, in files, or even over a network.
CONTENTPROVIDER
sometimes it is required to share data across applications. This is where content providers
become very useful.
Content providers let you centralize content in one place and have many different applications
access it as needed. A content provider behaves very much like a database where you can query
it, edit its content, as well as add or delete content using insert(), update(), delete(), and query()
methods. In most cases this data is stored in an SQlite database.
Content URIs
To query a content provider, you specify the query string in the form of a URI which has
following format −
<prefix>://<authority>/<data_type>/<id>
73 | P a g e
University of Dar es Salaam
Here is the detail of various parts of the URI −
prefix
1
This is always set to content://
authority
2 This specifies the name of the content provider, for example contacts, browser etc. For third-
party content providers, this could be the fully qualified name, such as [Link]
data_type
3 This indicates the type of data that this particular provider provides. For example, if you are
getting all the contacts from the Contactscontent provider, then the data path would
be people and URI would look like thiscontent://contacts/people
id
4 This specifies the specific record requested. For example, if you are looking for contact
number 5 in the Contacts content provider then URI would look like
this content://contacts/people/5.
First of all you need to create a Content Provider class that extends the ContentProviderbaseclass.
Second, you need to define your content provider URI address which will be used to access the
content.
Next you will need to create your own database to keep the content. Usually, Android uses SQLite
database and framework needs to override onCreate() method which will use SQLite Open Helper
method to create or open the provider's database. When your application is launched,
the onCreate() handler of each of its Content Providers is called on the main application thread.
Next you will have to implement Content Provider queries to perform different database specific
operations.
Finally register your Content Provider in your activity file using <provider> tag.
Here is the list of methods which you need to override in Content Provider class to have your
Content Provider working −
74 | P a g e
University of Dar es Salaam
CONTENTPROVIDER
query() This method receives a request from a client. The result is returned as a Cursor object.
delete() This method deletes an existing record from the content provider.
update() This method updates an existing record from the content provider.
getType() This method returns the MIME type of the data at the given URI.
Example
This example will explain you how to create your own ContentProvider. So let's follow the
following steps to similar to what we followed while creating Hello World Example−
Step Description
1 You will use Android StudioIDE to create an Android application and name it as My
Application under a package [Link], with blank Activity.
75 | P a g e
University of Dar es Salaam
4 Register your content provider in your [Link] file using <provider.../> tag
5 Modify the default content of res/layout/activity_main.xml file to include a small GUI to add
students records.
7 Run the application to launch Android emulator and verify the result of the changes done in
the application.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
76 | P a g e
University of Dar es Salaam
import [Link];
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
[Link]([Link],
((EditText)findViewById([Link].editText2)).getText().toString());
[Link]([Link],
((EditText)findViewById([Link].editText3)).getText().toString());
StudentsProvider.CONTENT_URI, values);
[Link](getBaseContext(),
[Link](), Toast.LENGTH_LONG).show();
77 | P a g e
University of Dar es Salaam
Uri students = [Link](URL);
if ([Link]()) {
do{
[Link](this,
[Link]([Link](StudentsProvider._ID)) +
Toast.LENGTH_SHORT).show();
} while ([Link]());
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
78 | P a g e
University of Dar es Salaam
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
static{
79 | P a g e
University of Dar es Salaam
}
/**
*/
/**
*/
DatabaseHelper(Context context){
@Override
80 | P a g e
University of Dar es Salaam
[Link](CREATE_DB_TABLE);
@Override
onCreate(db);
@Override
/**
*/
db = [Link]();
@Override
/**
81 | P a g e
University of Dar es Salaam
*/
/**
*/
if (rowID > 0) {
getContext().getContentResolver().notifyChange(_uri, null);
return _uri;
@Override
[Link](STUDENTS_TABLE_NAME);
switch ([Link](uri)) {
case STUDENTS:
[Link](STUDENTS_PROJECTION_MAP);
break;
case STUDENT_ID:
82 | P a g e
University of Dar es Salaam
break;
default:
/**
*/
sortOrder = NAME;
/**
*/
[Link](getContext().getContentResolver(), uri);
return c;
@Override
int count = 0;
switch ([Link](uri)){
case STUDENTS:
break;
83 | P a g e
University of Dar es Salaam
case STUDENT_ID:
String id = [Link]().get(1);
( ? "
break;
default:
getContext().getContentResolver().notifyChange(uri, null);
return count;
@Override
int count = 0;
switch ([Link](uri)) {
case STUDENTS:
break;
case STUDENT_ID:
( ? "
84 | P a g e
University of Dar es Salaam
AND (" +selection + ')' : ""), selectionArgs);
break;
default:
getContext().getContentResolver().notifyChange(uri, null);
return count;
@Override
switch ([Link](uri)){
/**
*/
case STUDENTS:
return "[Link]/[Link]";
/**
*/
case STUDENT_ID:
return "[Link]/[Link]";
default:
85 | P a g e
University of Dar es Salaam
}
Following will the modified content of [Link] file. Here we have added
<provider.../> tag to include our content provider:
<manifest xmlns:android="[Link]
package="[Link]">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
<provider android:name="StudentsProvider"
android:authorities="[Link]"/>
</application>
</manifest>
<RelativeLayout xmlns:android="[Link]
86 | P a g e
University of Dar es Salaam
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="[Link]">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Content provider"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true" />
87 | P a g e
University of Dar es Salaam
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="Add Name"
android:layout_below="@+id/editText3"
android:layout_alignRight="@+id/textView2"
android:layout_alignEnd="@+id/textView2"
android:layout_alignLeft="@+id/textView2"
android:layout_alignStart="@+id/textView2"
android:onClick="onClickAddName"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_below="@+id/imageButton"
android:layout_alignRight="@+id/imageButton"
android:layout_alignEnd="@+id/imageButton" />
88 | P a g e
University of Dar es Salaam
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_alignTop="@+id/editText"
android:layout_alignLeft="@+id/textView1"
android:layout_alignStart="@+id/textView1"
android:layout_alignRight="@+id/textView1"
android:layout_alignEnd="@+id/textView1"
android:hint="Name"
android:textColorHint="@android:color/holo_blue_light" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText3"
android:layout_below="@+id/editText"
android:layout_alignLeft="@+id/editText2"
android:layout_alignStart="@+id/editText2"
android:layout_alignRight="@+id/editText2"
android:layout_alignEnd="@+id/editText2"
android:hint="Grade"
android:textColorHint="@android:color/holo_blue_bright" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Retrive student"
89 | P a g e
University of Dar es Salaam
android:id="@+id/button"
android:layout_below="@+id/button2"
android:layout_alignRight="@+id/editText3"
android:layout_alignEnd="@+id/editText3"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:onClick="onClickRetrieveStudents"/>
</RelativeLayout>
<resources>
</resources>;
Let's try to run our modified My Application application we just created. I assume you had
created your AVD while doing environment set-up. To run the app from Android Studio IDE,
open one of your project's activity files and click Run icon from the tool bar. Android Studio
installs the app on your AVD and starts it and if everything is fine with your set-up and
application, it will display following Emulator window, be patience because it may take sometime
based on your computer speed −
90 | P a g e
University of Dar es Salaam
Now let's enter student Name and Grade and finally click on Add Namebutton, this will add
student record in the database and will flash a message at the bottom showing ContentProvider
URI along with record number added in the database. This operation makes use of
our insert() method. Let's repeat this process to add few more students in the database of our
content provider.
91 | P a g e
University of Dar es Salaam
Once you are done with adding records in the database, now its time to ask ContentProvider
to give us those records back, so let's click Retrieve Students button which will fetch and
display all the records one by one which is as per our the implementation of
our query() method.
You can write activities against update and delete operations by providing callback functions
in [Link] file and then modify user interface to have buttons for update and deleted
operations in the same way as we have done for add and read operations.
This way you can use existing Content Provider like Address Book or you can use Content
Provider concept in developing nice database oriented applications where you can perform all
sort of database operations like read, write, update and delete as explained above in the example.
92 | P a g e
University of Dar es Salaam
Android – Fragments
A Fragment is a piece of an activity which enable more modular activity design. It will not be wrong if we
say, a fragment is a kind of sub-activity.
A fragment has its own layout and its own behaviour with its own life cycle callbacks.
You can add or remove fragments in an activity while the activity is running.
You can combine multiple fragments in a single activity to build a multi-pane UI.
Fragment life cycle is closely related to the life cycle of its host activity which means when the activity
is paused, all the fragments available in the activity will also be stopped.
Fragments were added to the Android API in Honeycomb version of Android which API version 11.
You create fragments by extending Fragment class and You can insert a fragment into your
activity layout by declaring the fragment in the activity's layout file, as a <fragment> element.
Prior to fragment introduction, we had a limitation because we can show only a single activity
on the screen at one given point in time. So we were not able to divide device screen and
control different parts separately. But with the introduction of fragment we got more flexibility
and removed the limitation of having a single activity on the screen at a time. Now we can have
a single activity but each activity can comprise of multiple fragments which will have their own
layout, events and complete life cycle.
Following is a typical example of how two UI modules defined by fragments can be combined
into one activity for a tablet design, but separated for a handset design.
93 | P a g e
University of Dar es Salaam
The application can embed two fragments in Activity A, when running on a tablet-sized device.
However, on a handset-sized screen, there's not enough room for both fragments, so Activity
A includes only the fragment for the list of articles, and when the user selects an article, it starts
Activity B, which includes the second fragment to read the article.
94 | P a g e
University of Dar es Salaam
FRAGMENT LIFECYCLE
Here is the list of methods which you can to override in your fragment class −
onAttach()The fragment instance is associated with an activity [Link] fragment and the activity
is not fully initialized. Typically you get in this method a reference to the activity which uses the
fragment for further initialization work.
onCreate() The system calls this method when creating the fragment. You should initialize essential
components of the fragment that you want to retain when the fragment is paused or stopped, then
resumed.
onCreateView() The system calls this callback when it's time for the fragment to draw its user
interface for the first time. To draw a UI for your fragment, you must return a View component
from this method that is the root of your fragment's layout. You can return null if the fragment does
not provide a UI.
onPause() The system calls this method as the first indication that the user is leaving the fragment.
This is usually where you should commit any changes that should be persisted beyond the current
user session.
onDestroy()onDestroy() called to do final clean up of the fragment's state but Not guaranteed to
be called by the Android platform.
First of all decide how many fragments you want to use in an activity. For example let's we want to
use two fragments to handle landscape and portrait modes of the device.
95 | P a g e
University of Dar es Salaam
Next based on number of fragments, create classes which will extend the Fragment class. The
Fragment class has above mentioned callback functions. You can override any of the functions based
on your requirements.
Corresponding to each fragment, you will need to create layout files in XML file. These files will have
layout for the defined fragments.
Finally modify activity file to define the actual logic of replacing fragments based on your requirement.
Types of Fragments
Basically fragments are divided as three stages as shown below.
Single frame fragments − Single frame fragments are using for hand hold devices like mobiles, here we
can show only one fragment as a view.
List fragments − fragments having special list view is called as list fragment
Fragments transaction − Using with fragment transaction. we can move one fragment to another
fragment.
96 | P a g e
University of Dar es Salaam
Android - Intents and Filters
An Android Intent is an abstract description of an operation to be performed. It can be used
with startActivity to launch an Activity, broadcastIntent to send it to any interested
BroadcastReceiver components, and startService(Intent) or bindService(Intent,
ServiceConnection, int) to communicate with a background Service.
The intent itself, an Intent object, is a passive data structure holding an abstract description of
an operation to be performed.
For example, let's assume that you have an Activity that needs to launch an email client and
sends an email using your Android device. For this purpose, your Activity would send an
ACTION_SEND along with appropriate chooser, to the Android Intent Resolver. The specified
chooser gives the proper interface for the user to pick how to send your email data.
[Link](Intent.EXTRA_EMAIL, recipients);
[Link](Intent.EXTRA_SUBJECT, [Link]().toString());
[Link](Intent.EXTRA_TEXT, [Link]().toString());
Above syntax is calling startActivity method to start an email activity and result should be as
shown below −
97 | P a g e
University of Dar es Salaam
For example, assume that you have an Activity that needs to open URL in a web browser on
your Android device. For this purpose, your Activity will send ACTION_WEB_SEARCH Intent
to the Android Intent Resolver to open given URL in the web browser. The Intent Resolver
parses through a list of Activities and chooses the one that would best match your Intent, in this
case, the Web Browser Activity. The Intent Resolver then passes your web page to the web
browser and starts the Web Browser Activity.
String q = "coict";
[Link]([Link], q);
startActivity(intent);
Above example will search as coict on android search engine and it gives the result of coict in
your an activity
There are separate mechanisms for delivering intents to each type of component − activities,
services, and broadcast receivers.
[Link]()
1
The Intent object is passed to this method to launch a new activity or get an existing activity
to do something new.
[Link]()
2
The Intent object is passed to this method to initiate a service or deliver new instructions to
an ongoing service.
[Link]()
3
The Intent object is passed to this method to deliver the message to all interested broadcast
receivers.
98 | P a g e
University of Dar es Salaam
Intent Objects
An Intent object is a bundle of information which is used by the component that receives the
intent as well as information used by the Android system.
An Intent object can contain the following components based on what it is communicating or
going to perform −
Action
This is mandatory part of the Intent object and is a string naming the action to be performed —
or, in the case of broadcast intents, the action that took place and is being reported. The action
largely determines how the rest of the intent object is structured . The Intent class defines a
number of action constants corresponding to different intents. Here is a list of Android Intent
Standard Actions
The action in an Intent object can be set by the setAction() method and read by getAction().
Data
Adds a data specification to an intent filter. The specification can be just a data type (the
mimeType attribute), just a URI, or both a data type and a URI. A URI is specified by separate
attributes for each of its parts −
These attributes that specify the URL format are optional, but also mutually dependent −
If a scheme is not specified for the intent filter, all the other URI attributes are ignored.
If a host is not specified for the filter, the port attribute and all the path attributes are ignored.
The setData() method specifies data only as a URI, setType() specifies it only as a MIME type,
and setDataAndType() specifies it as both a URI and a MIME type. The URI is read by getData()
and the type by getType().
ACTION_VIEW content://contacts/people/1
1
Display information about the person whose identifier is "1".
ACTION_DIAL content://contacts/people/1
2
Display the phone dialer with the person filled in.
99 | P a g e
University of Dar es Salaam
ACTION_VIEW [Link]
3
Display the phone dialer with the given number filled in.
ACTION_DIAL [Link]
4
Display the phone dialer with the given number filled in.
ACTION_EDIT content://contacts/people/1
5
Edit information about the person whose identifier is "1".
ACTION_VIEW content://contacts/people/
6
Display a list of people, which the user can browse through.
ACTION_SET_WALLPAPER
7
Show settings for choosing wallpaper
ACTION_SYNC
8
It going to be synchronous the data,Constant Value is [Link]
ACTION_SYSTEM_TUTORIAL
9
It will start the platform-defined tutorial(Default tutorial or start up tutorial)
ACTION_TIMEZONE_CHANGED
10
It intimates when time zone has changed
ACTION_UNINSTALL_PACKAGE
11
It is used to run default uninstaller
Category
The category is an optional part of Intent object and it's a string containing additional information
about the kind of component that should handle the intent. The addCategory() method places
a category in an Intent object, removeCategory() deletes a category previously added, and
getCategories() gets the set of all categories currently in the object. You can check detail on
Intent Filters in below section to understand how do we use categories to choose appropriate
activity corresponding to an Intent.
100 | P a g e
University of Dar es Salaam
Extras
This will be in key-value pairs for additional information that should be delivered to the
component handling the intent. The extras can be set and read using the putExtras() and
getExtras() methods respectively.
Flags
These flags are optional part of Intent object and instruct the Android system how to launch an
activity, and how to treat it after it's launched etc.
FLAG_ACTIVITY_CLEAR_TASK
1 If set in an Intent passed to [Link](), this flag will cause any existing task that
would be associated with the activity to be cleared before the activity is started. That is, the
activity becomes the new root of an otherwise empty task, and any old activities are finished.
This can only be used in conjunction with FLAG_ACTIVITY_NEW_TASK.
FLAG_ACTIVITY_CLEAR_TOP
2 If set, and the activity being launched is already running in the current task, then instead of
launching a new instance of that activity, all of the other activities on top of it will be closed
and this Intent will be delivered to the (now on top) old activity as a new Intent.
FLAG_ACTIVITY_NEW_TASK
3 This flag is generally used by activities that want to present a "launcher" style behavior: they
give the user a list of separate things that can be done, which otherwise run completely
independently of the activity launching them.
Component Name
This optional field is an android ComponentName object representing either Activity, Service
or BroadcastReceiver class. If it is set, the Intent object is delivered to an instance of the
designated class otherwise Android uses other information in the Intent object to locate a
suitable target.
Types of Intents
There are following two types of intents supported by Android
101 | P a g e
University of Dar es Salaam
Explicit Intents
Explicit intent going to be connected internal world of application,suppose if you wants to
connect one activity to another activity, we can do this quote by explicit intent, below image is
connecting first activity to second activity by clicking button.
These intents designate the target component by its name and they are typically used for
application-internal messages - such as an activity starting a subordinate service or launching a
sister activity. For example −
// Starts TargetActivity
102 | P a g e
University of Dar es Salaam
startActivity(i);
Implicit Intents
These intents do not name a target and the field for the component name is left blank. Implicit
intents are often used to activate components in other applications. For example −
Intent read1=new Intent();
[Link]([Link].ACTION_VIEW);
[Link]([Link].CONTENT_URI);
startActivity(read1);
The target component which receives the intent can use the getExtras()method to get the
extra data sent by the source component. For example −
103 | P a g e
University of Dar es Salaam
Example
Following example shows the functionality of a Android Intent to launch various Android built-
in applications.
Step Description
1 You will use Android studio IDE to create an Android application and name it as My
Application under a package [Link].saira_000.myapplication.
2 Modify src/main/java/[Link] file and add the code to define two listeners
corresponding two buttons ie. Start Browser and Start Phone.
3 Modify layout XML file res/layout/activity_main.xml to add three buttons in linear layout.
4 Run the application to launch Android emulator and verify the result of the changes done in
the application.
package [Link].saira_000.myapplication;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
Button b1,b2;
104 | P a g e
University of Dar es Salaam
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
b1=(Button)findViewById([Link]);
[Link](new [Link]() {
@Override
[Link]("[Link]
startActivity(i);
});
b2=(Button)findViewById([Link].button2);
[Link](new [Link]() {
@Override
[Link]("[Link]
startActivity(i);
});
105 | P a g e
University of Dar es Salaam
Following will be the content of res/layout/activity_main.xml file −
<RelativeLayout xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Intent Example"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:textColor="#ff87ff09"
106 | P a g e
University of Dar es Salaam
android:textSize="30dp"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_below="@+id/imageButton"
android:layout_alignRight="@+id/imageButton"
android:layout_alignEnd="@+id/imageButton" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Browser"
android:id="@+id/button"
android:layout_alignTop="@+id/editText"
android:layout_alignRight="@+id/textView1"
android:layout_alignEnd="@+id/textView1"
107 | P a g e
University of Dar es Salaam
android:layout_alignLeft="@+id/imageButton"
android:layout_alignStart="@+id/imageButton" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Phone"
android:id="@+id/button2"
android:layout_below="@+id/button"
android:layout_alignLeft="@+id/button"
android:layout_alignStart="@+id/button"
android:layout_alignRight="@+id/textView2"
android:layout_alignEnd="@+id/textView2" />
</RelativeLayout>
<resources>
</resources>
<manifest xmlns:android="[Link]
package="[Link].saira_000.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
108 | P a g e
University of Dar es Salaam
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
</application>
</manifest>
Let's try to run your My Application application. I assume you had created your AVD while
doing environment setup. To run the app from Android Studio, open one of your project's
activity files and click Run icon from the [Link] Studio installs the app on your AVD
and starts it and if everything is fine with your setup and application, it will display following
Emulator window −
109 | P a g e
University of Dar es Salaam
Now click on Start Browser button, which will start a browser configured and display
[Link] as shown below −
Similar way you can launch phone interface using Start Phone button, which will allow you to
dial already given phone number.
110 | P a g e
University of Dar es Salaam
Intent Filters
You have seen how an Intent has been used to call an another activity. Android OS uses filters
to pinpoint the set of Activities, Services, and Broadcast receivers that can handle the Intent
with help of specified set of action, categories, data scheme associated with an Intent. You will
use <intent-filter> element in the manifest file to list down actions, categories and data types
associated with any activity, service, or broadcast receiver.
<activity android:name=".CustomActivity"
android:label="@string/app_name">
<intent-filter>
</intent-filter>
</activity>
Once this activity is defined along with above mentioned filters, other activities will be able to
invoke this activity using either the [Link], or using
the [Link] [Link] action provided their category
is [Link].
The <data> element specifies the data type expected by the activity to be called and for above
example our custom activity expects the data to start with the "[Link]
There may be a situation that an intent can pass through the filters of more than one activity or
service, the user may be asked which component to activate. An exception is raised if no target
can be found.
111 | P a g e
University of Dar es Salaam
A filter <intent-filter> may list more than one action as shown above but this list cannot be empty; a
filter must contain at least one <action> element, otherwise it will block all intents. If more than one
actions are mentioned then Android tries to match one of the mentioned actions before invoking the
activity.
A filter <intent-filter> may list zero, one or more than one categories. if there is no category
mentioned then Android always pass this test but if more than one categories are mentioned then
for an intent to pass the category test, every category in the Intent object must match a category in
the filter.
Each <data> element can specify a URI and a data type (MIME media type). There are separate
attributes like scheme, host, port, and path for each part of the URI. An Intent object that contains
both a URI and a data type passes the data type part of the test only if its type matches a type listed
in the filter.
Example
Following example is a modification of the above example. Here we will see how Android
resolves conflict if one intent is invoking two activities defined in , next how to invoke a custom
activity using a filter and third one is an exception case if Android does not file appropriate
activity defined for an intent.
Step Description
1 You will use android studio to create an Android application and name it as My
Application under a package [Link];.
2 Modify src/Main/Java/[Link] file and add the code to define three listeners
corresponding to three buttons defined in layout file.
3 Add a new src/Main/Java/[Link] file to have one custom activity which will be
invoked by different intents.
4 Modify layout XML file res/layout/activity_main.xml to add three buttons in linear layout.
5 Add one layout XML file res/layout/custom_view.xml to add a simple <TextView> to show the
passed data through intent.
112 | P a g e
University of Dar es Salaam
6 Modify [Link] to add <intent-filter> to define rules for your intent to invoke
custom activity.
7 Run the application to launch Android emulator and verify the result of the changes done in
the application.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
Button b1,b2,b3;
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
b1=(Button)findViewById([Link]);
[Link](new [Link]() {
@Override
[Link]("[Link]
113 | P a g e
University of Dar es Salaam
startActivity(i);
});
b2 = (Button)findViewById([Link].button2);
[Link](new [Link]() {
@Override
[Link].
LAUNCH",[Link]("[Link]
startActivity(i);
});
b3 = (Button)findViewById([Link].button3);
[Link](new [Link]() {
@Override
My [Link]",
[Link]("[Link]
startActivity(i);
});
114 | P a g e
University of Dar es Salaam
Following is the content of the modified main activity file src/[Link]
Application/[Link].
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
*/
@Override
[Link](savedInstanceState);
setContentView([Link].custom_view);
[Link]([Link]());
<RelativeLayout
xmlns:android="[Link]
xmlns:tools="[Link]
115 | P a g e
University of Dar es Salaam
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="[Link]">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Intent Example"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true" />
<ImageButton
116 | P a g e
University of Dar es Salaam
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_below="@+id/imageButton"
android:layout_alignRight="@+id/imageButton"
android:layout_alignEnd="@+id/imageButton" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Browser"
android:id="@+id/button"
android:layout_alignTop="@+id/editText"
android:layout_alignLeft="@+id/imageButton"
android:layout_alignStart="@+id/imageButton"
android:layout_alignEnd="@+id/imageButton" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
117 | P a g e
University of Dar es Salaam
android:text="Start browsing with launch action"
android:id="@+id/button2"
android:layout_below="@+id/button"
android:layout_alignLeft="@+id/button"
android:layout_alignStart="@+id/button"
android:layout_alignEnd="@+id/button" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exceptional condition"
android:id="@+id/button3"
android:layout_below="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_toStartOf="@+id/editText"
android:layout_alignParentEnd="true" />
</RelativeLayout>
<LinearLayout xmlns:android="[Link]
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/show_data"
android:layout_width="fill_parent"
android:layout_height="400dp"/>
</LinearLayout>
118 | P a g e
University of Dar es Salaam
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>
<manifest xmlns:android="[Link]
package="[Link]">
<application
android:allowBackup = "true"
android:icon = "@mipmap/ic_launcher"
android:label = "@string/app_name"
android:supportsRtl = "true"
android:theme = "@style/AppTheme">
<intent-filter>
</intent-filter>
</activity>
<activity android:name="[Link]">
<intent-filter>
119 | P a g e
University of Dar es Salaam
<category android:name = "[Link]" />
</intent-filter>
</activity>
</application>
</manifest>
Let's try to run your My Application application. I assume you had created your AVD while
doing environment setup. To run the app from Android Studio, open one of your project's
activity files and click Run icon from the toolbar. Android Studio installs the app on your AVD
and starts it and if everything is fine with your setup and application, it will display following
Emulator window −
120 | P a g e
University of Dar es Salaam
Now let's start with first button "Start Browser with VIEW Action". Here we have defined our
custom activity with a filter "[Link]", and there is already one default activity
against VIEW action defined by Android which is launching web browser, So android displays
following two options to select the activity you want to launch.
Now if you select Browser, then Android will launch web browser and open [Link]
website but if you select IndentDemo option then Android will launch CustomActivity which
does nothing but just capture passed data and displays in a text view as follows −
121 | P a g e
University of Dar es Salaam
Now go back using back button and click on "Start Browser with LAUNCH Action" button,
here Android applies filter to choose define activity and it simply launch your custom activity
Again, go back using back button and click on "Exception Condition" button, here Android tries
to find out a valid filter for the given intent but it does not find a valid activity defined because
this time we have used data as httpsinstead of http though we are giving a correct action, so
Android raises an exception and shows following screen −
122 | P a g e
University of Dar es Salaam
Android - Event Handling
Events are a useful way to collect data about a user's interaction with interactive components
of [Link] button presses or screen touch etc. The Android framework maintains an event queue
as first-in, first-out (FIFO) basis. You can capture these events in your program and take appropriate action
as per requirements.
Event Listeners − An event listener is an interface in the View class that contains a single callback
method. These methods will be called by the Android framework when the View to which the listener
has been registered is triggered by user interaction with the item in the UI.
Event Listeners Registration − Event Registration is the process by which an Event Handler gets
registered with an Event Listener so that the handler is called when the Event Listener fires the event.
Event Handlers − When an event happens and we have registered an event listener for the event,
the event listener calls the Event Handlers, which is the method that actually handles the event.
OnClickListener()
onClick() This is called when the user either clicks or touches or focuses upon any
widget like button, text, image etc. You will use onClick() event handler to
handle such event.
OnLongClickListener()
onLongClick() This is called when the user either clicks or touches or focuses upon any
widget like button, text, image etc. for one or more seconds. You will use
onLongClick() event handler to handle such event.
OnFocusChangeListener()
onFocusChange() This is called when the widget looses its focus ie. user goes away from the
view item. You will use onFocusChange() event handler to handle such
event.
OnFocusChangeListener()
onKey() This is called when the user is focused on the item and presses or releases
a hardware key on the device. You will use onKey() event handler to handle
such event.
123 | P a g e
University of Dar es Salaam
OnTouchListener()
onTouch() This is called when the user presses the key, releases the key, or any
movement gesture on the screen. You will use onTouch() event handler to
handle such event.
OnMenuItemClickListener()
onMenuItemClick() This is called when the user selects a menu item. You will use
onMenuItemClick() event handler to handle such event.
onCreateContextMenuItemListener()
onCreateContextMenu() This is called when the context menu is being built(as the result of a
sustained "long click)
There are many more event listeners available as a part of View class like OnHoverListener,
OnDragListener etc which may be needed for your application. So I recommend to refer official
documentation for Android application development in case you are going to develop a
sophisticated apps.
Below section will provide you detailed examples on all the three scenarios −
Touch Mode
Users can interact with their devices by using hardware keys or buttons or touching the
[Link] the screen puts the device into touch mode. The user can then interact with it
by touching the on-screen virtual buttons, images, [Link] can check if the device is in touch
mode by calling the View class’s isInTouchMode() method.
124 | P a g e
University of Dar es Salaam
Focus
A view or widget is usually highlighted or displays a flashing cursor when it’s in focus. This
indicates that it’s ready to accept input from the user.
isFocusableInTouchMode() − checks to see if the view is focusable in touch mode. (A view may
be focusable when using a hardware key but not when the device is in touch mode)
android:foucsUp="@=id/button_l"
onTouchEvent()
switch([Link]()){
case TOUCH_DOWN:
break();
case TOUCH_UP:
break;
case TOUCH_MOVE:
break;
return [Link](event) ;
125 | P a g e
University of Dar es Salaam
Event Handling Examples
Here you will create an anonymous implementation of the listener and will be useful if each class
is applied to a single control only and you have advantage to pass arguments to event handler.
In this approach event handler methods can access private data of Activity. No reference is
needed to call to Activity.
But if you applied the handler to more than one control, you would have to cut and paste the
code for the handler and if the code for the handler is long, it makes the code harder to maintain.
Following are the simple steps to show how we will make use of separate Listener class to
register and capture click event. Similar way you can implement your listener for any other
required event type.
Step Description
1 You will use Android studio IDE to create an Android application and name it
as myapplication under a package [Link] as explained in the Hello World
Example chapter.
2 Modify src/[Link] file to add click event listeners and handlers for the two buttons
defined.
4 No need to declare default string [Link] studio takes care default constants.
5 Run the application to launch Android emulator and verify the result of the changes done in
the aplication.
126 | P a g e
University of Dar es Salaam
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
Button b1,b2;
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
b1=(Button)findViewById([Link]);
b2=(Button)findViewById([Link].button2);
[Link](new [Link]() {
@Override
[Link](25);
127 | P a g e
University of Dar es Salaam
});
[Link](new [Link]() {
@Override
[Link](55);
});
<RelativeLayout
xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
128 | P a g e
University of Dar es Salaam
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
129 | P a g e
University of Dar es Salaam
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small font"
android:id="@+id/button"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Font"
android:id="@+id/button2"
android:layout_below="@+id/button"
android:layout_alignRight="@+id/button"
android:layout_alignEnd="@+id/button" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/textView"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true"
android:textSize="25dp" />
</RelativeLayout>
130 | P a g e
University of Dar es Salaam
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">myapplication</string>
</resources>
<manifest xmlns:android="[Link]
package="[Link]" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="[Link]"
android:label="@string/app_name" >
<intent-filter>
</intent-filter>
</activity>
</application>
131 | P a g e
University of Dar es Salaam
</manifest>
Let's try to run your myapplication application. I assume you had created your AVD while
doing environment setup. To run the app from Android Studio, open one of your project's
activity files and click Run icon from the toolbar. Android Studio installs the app on your AVD
and starts it and if everything is fine with your setup and application, it will display following
Emulator window −
Now you try to click on two buttons, one by one and you will see that font of the Hello
World text will change, which happens because registered click event handler method is being
called against each click event.
Exercise
I will recommend to try writing different event handlers for different event types and understand
exact difference in different event types and their handling. Events related to menu, spinner,
pickers widgets are little different but they are also based on the same concepts as explained
above.
132 | P a g e
University of Dar es Salaam
Android - Styles and Themes
A style resource defines the format and look for a UI. A style can be applied to an individual View (from
within a layout file) or to an entire Activity or application (from within the manifest file).
Defining Styles
A style is defined in an XML resource that is separate from the XML that specifies the layout.
This XML file resides under res/values/ directory of your project and will
have <resources> as the root node which is mandatory for the style file. The name of the XML
file is arbitrary, but it must use the .xml extension.
You can define multiple styles per file using <style> tag but each style will have its name that
uniquely identifies the style. Android style attributes are set using <item> tag as shown below
−
<resources>
<style name="CustomFontStyle">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:capitalize">characters</item>
<item name="android:typeface">monospace</item>
<item name="android:textSize">12pt</item>
<item name="android:textColor">#00FF00</item>/>
</style>
</resources>
The value for the <item> can be a keyword string, a hex color, a reference to another resource type, or
other value depending on the style property.
Using Styles
Once your style is defined, you can use it in your XML Layout file using styleattribute as follows
−
<LinearLayout xmlns:android="[Link]
133 | P a g e
University of Dar es Salaam
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text_id"
style="@style/CustomFontStyle"
android:text="@string/hello_world" />
</LinearLayout>
Style Inheritance
Android supports style Inheritance in very much similar way as cascading style sheet in web
design. You can use this to inherit properties from an existing style and then define only the
properties that you want to change or add.
<resources>
...
<item name="android:textColorPrimary">#ffff0000</item>
</style>
...
</resources>
In your [Link] apply the theme to the activities you want to style −
<activity
android:name="[Link]"
134 | P a g e
University of Dar es Salaam
...
android:theme="@style/MyCustomTheme"
/>
Your new theme will be applied to your activity, and text is now bright red.
<resources>
...
<item name="android:windowBackground">@color/my_custom_color</item>
135 | P a g e
University of Dar es Salaam
<item name="android:colorBackgroundCacheHint">@color/my_custom_color</item>
</style>
...
</resources>
136 | P a g e
University of Dar es Salaam
Define a new style
Apply the new button style to the buttonStyle attribute of your custom theme
<resources>
...
<item name="android:background">@drawable/my_nine_patch</item>
</style>
...
</resources>
<resources>
...
...
<item name="android:buttonStyle">@style/MyCustomButton</item>
</style>
...
</resources>
137 | P a g e
University of Dar es Salaam
Android Themes
Hope you understood the concept of Style, so now let's try to understand what is a Theme. A
theme is nothing but an Android style applied to an entire Activity or application, rather than an
individual View.
Thus, when a style is applied as a theme, every View in the Activity or application will apply
each style property that it supports. For example, you can apply the
same CustomFontStyle style as a theme for an Activity and then all text inside
that Activity will have green monospace font.
To set a theme for all the activities of your application, open the [Link] file
and edit the <application> tag to include the android:theme attribute with the style name.
For example −
<application android:theme="@style/CustomFontStyle">
But if you want a theme applied to just one Activity in your application, then add the
android:theme attribute to the <activity> tag only. For example −
138 | P a g e
University of Dar es Salaam
<activity android:theme="@style/CustomFontStyle">
There are number of default themes defined by Android which you can use directly or inherit
them using parent attribute as follows −
...
</style>
To understand the concept related to Android Theme, you can check Theme Demo Example.
Above layout has designed based on [Link] file,Which has placed at res/values/
<resource>
139 | P a g e
University of Dar es Salaam
<style name="AppTheme" parent="android:[Link]">
</style>
<resource>
140 | P a g e
University of Dar es Salaam
Android – Restful API (PHP/MYSQL)
In this chapter, we are going to explain, how you can integrate PHP and MYSQL with your
android application. This is very useful in case you have a webserver, and you want to access its
data on your android application.
MYSQL is used as a database at the webserver and PHP is used to fetch data from the database.
Our application will communicate with the PHP page with necessary parameters and PHP will
contact MYSQL database and will fetch the result and return the results to us.
Creating Database
MYSQL database can be created easily using this simple script. The CREATE
DATABASE statement creates the database.
<?php
$con=mysqli_connect("[Link]","username","password");
if (mysqli_query($con,$sql)) {
?>
Creating Tables
Once database is created, its time to create some tables in the database. The CREATE
TABLE statement creates the database.
<?php
$con=mysqli_connect("[Link]","username","password","my_db");
if (mysqli_query($con,$sql)) {
?>
141 | P a g e
University of Dar es Salaam
Inserting Values in tables
When the database and tables are created. Now its time to insert some data into the tables.
The Insert Into statement creates the database.
<?php
$con=mysqli_connect("[Link]","username","password","my_db");
if (mysqli_query($con,$sql)) {
?>
The first method to pass information is through GET method in which $_GETcommand is used.
The variables are passed in the url and the record is fetched. Its syntax is given below −
<?php
$con=mysqli_connect("[Link]","username","password","database name");
if (mysqli_connect_errno($con)) {
$username = $_GET['username'];
$password = $_GET['password'];
and Password='$password'");
$row = mysqli_fetch_array($result);
$data = $row[0];
142 | P a g e
University of Dar es Salaam
if($data){
echo $data;
mysqli_close($con);
?>
The second method is to use POST method. The only change in the above script is to replace
$_GET with $_POST. In Post method, the variables are not passed through URL.
[Link](new URI(link));
After that you need to call execute method of HttpClient class and receive it in a HttpResponse
object. After that you need to open streams to receive the data.
(new InputStreamReader([Link]().getContent()));
143 | P a g e
University of Dar es Salaam
+ "=" + [Link](username, "UTF-8");
The last thing you need to do is to write this data to the link. After writing, you need to open
stream to receive the responded data.
[Link]( data );
InputStreamReader([Link]()));
Example
The below example is a complete example of connecting your android application with MYSQL
database via PHP page. It creates a basic application that allows you to login using GET and POST
method.
The php page has been given below which takes parameters by post method.
<?php
$con=mysqli_connect("[Link]","username","password","db_name");
if (mysqli_connect_errno($con)) {
$username = $_POST['username'];
144 | P a g e
University of Dar es Salaam
$password = $_POST['password'];
$row = mysqli_fetch_array($result);
$data = $row[0];
if($data){
echo $data;
mysqli_close($con);
?>
Android Part
To experiment with this example , you need to run this on an actual device on which wifi internet
is connected.
Steps Description
1 You will use Android studio IDE to create an Android application and name it as PHPMYSQL
under a package [Link].
4 Modify layout XML file res/layout/activity_main.xml add any GUI component if required.
145 | P a g e
University of Dar es Salaam
6 Modify [Link] to add necessary permissions.
7 Run the application and choose a running android device and install the application on it and
verify the results.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Override
[Link](savedInstanceState);
setContentView([Link].activity_main);
usernameField = (EditText)findViewById([Link].editText1);
passwordField = (EditText)findViewById([Link].editText2);
status = (TextView)findViewById([Link].textView6);
role = (TextView)findViewById([Link].textView7);
method = (TextView)findViewById([Link].textView9);
146 | P a g e
University of Dar es Salaam
}
[Link]("Get Method");
new SigninActivity(this,status,role,0).execute(username,password);
[Link]("Post Method");
new SigninActivity(this,status,role,1).execute(username,password);
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
147 | P a g e
University of Dar es Salaam
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
[Link] = context;
[Link] = statusField;
[Link] = roleField;
byGetOrPost = flag;
@Override
148 | P a g e
University of Dar es Salaam
try{
[Link](new URI(link));
InputStreamReader([Link]().getContent()));
String line="";
[Link](line);
break;
[Link]();
return [Link]();
} catch(Exception e){
} else{
try{
149 | P a g e
University of Dar es Salaam
String username = (String)arg0[0];
String link="[Link]
[Link](username, "UTF-8");
[Link](password, "UTF-8");
[Link](true);
[Link]( data );
[Link]();
InputStreamReader([Link]()));
[Link](line);
break;
150 | P a g e
University of Dar es Salaam
return [Link]();
} catch(Exception e){
@Override
[Link]("Login Successful");
[Link](result);
Add the following content to [Link] and rebuild the whole project.
android {
useLibrary '[Link]'
<RelativeLayout xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
151 | P a g e
University of Dar es Salaam
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/editText1"
android:layout_below="@+id/editText1"
android:layout_marginTop="25dp"
android:ems="10"
android:inputType="textPassword" >
</EditText>
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="44dp"
android:ems="10" >
</EditText>
<TextView
152 | P a g e
University of Dar es Salaam
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editText1"
android:layout_alignParentLeft="true"
android:text="@string/Username" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/App"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView5"
android:layout_alignLeft="@+id/textView6"
android:text="@string/Role"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="10sp" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
153 | P a g e
University of Dar es Salaam
android:layout_height="wrap_content"
android:layout_below="@+id/textView6"
android:layout_marginTop="27dp"
android:layout_toLeftOf="@+id/editText1"
android:text="@string/LoginRole" />
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textView6"
android:layout_alignLeft="@+id/textView5"
android:layout_marginBottom="27dp"
android:text="@string/method" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView8"
android:layout_below="@+id/button1"
android:layout_marginTop="86dp"
android:text="@string/LoginStatus" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textView4"
android:layout_centerHorizontal="true"
154 | P a g e
University of Dar es Salaam
android:text="@string/Status"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="10sp" />
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView8"
android:layout_alignLeft="@+id/textView6"
android:text="@string/Choose"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="10sp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/textView6"
android:onClick="loginPost"
android:text="@string/LoginPost" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button2"
155 | P a g e
University of Dar es Salaam
android:layout_alignBottom="@+id/button2"
android:layout_alignLeft="@+id/textView2"
android:onClick="login"
android:text="@string/LoginGet" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText2"
android:layout_alignBottom="@+id/editText2"
android:layout_alignParentLeft="true"
android:text="@string/Password" />
</RelativeLayout>
<resources>
<string name="app_name">PHPMYSQL</string>
<string name="action_settings">Settings</string>
<string name="Username">Username</string>
<string name="Password">Password</string>
156 | P a g e
University of Dar es Salaam
<string name="LoginStatus">Login Status</string>
</resources>
<manifest xmlns:android="[Link]
package="[Link]" >
<uses-permission android:name="[Link]"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="[Link]"
android:label="@string/app_name" >
<intent-filter>
157 | P a g e
University of Dar es Salaam
<action android:name="[Link]" />
</intent-filter>
</activity>
</application>
</manifest>
Let's try to run your PHPMYSQL application. I assume you have connected your actual Android
Mobile device with your computer. To run the app from Android studio, open one of your
project's activity files and click Run icon from the tool bar. Before starting your application,
Android studio will display following window to select an option where you want to run your
Android application.
Select your mobile device as an option and then check your mobile device which will display
following screen −
158 | P a g e
University of Dar es Salaam
Now just type in your username and password. In my case i am typing admin as username and
password. It is shown in the figure −
Now press the Get button and wait a few seconds and response will be downloaded and will be
shown to you. In this case, the response is the ROLE that is fetched in case of admin as username
and [Link] is shown in the figure below −
159 | P a g e
University of Dar es Salaam
Now again press the POST button and same result would appear. It is shown in the figure below
−
160 | P a g e
University of Dar es Salaam
Publishing Android Application
Android application publishing is a process that makes your Android applications available to
users. Infect, publishing is the last phase of the Android application development process.
This tutorial will take you through simple steps to launch your application on Google Play. Here
is a simplified check list which will help you in launching your Android application −
Step Activity
1 Regression Testing Before you publish your application, you need to make sure that its
meeting the basic quality expectations for all Android apps, on all of the devices that you are
targeting. So perform all the required testing on different devices including phone and tablets.
2 Application Rating When you will publish your application at Google Play, you will have to
specify a content rating for your app, which informs Google Play users of its maturity level.
Currently available ratings are (a) Everyone (b) Low maturity (c) Medium maturity (d) High
maturity.
161 | P a g e
University of Dar es Salaam
3 Targeted Regions Google Play lets you control what countries and territories where your
application will be sold. Accordingly you must take care of setting up time zone, localization or
any other specific requirement as per the targeted region.
4 Application Size Currently, the maximum size for an APK published on Google Play is 50
MB. If your app exceeds that size, or if you want to offer a secondary download, you can use
APK Expansion Files, which Google Play will host for free on its server infrastructure and
automatically handle the download to devices.
5 SDK and Screen Compatibility It is important to make sure that your app is designed to
run properly on the Android platform versions and device screen sizes that you want to target.
6 Application Pricing Deciding whether you app will be free or paid is important because, on
Google Play, free app's must remain free. If you want to sell your application then you will have
to specify its price in different currencies.
8 Build and Upload release-ready APK The release-ready APK is what you you will upload
to the Developer Console and distribute to users. You can check complete detail on how to
create a release-ready version of your app: Preparing for Release.
9 Finalize Application Detail Google Play gives you a variety of ways to promote your app
and engage with users on your product details page, from colourful graphics, screen shots, and
videos to localized descriptions, release details, and links to your other apps. So you can
decorate your application page and provide as much as clear crisp detail you can provide.
162 | P a g e
University of Dar es Salaam
APK DEVELOPMENT PROCESS
Dx tools(Dalvik executable tools ): It going to convert .class file to .dex file. it has useful for
memory optimization and reduce the boot-up speed time
AAPT(Android assistance packaging tool):it has useful to convert .Dex file [Link]
APK(Android packaging kit): The final stage of deployment process is called as .apk.
You will need to export your application as an APK (Android Package) file before you upload it
Google Play marketplace.
To export an application, just open that application project in Android studio and select Build
→ Generate Signed APK from your Android studio and follow the simple steps to export
your application −
Next select, Generate Signed APK option as shown in the above screen shot and then click
it so that you get following screen where you will choose Create new keystore to store your
application.
163 | P a g e
University of Dar es Salaam
Enter your key store path,key store password,key alias and key password to protect your
application and click on Next button once again. It will display following screen to let you create
an application −
Once you filled up all the information,like app destination,build type and flavours
click finish button While creating an application it will show as below
Finally, it will generate your Android Application as APK formate File which will be uploaded at
Google Play marketplace.
164 | P a g e
University of Dar es Salaam
Google Play Registration
The most important step is to register with Google Play using Google Play Marketplace. You
can use your existing google ID if you have any otherwise you can create a new Google ID and
then register with the marketplace. You will have following screen to accept terms and
condition.
You can use Continue to payment button to proceed to make a payment of $25 as a
registration fee and finally to complete your account detail.
Once you are a registered user at Google Play, you can upload release-ready APK for your
application and finally you will complete application detail using application detail page as
mentioned in step 9 of the above mentioned checklist.
165 | P a g e
University of Dar es Salaam
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1
166 | P a g e
University of Dar es Salaam
167 | P a g e
University of Dar es Salaam