MAD All Chapter Q and A

Download as pdf or txt
Download as pdf or txt
You are on page 1of 169

Chapter 1 [4M]

For 2 Marks
1. Define OHA and state goal of OHA. [W-22]

The OHA is the group that is in charge of the Android smartphones operating system. It was created
by Google.The Open Handset Alliance (OHA) is consortium of multiple companies like Samsung, Sony,
Intel and many more to provide services and deploy handsets using android platform.
The Open Handset Alliance (OHA) is an association whose goal is to develop open standards for
mobile devices, promote innovation in mobile phones and provide a better experience for consumers
at a lower cost.

2. List all tools and software’s required for developing an android


application. [W-23]

 Android Studio
 ADB (Android Debug Bridge)
 AVD Manager
 Eclipse
 Fabric
 FlowUp
 GameMaker: Studio
 Genymotion
 Gradle
 IntelliJ IDEA

For 4 Marks
1. Describe the different features of Android. [W-22]

 User Interface: The user interface of the Android operating system is straight forward, and these
features make it very user friendly.
 Multiple Language Support: Android supports multiple languages in its operating system and
one can change the language very easily based on one’s requirement, the International languages
supported are English, Germany, Chinese, Dutch, French, German, Japanese, Korean, Russian, and
many more also some native language of India is also Supported Like Hindi, Marathi, Gujarati,
Punjabi and many more.
 Multi-tasking: Android provides support to run apps and services in the background with ease
which allows the users to use multiple apps at the same time.
 Connectivity: Android has extensive support to the connectivity and it supports connectivity such
as WiFi, Bluetooth, Hotspot, CDMA, GSM, NFC, VOLTE, UBB, VPN, 3G network band, and 4G
Network Band.
 Extensive Application Support: Android have Play store which is used as the major tool to
download and update applications on the operating system, however, one can download the
installer(often called as APK file) and install it manually, but it is not much recommended as third
party applications could be prone to some security breach in the smartphones.

2. Explain Android system architecture in detail. [W-22]


3. Describe Android architecture with diagram. [S-22]
4. Describe the Anroid architecture in detail. (sample question paper)
5. Draw and explain android architecture in detail. (sample test paper )
1. Applications:
• The top layer of android architecture is Applications. The native and third party applications
like Contacts, Email, Music, Gallery, Clock, Games, etc. whatever we will build those will be
installed on this layer only.
• The application layer runs within the Android run time using the classes and services made
available from the application framework.

2. Application Framework:
• The Application Framework provides the classes used to create an Android application. It also
provides a generic abstraction for hardware access and manages the user interface and
application resources.
• It basically provides the services through which we can create the particular class and make
that class helpful for the Applications creation.
• The application framework includes services like telephony service, location services,
notification manager, NFC service, view system, etc. which we can use for application
development as per our requirements.

3. Android Runtime:
• Android Runtime environment is an important part of Android rather than an internal part and
it contains a components like core libraries and the Dalvik virtual machine.
• The Android run time is the engine that powers our applications along with the libraries and
it forms the basis for the application framework.
(i) Dalvik Virtual Machine (DVM) is a register-based virtual machine like Java Virtual
Machine (JVM).
It is specially designed and optimized for android to ensure that a device can run multiple
instances efficiently. It relies on the Linux kernel for threading and low-level memory
management.
(ii) The core libraries in android runtime will enable us to implement an android applications
using standard JAVA programming language.
4. Platform Libraries:
• The Platform Libraries includes various C/C++ core libraries and Java based libraries such as
SSL, libc, Graphics, SQLite, Webkit, Media, Surface Manger, OpenGL etc. to provide a
support for android development.
5. Linux Kernel:
• Linux Kernel is a bottom layer and heart of the android architecture. It is heart of Android
architecture that exists at the root of android architecture and contains all the low-level device
drivers for the various hardware components of an Android device.
• Linux Kernel is responsible for device drivers, power management, memory management,
device management and resource access. It manage all the drivers such as display drivers,
camera drivers, Bluetooth drivers, audio drivers, memory drivers, etc. which are mainly
required for the android device during the runtime.
• The Linux Kernel will provide an abstraction layer between the device hardware and the
remainder of the stack. It is responsible for memory management, power management, device
management, resource access, etc.
6. Write down the steps to install and configure Android studio.[S-22]
Step 1:
Go to https://developer.android.com/android-studio/download to get the Android
Studio executable or zip file.
Step 2:
 Click on the Download Android Studio Button.
 Click on the “I have read and agree with the above terms and conditions”
checkbox followed by the download button
 Click on the Save file button in the appeared prompt box and the file will start
downloading.
Step 3:
After the downloading has finished, open the file from downloads and will prompt the
following dialog box. Click on next. In the next prompt, it’ll ask for a path for installation.
Choose a path and hit next.
Step 4:
It will start the installation, and once it is completed, it will be like the image shown below.
Step 5:
Once “Finish” is clicked, it will ask whether the previous settings need to be imported [if
the android studio had been installed earlier], or not. It is better to choose the ‘Don’t
import Settings option’. Click the OK button.
Step 6:
This will start the Android Studio. Meanwhile, it will be finding the available SDK
components.
Step 7:
After it has found the SDK components, it will redirect to the Welcome dialog box. Choose
Standard and click on Next. Now choose the theme, whether the Light theme or the Dark
one. The light one is called the IntelliJ theme whereas the dark theme is called Darcula.
Choose as required. Click on the Next button.
Step 8:
Now it is time to download the SDK components. Click on Finish. Components begin to
download let it complete. The Android Studio has been successfully configured. Now it’s
time to launch and build apps. Click on the Finish button to launch it.
Step 9:
Click on Start a new Android Studio project to build a new app.
7. Explain the need of Android Operating System. Also describe any four
features of android. [W-23]

Need of Android Operating System


1. Zero/negligible development cost: The development tools like Android
SDK, JDK, and Eclipse IDE etc. are free to download for the android mobile
application development.
2. Open Source: The Android OS is an open-source platform based on the Linux
kernel and multiple open-source libraries. In this way developers are free to
contribute or extend the platform as necessary for building mobile apps which
run on Android devices
3. Multi-Platform Support: In market, there are a wide range of hardware
devices powered by the Android OS, including many different phones and
tablet. Even development of android mobile apps can occur on Windows, Mac
OS or Linux.
4. Multi-Carrier Support: World wide a large number of telecom carriers like
Airtel, Vodafone, Idea Cellular, AT&T Mobility, BSNL etc. are supporting
Android powered phones.
5. Open Distribution Model Android Market place (Google Play store) has very
few restrictions on the content or functionality of an android app. So the
developer can distribute theirs app through Google Play store and as well
other distribution channels like Amazon’s app store.

Four features of android


1) Near Field Communication (NFC) Most Android devices support NFC, which
allows electronic devices to easily interact across short distances.
2) Alternate Keyboards Android supports multiple keyboards and makes them easy
to install; the SwiftKey, Skype, and 8pen apps all offer ways to quickly change up
your keyboard style.
3) Infrared Transmission The Android operating system supports a built-in infrared
transmitter, allowing you to use your phone or tablet as a remote control.
4) No-Touch Control Using Android apps such as Wave Control, users can control
their phones touch-free, using only gestures.
5) Automation The Tasker app controls the app permissions but also automate them
6) Wireless App Downloads Using the Android Market or third-party options like
AppBrain, we can download apps on PC and then automatically sync them with
Android, no plugging required.
7) Storage and Battery Swap Android phones also have unique hardware
capabilities. Google’s OS makes it possible to remove and upgrade your battery or to
replace one that no longer holds a charge
8) Custom Home Screens While it’s possible to hack certain phones to customize the
home screen, Android comes with this capability from the get-go
9) Widgets Apps are versatile, but sometimes you want information at a glance
instead of having to open an app and wait for it to load. Android widgets let you
display just about any feature you choose, right on the home screen—including
weather apps, music widgets, or productivity tools that helpfully remind you of
upcoming meetings or approaching deadlines.
Chapter 2 [6M]
For 2 Marks
1) Define Android Virtual Devices (AVD). [W-22]
Ans: An Android Virtual Device (AVD) is a configuration that defines the characteristics
of an Android phone, tablet, Wear OS, Android TV, or Automotive OS device that you
want to simulate in the Android Emulator. The AVD Manager is an interface you can
launch from Android Studio that helps you create and manage AVDs.

2) List any four features of Android operating system. [S-22]

2)List features of Anroid Operating System. [sample question paper]

2) Write features of android operating system. [sample test paper]

Ans: Features of Android Operating System:

1) Storage
2) Multitasking
3) Web Browser
4) Open Source
5) Accessibility
6) Media Support
7) Streaming Media Support
8) Voice Based Features
9) Multitouch
10) External Storage
11) Video Calling
12) Handset Layout
13) Google cloud Messaging
14) WiFi Direct

3) Define Dalvik Virtual Machine (DVM). [S-22]


Dalvik Virtual Machine is a register-based machine that compiles byte code to get
dex code and that ensures that a device can run multiple instances efficiently.
4) Define emulator. [W-23] , [sample test paper]
An Android emulator is a tool that creates virtual Android devices on your
computer. The emulator lets you prototype, develop and test Android applications
without using a physical device.
5) Define Android Virtual Devices (AVD). [sample question paper]
6) List all versions of android operating system. [sample test paper]
7) Explain ADT Plugins in detail. [sample test paper]
For 4 Marks
1) Explain features of Android SDK. [W-22]

Ans: Android SDK is a collection of libraries and Software Development tools that are
essential for Developing Android Applications. Whenever Google releases a new
version or update of Android Software, a corresponding SDK also releases with it. In
the updated or new version of SDK, some more features are included which are not
present in the previous version. Android SDK consists of some tools which are very
essential for the development of Android Application. These tools provide a smooth
flow of the development process from developing and debugging. Android SDK is
compatible with all operating systems such as Windows, Linux, macOS, etc.

1. Android Tool: This tool helps in managing the Android Virtual Device projects as
well as the installed components of the software development kit.
2. Emulator Tool: It helps us in testing the applications without the need of using the
application on an actual device.
3. Dalvik Debug Monitor Server(DDMS): DDMS is very useful for debugging the
Android Application.
4. Android Debug Bridge (ADB): It is a very versatile command-line tool and is
helpful for the communication between the developer and the Emulator or the Android
device that is connected.

2) Explain the steps to install and configure Android studio and SDK. [W-22]
3) Explore all steps to install Android studio and SDK. [W-23] , [sample question
paper]

Ans: Pre-Installation Check List

1. Before installing Android SDK, there is need to install Java Development Kit (JDK).
Ensure that JDK is at or above 1.8.
2. Uninstall older version(s) of "Android Studio" and "Android SDK", if any. We need
to install two packages:
1. Android Studio (IDE), which is an Integrated Development Environment (IDE)
2. Android SDK (Software Development Kit) for developing and running Android
apps.
Steps to install Android studio:

Download Android Studio

1. Click Download Android Studio. The Terms and Conditions page with the Android
Studio License Agreement opens.
2. Read the License Agreement.
3. At the bottom of the page, if you agree with the terms and conditions, select the I
have read and agree with the above terms and Android studio installation
conditions checkbox.
4. Click Download Android Studio to start the download.
5. When prompted, save the file to a location where you can easily locate it, such as
the Downloads folder.
6. Wait for the download to complete.

Install Android Studio

a. Open the folder where you downloaded and saved the Android Studio
installation file.
b. Double-click the downloaded file.
c. If you see a User Account Control dialog about allowing the installation to make
changes to your computer, click Yes to confirm the installation.
d. Click Next to start the installation.
e. Accept the default installation settings for all steps.
f. Click finish when installation is done.

Installing Android SDK Within Android Studio


1. Click Tools > SDK Manager.
2. In the SDK Platforms tab, select Android Tiramisu Preview.
3. In the SDK Tools tab, select Android SDK Build.
4. Click OK to install the SDK
4) Differentiate between DVM and JVM. [S-22] , [sample question paper] , [sample
test paper]
5) Differentiate between JVM and DVM. (Any four points) [W-23]

Sr. No. JVM DVM

1 It stands for Java Virtual Machine It stands for Dalvik Virtual Machine

2 JVM is a Stack based DVM is a Register Based

It supports multiple operating It supports only Android operating


3
systems system

JVM used java byte code and run DVM is used its own byte code and
4
“.class “ file run “.dex” file

For JVM many Retools are


5 For DVM few retools are available
available

It has constant pool for every


6 It has constant pool for every class
application

Here the execution done using


7 Here the execution done using APK
JAR

6) Explain the need of Android Operating System. Also describe any four features of
android. [W-23]

Need of Android Operating System

 Zero/negligible development cost: The development tools like Android SDK, JDK,
and Eclipse IDE etc. are free to download for the android mobile application
development.
 Open Source: The Android OS is an open-source platform based on the Linux
kernel and multiple open-source libraries. In this way developers are free to
contribute or extend the platform as necessary for building mobile apps which run
on Android devices
. Multi-Platform Support In market, there are a wide range of hardware devices
powered by the Android OS, including many different phones and tablet. Even
development of android mobile apps can occur on Windows, Mac OS or Linux.
 Multi-Carrier Support World wide a large number of telecom carriers like Airtel,
Vodafone, Idea Cellular, AT&T Mobility, BSNL etc. are supporting Android powered
phones.
 Open Distribution Model Android Market place (Google Play store) has very few
restrictions on the content or functionality of an android app. So the developer can
distribute theirs app through Google Play store and as well other distribution
channels like Amazon’s app store.

Four features of android


1) Near Field Communication (NFC) Most Android devices support NFC, which
allows electronic devices to easily interact across short distances.
2) Alternate Keyboards Android supports multiple keyboards and makes them easy
to install; the SwiftKey, Skype, and 8pen apps all offer ways to quickly change up
your keyboard style.
3) Infrared Transmission The Android operating system supports a built-in infrared
transmitter, allowing you to use your phone or tablet as a remote control.
4) No-Touch Control Using Android apps such as Wave Control, users can control
their phones touch-free, using only gestures.
5) Automation The Tasker app controls the app permissions but also automate them
6) Wireless App Downloads Using the Android Market or third-party options like
AppBrain, we can download apps on PC and then automatically sync them with
Android, no plugging required.
7) Storage and Battery Swap Android phones also have unique hardware
capabilities. Google’s OS makes it possible to remove and upgrade your battery or to
replace one that no longer holds a charge
8) Custom Home Screens While it’s possible to hack certain phones to customize the
home screen, Android comes with this capability from the get-go
9) Widgets Apps are versatile, but sometimes you want information at a glance
instead of having to open an app and wait for it to load. Android widgets let you
display just about any feature you choose, right on the home screen—including
weather apps, music widgets, or productivity tools that helpfully remind you of
upcoming meetings or approaching deadlines.
Chapter 3 [8M]
For 2 Marks

1) Enlist the elements of UI. [W-22]

Elements of UI.

 EditText
 TextView
 ListView
 GridView
 ScrollView
 ImageView
 ToggleButton
 CheckBox
 RadioButton

OR Components of UI

 Menu Bar
 Toolbar
 Navigation Bar
 Editor Tabs
 Editor
 Project Explorer
 Status Bar
 Tool Buttons

2) List any four folders from directory structure of Android project and elaborate in
one line. [S-22]

Folders from directory structure:

 app: The App folder contains three subfolders (manifests, java and res) that
make up our application. They are divided so that it should be fairly easy to
determine which resources go in which folder.
 Manifest: This is where we would put our manifest files. Most Android apps have
single manifest file. But an app may have several manifest files due to application
versioning, or for supporting specific hardware.
 Java: This is the folder in our project where we will be storing all of the source
code files written in Java programming language.
 res: It contains folders that help us to separate and sort the resources of our
application. Resources basically mean all the needed files except the source code.
 drawable: The drawable folder contains graphics that can be drawn to the
screen.
 layout: The layout folder contains XML files used for your layouts. These file are
used to set up the layout for your Activity and is used for basic alignment of your
layouts, components, widgets, and similar resources that are used for the UI of
your application.
 mipmap: The mipmap folder contains the launcher icon files for the app. A
launcher icon is a graphic that represents your app to users.
 values: The values folder contains XML files that contain simple values, such as
strings, integers, and colors. The values folder is used to keep track of the values
we will be using in our application.

3) List any four attributes of layout. [W-23]


 android:id
 android:layout_width
 android:layout_height
 android:layout_margin
 android:layout_marginTop
 android:layout_marginBottom
 android:layout_marginLeft
 android:layout_marginRight
 android:background

4) Write difference between toggle button and radio button. [W-23]

Toggle button Radio button


1. Toggle Button can be used to 1. Radio Buttons are used to choose
display checked/unchecked a single option from a list
(On/Off) state on the button.

2. For ON/OFF state two labels can 2. There is only one label for radio
be assign. button.
5) Write the directory path where images are stored while developing Android
application.[sample question paper]
6) List Eight alignment attributes of relative layout. [sample test paper]
7) Draw the hierarchical directory structure of android application. [sample test
paper]
8) List different User Interface Elements. Explain Toggle Button. [sample test paper]

For 4 Marks

1) Explain the fundamentals of Ul design in detail. [W-22]

1. Views:

• The basic building block for user interface in Android is a View, which is created
from the View class and occupies a rectangular area on the screen and is responsible
for drawing and event handling.
• Views are the base class for all visual interface elements (commonly known as
controls or widgets). All user interface UI controls, including the layout classes, are
derived from View.
• A View is an object/widget that draws something on the sreen by the help of user
interact. • Examples of widgets are buttons, text boxes, labels etc.

2. View Groups:

• The ViewGroup is a subclass of View and provides invisible container that hold
other Views or other ViewGroups and define their layout properties.
• View groups are extensions of the View class that can contain multiple child
Views. In order to Extend the ViewGroup class to create compound controls made
up of interconnected child views.
• A ViewGroup provides the layout in which we can order the appearance and
sequence of views. Examples of ViewGroup are FrmaeLayout, LineourLayout etc.

3. Fragments:

• Fragments represent a portion of user interface in an Activity. Fragments,


introduced in Android 3.0 which uses API level 11, are used to encapsulate portions
of your UI. This encapsulation makes fragments particularly useful when optimizing
our UI layouts for different screen sizes and creating reusable user interface (UI)
elements.
• Each Fragment includes its own user interface (UI) layout and receives the related
input events but is tightly bound to the activity into which each must be embedded.
Fragments are similar to UI view controller in iPhone development.

4. Activities:

• Activities dictate the UI and handle the user interaction to the smart phone screen.
Activities represent a single screen that user interact.
• Activities are the Android equivalent of Forms in traditional windows desktop
development. To display a UI we assign a View (Usually a layout or Fragment) to an
Activity

2) Explain with example, code to create GUI using absolute layout (Assume suitable
data). [S-22]

Absolute Layout is based on the simple idea of placing each control at an absolute
position. We specify the exact x and y coordinates on the screen for each control.
This is not recommended for most UI development (in fact Absolute Layout is
currently deprecated) since absolutely positioning every element on the screen
makes an inflexible UI that is much more difficult to maintain.

Absolute Layout:An Absolute Layout lets you specify exact locations (x/y
coordinates) of its children. Absolute layouts are less flexible and harder to maintain
than other types of layouts without absolute positioning. AbsoluteLayout is based
on the simple idea of placing each control at an absolute position.

We specify for the exact x and y corodinates on the screen for every control. So this
recommended for most UI development (in fact Absolute Layout is currentaly
deprecated)since absolute positioning of every element on the screen makes an
inflexible UI that is much more difficult to maintain.

Consider what happens if a control needs to be added to the user interface UI, we
would have to change the position of every single element that is shifted by the new
control. This allows child views to be positioned at specified X and Y coordinates
within the containing layout view.

Example (Note :Any other relevant example using absoluteLayout can be


considered, No java code is expected)
activity_main.xml

2) Explain relative layout with all its attributes. [W-23]

In Relative Layout we need to specify the position of child views relative to each
other or relative to the parent. In case if we didn’t specify the position of child views,
by default all child views are positioned to top-left of the layout.

Attributed of Relative Layout:


3) Write an xml file to create login page using Table Layout. [W-23]

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:orientation="vertical"
android:stretchColumns="1">
<TableRow android:padding="5dip">
<TextView
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_span="2"
android:gravity="center_horizontal"
android:text="@string/loginForm"
android:textColor="#0ff"
android:textSize="25sp"
android:textStyle="bold" />
</TableRow>
<TableRow>
<TextView
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_marginLeft="10dp"
android:text="@string/userName"
android:textColor="#fff"
android:textSize="16sp" />
<EditText
android:id="@+id/userName"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_marginLeft="10dp"
android:background="#fff"
android:hint="@string/userName"
android:padding="5dp"
android:textColor="#000" />
</TableRow>
<TableRow>
<TextView
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:text="@string/password"
android:textColor="#fff"
android:textSize="16sp"
android:layout_marginTop="20dp"
android:text="@string/password"
android:textColor="#fff"
android:textSize="16sp" />
<EditText
android:id="@+id/password"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:background="#fff"
android:hint="@string/password"
android:padding="5dp"
android:textColor="#000" />
</TableRow>
<TableRow android:layout_marginTop="20dp">
<Button
android:id="@+id/loginBtn"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_span="2"
android:background="#0ff"
android:text="@string/login"
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold" />
</TableRow>
</TableLayout>
4) Explain components of android directory structure. [W-23]

The android project contains different types of app modules, source code files, and
resource files.

Following are the components/ modules of android directory:

1) Manifests Folder: Manifests folder contains AndroidManifest.xml for creating


our android application. This file contains information about our application such as
the Android version, metadata, states package for Kotlin file, and other application
components. It acts as an intermediator between android OS and our application.
2) Java folder: The Java folder contains all the java source code (.java) files that we
create during the app development, including other Test files.
3) Resource (res) folder :The resource folder is the most important folder because
it contains all the non-code sources like images, XML layouts, and UI strings for our
android application.
 res/drawable folder It contains the different types of images used for the
development of the application. We need to add all the images in a drawable folder
for the application development.
 res/layout folder The layout folder contains all XML layout files which we used to
define the user interface of our application. It contains the activity_main.xml file.
 res/mipmap folder This folder contains launcher.xml files to define icons that are
used to show on the home screen. It contains different density types of icons
depending upon the size of the device such as hdpi, mdpi, xhdpi.
 res/values folder Values folder contains a number of XML files like strings,
dimensions, colors, and style definitions. One of the most important files is the
strings.xml file which contains the resources.
4) Gradle Scripts folder Gradle means automated build system and it contains a
number of files that are used to define a build configuration that can be applied to all
modules in our application. In build.gradle (Project) there are buildscripts and in
build.gradle (Module) plugins and implementations are used to build configurations
that can be applied to all our application modules.
5)Observe the following GUI and write an XML file using relative layout to create the
same. [sample question paper]

6) Write a program to display following output using suitable layout. [sample test
paper]

7) Explain any four UI Components of Android application. [sample test paper]

For 6 Marks

1)Develop a simple calculator using relative layout.[W-22]

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Calculator"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<EditText
android:id="@+id/num1"
android:layout_below="@+id/heading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Number 1"
android:inputType="number" />
<EditText
android:id="@+id/num2"
android:layout_below="@+id/num1"
android:hint="Enter Number 2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number" />
<TextView
android:id="@+id/result"
android:layout_below="@+id/num2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:text="Result" />
<Button
android:id="@+id/sum"
android:layout_below="@id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="+" />
<Button
android:id="@+id/sub"
android:layout_below="@id/result"
android:layout_toRightOf="@id/sum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="-" />
<Button
android:id="@+id/div"
android:layout_below="@id/result"
android:layout_toRightOf="@id/sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="/" />
<Button
android:id="@+id/mul"
android:layout_below="@id/result"
android:layout_toRightOf="@id/div"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="x"/>
</RelativeLayout>
MainActivity.java
package in.msbte.calculator;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
public EditText e1, e2;
Button add, sub , mul, div;
TextView t1;
int num1, num2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
e1 = (EditText) findViewById(R.id.num1);
e2 = (EditText) findViewById(R.id.num2);
t1 = (TextView) findViewById(R.id.result);
add = (Button) findViewById(R.id.sum);
mul = (Button) findViewById(R.id.mul);
div = (Button) findViewById(R.id.div);
sub = (Button) findViewById(R.id.sub);
add.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
num1 = Integer.parseInt(e1.getText().toString());
num2 = Integer.parseInt(e2.getText().toString());
int sum = num1 + num2;
t1.setText(Integer.toString(sum));
}
});
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
num1 = Integer.parseInt(e1.getText().toString());
num2 = Integer.parseInt(e2.getText().toString());
int sum = num1 - num2;
t1.setText(Integer.toString(sum));
}
});
mul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
num1 = Integer.parseInt(e1.getText().toString());
num2 = Integer.parseInt(e2.getText().toString());
int sum = num1 * num2;
t1.setText(Integer.toString(sum));
}
});
div.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
num1 = Integer.parseInt(e1.getText().toString());
num2 = Integer.parseInt(e2.getText().toString());
int sum = num1 / num2;
t1.setText(Integer.toString(sum));
}
});
}
}

2) Design UI using table layout to display buttons with 0 9 numbers on it. Even
display submit and clear button. When user clicks on particular buttons and later
when clicks on submit button, it should display the numbers clicked. (Note:
Consider the appropriate XML file. All attributes are not required. In java file all
imports are not expected. Different relevant logic/code can be considered.) [S-22]

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="*"
tools:context=".MainActivity">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/button0"
android:text="0"/>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/button1"
android:text="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="2" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/button3"
android:text="3"/>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/button4"
android:text="4"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"
android:id="@+id/button5"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="6"
android:id="@+id/button6"/>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="7"
android:id="@+id/button7"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8"
android:id="@+id/button8"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="9"
android:id="@+id/button9"/>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Submit"
android:id="@+id/submit"/>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Clear"
android:id="@+id/clear"/>
</TableRow>
</TableLayout>
(Java File)
package com.example.p1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button button0, button1, button2, button3, button4, button5, button6,button7,
button8, button9,submit,clear;
String a=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button0 = (Button) findViewById(R.id.button0);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
button5 = (Button) findViewById(R.id.button5);
button6 = (Button) findViewById(R.id.button6);
button7 = (Button) findViewById(R.id.button7);
button8 = (Button) findViewById(R.id.button8);
button9 = (Button) findViewById(R.id.button9);
submit=(Button) findViewById(R.id.submit);
clear=(Button) findViewById(R.id.clear);
button0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button0.getText().toString();
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button1.getText().toString();
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button2.getText().toString();
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button3.getText().toString();
}
});
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button4.getText().toString();
}
});
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button5.getText().toString();
}
});
button6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button6.getText().toString();
}
});
button7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button7.getText().toString();
}
});
button8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button8.getText().toString();
}
});
button9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
a=button9.getText().toString();
}
});
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Toast.makeText(getApplicationContext(),a,Toast.LENGTH_LONG).show(); }
});
}
}

3) Develop the registration form using the following GUI. [sample question paper]

3) Develop a simple calculator using table layout. [sample question paper]


Chapter 4 [12M]

For 2 Marks

1) List any four attributes of check box. [S-22]

1) id

2) checked

3) gravity

4) text

5) text color

6) text size

7) text style

8) background

9) padding

2) Write difference between toggle button and radio button. [W-23]

Toggle button Radio button

1. Toggle Button can be used 1. Radio Buttons are used to


to display checked/unchecked choose a single option from a
(On/Off) state on the button. list
2. For ON/OFF state two 2. There is only one label for
labels can be assign. radio button.

3) Define Dalvik Virtual Machine (DVM). [S-22]

Dalvik Virtual Machine is a register-based machine that compiles byte code to get dex code
and that ensures that a device can run multiple instances efficiently.
4)List all attributes to develop a simple button . [sample question paper]

5)List different types of views? Explain Scroll view. [sample test paper]

For 4 Marks

1)Explain data and time picker with its method. [W-22] , [sample question paper]

Date Picker:

In Android, DatePicker is a widget used to select a date. It allows to select date by day,
month and year in our custom UI (user interface). If we need to show this view as a dialog
then we have to use a DatePickerDialog class.

Methods of DatePicker:

1. setSpinnersShown(boolean shown): This method is used to set whether the spinner


of the date picker in shown or not. In this method you have to set a Boolean value either
true or false. True indicates spinner is shown, false value indicates spinner is not shown.
Default value for this function is true.

Syntax:

DatePicker simpleDatePicker = (DatePicker)findViewById(R.id.simpleDatePicker);

simpleDatePicker.setSpinnersShown(false);

2. getDayOfMonth(): This method is used to get the selected day of the month from a
date picker.

This method returns an integer value.

DatePicker simpleDatePicker = (DatePicker) findViewById(R.id.simpleDatePicker);

int day = simpleDatePicker.getDayOfMonth();

3. getMonth(): This method is used to get the selected month from a date picker. This
method returns an integer value.

DatePicker simpleDatePicker = (DatePicker)findViewById(R.id.simpleDatePicker);

int month = simpleDatePicker.getMonth();

4. getYear(): This method is used to get the selected year from a date picker. This method

returns an integer value.


DatePicker simpleDatePicker = (DatePicker)findViewById(R.id.simpleDatePicker);

int year = simpleDatePicker.getYear();

5. getFirstDayOfWeek(): This method is used to get the first day of the week. This
method returns an integer value.

DatePicker simpleDatePicker = (DatePicker)findViewById(R.id.simpleDatePicker);

int firstDay=simpleDatePicker.getFirstDayOfWeek();

TimePicker:

In Android, TimePicker is a widget used for selecting the time of the day in either AM/PM

mode or 24 hours mode. The displayed time consist of hours, minutes and clock format. If
we need to show this view as a Dialog then we have to use a TimePickerDialog class.

Methods of TimePicker:

1. setCurrentHour(Integer currentHour): This method is used to set the current hours


in a time picker.

setHour(Integer hour): setCurrentHour() method was deprecated in API level 23. From
api level 23 we have to use setHour(Integer hour). In this method there is only one
parameter of integer type which is used to set the value for hours.

TimePicker simpleTimePicker=(TimePicker)findViewById(R.id.simpleTimePicker);

simpleTimePicker.setCurrentHour(5);

simpleTimePicker.setHour(5);

2. setCurrentMinute(Integer currentMinute): This method is used to set the current


minutes in a time picker. setMinute(Integer minute): setCurrentMinute() method was
deprecated in API level 23. From api level 23 we have to use setMinute(Integer minute). In
this method there is only one parameter of integer type which set the value for minutes.

TimePicker simpleTimePicker=(TimePicker)findViewById(R.id.simpleTimePicker);

simpleTimePicker.setCurrentMinute(35);

simpleTimePicker.setMinute(35);

4. getCurrentMinute(): This method is used to get the current minutes from a time
picker.
getMinute(): getCurrentMinute() method was deprecated in API level 23. From api level
23 we have to use getMinute(). This method returns an integer value.

TimePicker simpleTimePicker = (TimePicker)findViewById(R.id.simpleTimePicker);

int minutes = simpleTimePicker.getCurrentMinute();

int minutes = simpleTimePicker.getMinute();

5. setIs24HourView(Boolean is24HourView): This method is used to set the mode of


the Time picker either 24 hour mode or AM/PM mode. In this method we set a Boolean
value either true or false. True value indicate 24 hour mode and false value indicate
AM/PM mode.

TimePicker simpleTimePicker = (TimePicker)findViewById(R.id.simpleTimePicker);

simpleTimePicker.setIs24HourView(true);

6. is24HourView(): This method is used to check the current mode of the time picker.
This method returns true if its 24 hour mode or false if AM/PM mode is set.

TimePicker simpleTimePicker = (TimePicker)findViewById(R.id.simpleTimePicker);

Boolean mode=simpleTimePicker.is24HourView();

7.setOnTimeChangedListener(TimePicker.OnTimeChangedListener

onTimeChanged(): This method is used to set the callback that indicates the time has
been adjusted by the user.

onTimeChanged(TimePicker view, int hourOfDay, int minute) is an override function of


this listener in which we have three parameters first is for TimePicker, second for getting
hour of the day and last is for getting the minutes after changing the time of the time
picker.

TimePicker simpleTimePicker = (TimePicker)findViewById(R.id.simpleTimePicker);

simpleTimePicker.setOnTimeChangedListener(new
TimePicker.OnTimeChangedListener() {

@Override

public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

}
});

2) Write a program to display a rectangular progress bar. [W-22]

Xml File:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<ProgressBar

android:id="@+id/progressBar"

style="@android:style/Widget.ProgressBar.Horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:layout_marginLeft="20dp"

android:layout_marginRight="20dp"

android:layout_marginTop="20dp"

android:indeterminate="false"

android:max="100"

android:minHeight="50dp"

android:minWidth="200dp"

android:progress="1" />

<TextView
android:id="@+id/textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/progressBar"

android:layout_below="@+id/progressBar"/>

</RelativeLayout>

Java file:

package in.edu.vpt.progressbar;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.widget.ProgressBar;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private ProgressBar progressBar;

private int progressStatus = 0;

private TextView textView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

progressBar = (ProgressBar) findViewById(R.id.progressBar);

textView = (TextView) findViewById(R.id.textView);

// Start long running operation in a background thread


new Thread(new Runnable() {

public void run() {

while (progressStatus < 100) {

progressStatus += 1;

new Handler(Looper.getMainLooper()).post(new Runnable() {

public void run() {

progressBar.setProgress(progressStatus);

textView.setText(progressStatus+"/"+progressBar.getMax());

});

try {

// Sleep for 200 milliseconds.

Thread.sleep(200);

} catch (InterruptedException e) {

e.printStackTrace();

}).start();

}
3) State syntax to create Text View and Image button with any two attributes of
each. [S-22]

Text View:

Syntax :

<TextView

android:id="@+id/textView1"

android:layout_width="<width value>”

android:layout_height="<height_value>"

android:text="<text to be displayed>"/>

Attributes/Properties of TextView:

● id: Supply an identifier name of this view, to later retrieve it with

View.findViewByID() or Activity.findViewById()

● alpha: alpha property of the view as a value between 0 (entirely transparent) and

1(Completely Opaque). [flag]

● auto link: Controls whether links such as urls and email addresses are

automatically found and converted to clickable links.[flag]

● gravity: The gravity attribute is an optional attribute which is used to control the

alignment of the text like left, right, center, top, bottom, center_vertical,

center_horizontal etc

● text: text attribute is used to set the text in a text view. We can set the text in xml as

well as in the java class.

● textColor: textColor attribute is used to set the text color of a text view. Color

value is in the form of “#argb”, “#rgb”, “#rrggbb”, or “#aarrggbb”.

● textSize: textSize attribute is used to set the size of text of a text view. We can set

the text size in sp(scale independent pixel) or dp(density pixel).


● textStyle: textStyle attribute is used to set the text style of a text view. The possible

text styles are bold, italic and normal. If we need to use two or more styles for a text

view then “|” operator is used for that.

● background: background attribute is used to set the background of a text view. We

can set a color or a drawable in the background of a text view.

● padding: padding attribute is used to set the padding from left, right, top or bottom.

In above example code of background we also set the 10dp padding from all the

sides of text view.

ImageButton:

Syntax :

<ImageButton

android:id="@+id/imageButton"

android:layout_width="<width value>"

android:layout_height="<height value>"

app:srcCompat="<image source from drawable folder "/>

Attributes/Properties of ImageButton:

● id: id is an attribute used to uniquely identify a image button. Below is the

example code in which we set the id of a image button.

● src: src is an attribute used to set a source file of image or you can say image in

your image button to make your layout look attractive.

● background: background attribute is used to set the background of an image

button. We can set a color or a drawable in the background of a Button.

● padding: padding attribute is used to set the padding from left, right, top or

bottom of the ImageButton.


4) Write a program to demonstrate Date and Time picker. (Note: Consider the
appropriate XML file. All attributes are not required. In java file all imports are not
expected. Different relevant logic/code can be considered.) [S-22]

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<TextView

android:id="@+id/tvDate"

android:layout_width="149dp"

android:layout_height="46dp"

android:layout_marginEnd="224dp"

android:layout_marginBottom="312dp"

android:textSize="20dp"

android:textStyle="bold"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />

<Button

android:id="@+id/btnDate"

android:layout_width="wrap_content"

android:layout_height="wrap_content"
android:layout_marginEnd="96dp"

android:layout_marginBottom="312dp"

android:text="Set Date"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

tools:ignore="DuplicateClickableBoundsCheck" />

<DatePicker

android:id="@+id/dtpcker"

android:layout_width="314dp"

android:layout_height="293dp"

android:layout_marginBottom="368dp"

android:datePickerMode="spinner"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintHorizontal_bias="0.36"

app:layout_constraintStart_toStartOf="parent" />

<TimePicker

android:id="@+id/timepcker"

android:layout_width="184dp"

android:layout_height="195dp"

android:layout_marginEnd="132dp"

android:layout_marginBottom="108dp"

android:timePickerMode="spinner"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />
<TextView

android:id="@+id/tvTime"

android:layout_width="130dp"

android:layout_height="56dp"

android:layout_marginEnd="232dp"

android:layout_marginBottom="40dp"

android:textSize="20dp"

android:textStyle="bold"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />

<Button

android:id="@+id/btnTime"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginEnd="104dp"

android:layout_marginBottom="48dp"

android:text="Set Time"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.datepickereg;

import androidx.appcompat.app.AppCompatActivity;

import android.app.DatePickerDialog;

import android.app.TimePickerDialog;
import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.DatePicker;

import android.widget.TextView;

import android.widget.TimePicker;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

TextView tvDate,tvTime;

DatePicker dtpcker;

TimePicker timepcker;

Button b1,b2;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tvDate=findViewById(R.id.tvDate);

tvTime=findViewById(R.id.tvTime);

b1=findViewById(R.id.btnDate);

b2=findViewById(R.id.btnTime);

dtpcker=findViewById(R.id.dtpcker);

timepcker=findViewById(R.id.timepcker);

b1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {


tvDate.setText("Date : "+dtpcker.getDayOfMonth()+"-

"+dtpcker.getMonth()+"-"+dtpcker.getYear());

});

b2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

tvTime.setText(timepcker.getCurrentHour()+":"+timepcker.getCurrentMinute());

});

5) Develop an application to display analog Time Picker. Also display the selected
time. (Write only java file) [W-23]

MainActivity.java

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.TimePicker;

public class MainActivity extends AppCompatActivity {

TextView textview1;

TimePicker timepicker;
Button changetime;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textview1=(TextView)findViewById(R.id.textView1);

timepicker=(TimePicker)findViewById(R.id.timePicker);

//Uncomment the below line of code for 24 hour view

timepicker.setIs24HourView(true);

changetime=(Button)findViewById(R.id.button1);

textview1.setText(getCurrentTime());

changetime.setOnClickListener(new View.OnClickListener(){

@Override

public void onClick(View view) {

textview1.setText(getCurrentTime());

});

public String getCurrentTime(){

String currentTime="Current Time:

"+timepicker.getCurrentHour()+":"+timepicker.getCurrentMinute();

return currentTime;

}
6) Develop an android application using radio button. [W-23]

[Consider any relevant example of Radio Button and in XML file, consider

minimum attributes]

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools=http://schemas.android.com/tools

android:layout_width="match_parent"

android:layout_height="match_parent"

android:padding="30dp"

tools:context=".frame">

<TextView android:id="@+id/text1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Radio Button"

android:textSize="20dp"

android:gravity="center"

android:textColor="#f00"/>

<RadioGroup android:id="@+id/group"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/text1">

<RadioButton android:id="@+id/male"

android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:text="Male"/>

<RadioButton

android:id="@+id/female"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/male"

android:text="Female"/>

</RadioGroup>

<Button android:id="@+id/submit"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/group"

android:layout_marginTop="99dp"

android:layout_centerHorizontal="true"

android:text="Submit" />

</RelativeLayout>

Java File:

package com.example.ifcdiv;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.RadioButton;

import android.widget.Toast;
public class frame extends AppCompatActivity

RadioButton male,female;

Button b1;

@Override

protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_frame);

male=findViewById(R.id.male);

female=findViewById(R.id.female);

b1=findViewById(R.id.submit);

b1.setOnClickListener(new View.OnClickListener()

@Override

public void onClick(View v)

String selected; if(male.isChecked())

selected="You selected"+male.getText();

else

selected="You Selected"+female.getText();

}
Toast.makeText(getApplicationContext(),selected,Toast.LENGTH_LONG).show();

} });

7) Write a program to display circular progress bar. [sample question paper]


8) Develop an android application to calculate age (Use Date Picker) using following
GUI. [sample test paper]

For 6 Marks

1)Develop a program to implement

i) List view of 5 items

ii) Grid view of 4 x 4 items

iii) Image view. [W-22]

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

<ListView

android:id="@+id/sample_list"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

</ListView>
<GridView

android:id="@+id/gridview1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:columnWidth="50dp"

android:gravity="center"

android:numColumns="auto_fit"

android:stretchMode="columnWidth" >

</GridView>

<ImageView

android:id="@+id/full_logo"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:srcCompat="@drawable/android_logo" />

</LinearLayout>

Placed image that has to be displayed in drawable folder

package in.msbte.controls_exam_ques;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.GridView;

import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

String[] sampleArray = {"Item 1","Item 2","Item 3","Item 4", "Item 5"};

GridView gridView;
static final String[] alphabets = new String[]{

"A", "B", "C", "D", "E",

"F", "G", "H", "I", "J",

"K", "L", "M", "N", "O",

"P", "Q", "R", "S", "T",

"U", "V", "W", "X", "Y", "Z"

};

ArrayAdapter adapter, adapter1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//List View

adapter = new ArrayAdapter<String>(this, R.layout.simple_item, sampleArray);

ListView listView = (ListView) findViewById(R.id.sample_list);

listView.setAdapter(adapter);

//Grid View

gridView = (GridView) findViewById(R.id.gridview1);

adapter1 = new ArrayAdapter<String>(this, R.layout.simple_item, alphabets);

gridView.setAdapter(adapter1);

}
2. Write a program to convert temperature from celcius to farenhite and vice versa
using Toggle button. (Design UI as per your choice. Write XML and java file) (Note:
Consider the appropriate XML file. All attributes are not required. In java file all
imports are not expected. Different relevant logic/code can be considered.) [S-22]

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<EditText

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/edittext"

android:hint="Enter the temp"/>

<ToggleButton

android:id="@+id/togglebutton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/edittext"

android:layout_marginTop="35dp"

android:textOff="F to C"

android:textOn="C to F" />

<Button
android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@id/togglebutton"

android:layout_marginTop="56dp" />

</RelativeLayout>

MainActivity.java

package com.example.p1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

Button b1;

EditText et;

ToggleButton tb;

Double a;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

et=findViewById(R.id.edittext);
b1=findViewById(R.id.button);

tb=findViewById(R.id.togglebutton);

b1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if(tb.isChecked())

a=Double.parseDouble(String.valueOf(et.getText()));

Double b=a*9/5+32;

String r=String.valueOf(b);

Toast.makeText(MainActivity.this,r+"°F",Toast.LENGTH_SHORT).show();

else

a=Double.parseDouble(String.valueOf(et.getText()));

Double b=a-32;

Double c=b*5/9;

String r=String.valueOf(c);

Toast.makeText(MainActivity.this,r+"°C",Toast.LENGTH_SHORT).show();

});

}
Chapter 5 [20M]
For 2 Marks

1)State the uses of Intent in Android. [W-22]

An Intent is a messaging object you can use to request an action from another app
component.

Intents are used for facilitating communication between components like Activities,
Services and Broadcast Receivers.

2) Draw diagram of activity life cycle. [S-22]


3) Name two classes used to play audio and video in Android. [S-22]

1) MediaPlayer

2) MediaController

3) AudioManager

4) State intent. List types of intent. [W-23]

Intent is the message that is passed between components such as activities.

Android uses Intent for communicating between the components of an Application

and also from one application to another application.

Types:

5) Write the syntax for Intent-Filter tag. [sample question paper]

6 )Define services in Android operating system. [sample question paper]

7) Enlist different ways to handle databases in android? Elaborate any one. [sample
test paper]
8) Draw the life cycle of an activity. [sample test paper]

9)Name any 4 methods to get location data in android. [sample test paper]

10) Write steps to develop an android appication. [sample test paper]


For 4 Marks

1) Explain the activity life cycle. [W-22] [sample question paper]

2) Draw and explain activity life cycle. [W-23]

Activities have a predefined life-cycle methods as follows:

1) onCreate (): Called then the activity is created. Used to initialize the activity,
forexample create the user interface.
2) onStart ():called when activity is becoming visible to the user.
3) onResume (): Called if the activity get visible again and the user starts interacting
with the activity again. Used to initialize fields, register listeners, bind to services,
etc.
4) onPause (): Called once another activity gets into the foreground. Always called
before the activity is not visible anymore. Used to release resources or save
application data. For example you unregister listeners, intent receivers, unbind from
services or remove system service listeners.
5) onStop (): Called once the activity is no longer visible. Time or CPU intensive
shutdown operations, such as writing information to a database should be down in
the onStop() method. This method is uaranteed to be called as of API 11.
6) onDestroy (): called before the activity is destroyed.

3) Develop an application to send and receive SMS (Write only Java and permissio
tag in manifest file).[W-22]

Permissions and <receiver> tag required in AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS" />

<uses-permission android:name="android.permission.SEND_SMS"/>

<uses-permission android:name="android.permission.READ_SMS"/>

<uses-permission android:name="android.permission.WRITE_SMS"/>

<receiver

android:name=".SmsReceiver"

android:enabled="true"

android:exported="true">

<intent-filter>

<action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter>

</receiver>

MainActivity.java

(Cosidering appropriate layout file with 2 edit text boxes namely for phone number,

message and a button for sending sms)

package com.example.testreceivesms;
import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.ActivityCompat;

import androidx.core.content.ContextCompat;

import android.Manifest;

import android.content.IntentFilter;

import android.content.pm.PackageManager;

import android.os.Bundle;

import android.telephony.SmsManager;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

SmsReceiver sms= new SmsReceiver();

EditText et1,et2;

Button b1;

@Override

protected void onCreate (Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

et1=findViewById(R.id.etPhno);

et2=findViewById(R.id.etmsg);

b1=findViewById(R.id.btnSms);

if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.SEND_S

MS)!=
PackageManager.PERMISSION_GRANTED)

ActivityCompat.requestPermissions(MainActivity.this,new

String[]{Manifest.permission.SEND_SMS},100);

b1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

try {

String phno= et1.getText().toString();

String msg=et2.getText().toString();

SmsManager smsManager= SmsManager.getDefault();

smsManager.sendTextMessage(phno,null,msg,null,null);

Toast.makeText(MainActivity.this,"Sms sent successfully",

Toast.LENGTH_LONG).show();

catch(Exception e)

Toast.makeText(MainActivity.this,"Sms failed to send... try again",

Toast.LENGTH_LONG).show();

});

@Override
protected void onStart() {

super.onStart();

IntentFilter filter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

registerReceiver(sms,filter);

@Override

protected void onStop() {

super.onStop();

unregisterReceiver(sms);

SmsReceiver.java

package com.example.testreceivesms;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.telephony.SmsMessage;

import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

SmsReceiver(){}

@Override

public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();

if (bundle != null) {
// Retrieve the SMS Messages received

Object[] sms = (Object[]) bundle.get("pdus");

// For every SMS message received

for (int i=0; i < sms.length; i++) {

// Convert Object array

SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

String phone = smsMessage.getOriginatingAddress();

String message = smsMessage.getMessageBody().toString();

Toast.makeText(context, “Received from “+ phone + ": " + message,

Toast.LENGTH_SHORT).show();

4) Describe with example, how to create a simple database in SQLite (Assume


suitable data). (Note : Any other method such as creating subclass of
SQLiteOpenHelper class and overriding and using required methods with relevant
example can also be considered) [S-22]

This procedure is by openOrCreateDatabase()

1. The package imported into the application is android.database.sqlite.SQLiteDatabase.

2. Here the class used is SQLiteDatabase.

3. The method used to create the database or connect to the database is

openOrCreateDatabse() method.

Program:

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android=http://schemas.android.com/apk/res/android

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<Button

android:text="Create SQLite Database"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_marginTop="46dp"

android:id="@+id/button" />

</RelativeLayout>

MainActivity.java

package in.edu.vpt.insertusingasync;

import android.app.ProgressDialog;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;;

public class MainActivity extends AppCompatActivity {

SQLiteDatabase sqLiteDatabaseObj;
Button EnterData;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

createData = (Button)findViewById(R.id.button);

createData.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

sqLiteDatabaseObj = openOrCreateDatabase("AndroidJSonDataBase",

Context.MODE_PRIVATE, null);

} });

5) Describe Android service life cycle along with diagram. [S-22]

6) Describe service life cycle with its diagram. [W-23]

A service is an application component which runs without direst interaction with

the user in the background.

● Services are used for repetitive and potentially long running operations, i.e.,

Internet downloads, checking for new data, data processing, updating content

providers and the like.

● Service can either be started or bound we just need to call either startService() or

bindService() from any of our android components. Based on how our service

was started it will either be “started” or “bound”


Service Lifecycle

1. Started

a. A service is started when an application component, such as an activity,

starts it by calling startService().

b. Now the service can run in the background indefinitely, even if the

component that started it is destroyed.

2. Bound

a. A service is bound when an application component binds to it by calling

bindService().

b. A bound service offers a client-server interface that allows components to

interact with the service, send requests, get results, and even do so across

processes with InterProcess Communication (IPC).

c. Like any other components service also has callback methods. These will

be invoked while the service is running to inform the application of its

state. Implementing these in our custom service would help you in


performing the right operation in the right state.

d. There is always only a single instance of service running in the app. If you

are calling startService() for a single service multiple times in our

application it just invokes the onStartCommand() on that service. Neither

is the service restarted multiple times nor are its multiple instances created

1. onCreate():

This is the first callback which will be invoked when any component starts the

service. If the same service is called again while it is still running this method

wont be invoked. Ideally one time setup and intializing should be done in this

callback.

2. onStartCommand() /startSetvice()

This callback is invoked when service is started by any component by calling

startService(). It basically indicates that the service has started and can now run

indefinetly.

3. onBind()

To provide binding for a service, you must implement the onBind() callback

method. This method returns an IBinder object that defines the programming

interface that clients can use to interact with the service.

4. onUnbind()

This is invoked when all the clients are disconnected from the service.

5. onRebind()

This is invoked when new clients are connected to the service. It is called after onRebind

6. onDestroy()

This is a final clean up call from the system. This is invoked just before the

service is being destroyed.


7) Describe multimedia framework of Android with diagram.[S-22]

The android multimedia system includes multimedia applications, multimedia

frameworks, OpenCore engine and hardware abstract for audio/video input/output

devices. And the goal of the android multimedia framework is to provide a

reliable interface for java services. The multimedia framework consists of several

core dynamic libraries such as libmediajni, libmedia, libmediaplayservice and so

on.

● Java classes call the Native C library Libmedia through Java JNI(Java Native

Interface). Libmedia library communications with Media Server guard process

through Android’s Binder IPc (inter process communication) mechanism.

● Media Server process creates the corresponding multimedia service according to

the Java multimedia applications.

● The whole communication between Libmedia and Media Server forms a

Client/Server model

Android Multimedia Framework Architecture


Typical video/audio data stream works in Android as follows. Particularly, Java

applications first set the URI of the media (from file or network) to PVPlayer

through Java framework, JNI and Native C. In this process, there are no data

stream flows.

● Then PVPlayer processes the media data stream with the steps: demux the media

data to separate video/audio data stream, decode video/audio data, sync

video.audio time, send the decoded data out.

● The below is the description of media codec/format, container and network

protocol supported by the Android platform.

1. Container: The audio file format is a file for storing digital audio data on

a system. This data can be manipulated to reduce the size or change the

quality of the audio. It is a kind of container to store audio information.

2. Audio Format: Any format or codec can be used including the ones

provided by Android or those which are specific devices. However it is

recommended to use the specified file formats as per devices.

3. Network Protocol: Protocols such as RTSP, HTTP,HTTPS are supported

in audio and video playback.

8) Discuss the need of permissions in Android. Describe the permissions to set


system functionalities like bluetooth,camera. [sample question paper]
9) Describe the significance of SQLite database in Anroid. [sample question paper]
10) List sensors in Android and explain any one in detail. . [sample question
paper]
11) Build a GUI for Student table with 5 records, write queries to add, delete and
view the records from the SQLite databases. [sample test paper ]
12) Define content provider and explain fragments. [sample test paper ]
For 6 Marks

1) Develop a program for providing bluetooth connectivity. [W-22]

activity_main.xml

<RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity" >

<TextView android:text=""

android:id="@+id/out"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

</TextView>

<Button

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:layout_marginLeft="30dp"

android:layout_marginTop="49dp"

android:text="TURN_ON" />

<Button

android:id="@+id/button2"

android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:layout_alignLeft="@+id/button1"

android:layout_below="@+id/button1"

android:layout_marginTop="27dp"

android:text="DISCOVERABLE" />

<Button

android:id="@+id/button3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/button2"

android:layout_below="@+id/button2"

android:layout_marginTop="28dp"

android:text="TURN_OFF" />

</RelativeLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:androclass="http://schemas.android.com/apk/res/android"

package="com.example.bluetooth"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="16" />

<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />


<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="com.example.bluetooth.MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

MainActivity.java

package com.example.bluetooth;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.app.Activity;

import android.bluetooth.BluetoothAdapter;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;
import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

private static final int REQUEST_ENABLE_BT = 0;

private static final int REQUEST_DISCOVERABLE_BT = 0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

final TextView out=(TextView)findViewById(R.id.out);

final Button button1 = (Button) findViewById(R.id.button1);

final Button button2 = (Button) findViewById(R.id.button2);

final Button button3 = (Button) findViewById(R.id.button3);

final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (mBluetoothAdapter == null) {

out.append("device not supported");

button1.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

if (!mBluetoothAdapter.isEnabled()) {

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

});

button2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

if (!mBluetoothAdapter.isDiscovering()) {

//out.append("MAKING YOUR DEVICE DISCOVERABLE");

Toast.makeText(getApplicationContext(), "MAKING YOUR DEVICE DISCOVERA

BLE",

Toast.LENGTH_LONG);

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVER

ABLE);

startActivityForResult(enableBtIntent, REQUEST_DISCOVERABLE_BT);

});

button3.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

mBluetoothAdapter.disable();

//out.append("TURN_OFF BLUETOOTH");

Toast.makeText(getApplicationContext(), "TURNING_OFF BLUETOOTH", Toast.LENGT

H_LONG);

}
});

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.activity_main, menu);

return true;

9) Develop an application to store customer's details like, customer-id, customer-


name, mobile number, address, pin-code and retrieve customer information
using customer-id in SQLite databases. (Any other relevant logic can be
considered) [W-22] , [sample question paper]

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<TextView

android:text="Insert Customer Details"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"
android:id="@+id/textView"

android:gravity="center"

android:textSize="20dp"

android:textColor="#000000"/>

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="ID"

android:id="@+id/editid"

android:layout_below="@+id/textView"/>

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="Name"

android:id="@+id/editname"

android:layout_below="@+id/editid"/>

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="Mobile No."

android:id="@+id/editmobile"

android:layout_below="@+id/editname"/>

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"
android:hint="Address"

android:lines="3"

android:id="@+id/editaddress"

android:layout_below="@+id/editmobile"/>

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="Pin Code"

android:id="@+id/editpincode"

android:layout_below="@+id/editaddress"/>

<Button

android:text="Insert Data"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/editpincode"

android:layout_centerHorizontal="true"

android:id="@+id/button" />

<TextView

android:text="Search Customer Details"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="30dp"

android:layout_centerHorizontal="true"

android:id="@+id/textView1"

android:gravity="center"
android:textSize="20dp"

android:layout_below="@+id/button"

android:textColor="#000000"/>

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="Enter ID"

android:id="@+id/editsearchid"

android:layout_below="@+id/textView1"/>

<Button

android:text="Search Data"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/editsearchid"

android:layout_centerHorizontal="true"

android:id="@+id/button1" />

</RelativeLayout>

MainActivity.java

package in.msbte.database;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;
import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

SQLiteDatabase sqLiteDatabaseObj;

EditText editTextID, editTextName, editMobileNo, editAddress, editPincode,

editSearchid;

String cid, cname, cmobile, caddress, cpincode, sql_query, sid;

Button EnterData, SearchData;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

EnterData = (Button)findViewById(R.id.button);

SearchData = (Button)findViewById(R.id.button1);

editTextID = (EditText)findViewById(R.id.editid);

editTextName = (EditText)findViewById(R.id.editname);

editMobileNo = (EditText)findViewById(R.id.editmobile);

editAddress = (EditText)findViewById(R.id.editaddress);

editPincode = (EditText)findViewById(R.id.editpincode);

editSearchid = (EditText)findViewById(R.id.editsearchid);

EnterData.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

sqLiteDatabaseObj = openOrCreateDatabase("AndroidJSonDataBase",
Context.MODE_PRIVATE, null);

sqLiteDatabaseObj.execSQL("CREATE TABLE IF NOT EXISTS

AndroidJSonTable(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, cid

VARCHAR, name VARCHAR, mobile VARCHAR, address VARCHAR, pincode

VARCHAR);");

cid = editTextID.getText().toString();

cname = editTextName.getText().toString() ;

cmobile = editMobileNo.getText().toString();

caddress = editAddress.getText().toString();

cpincode = editPincode.getText().toString();

sql_query = "INSERT INTO AndroidJSonTable (cid, name, mobile, address,

pincode) VALUES('"+cid+"', '"+cname+"', '"+cmobile+"', '"+caddress+"', '"+cpincode+"');";

sqLiteDatabaseObj.execSQL(sql_query);

Toast.makeText(getApplicationContext(), "Data Inserted Successfully",

Toast.LENGTH_LONG).show();

});

SearchData.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

sid = editSearchid.getText().toString();

Cursor cursor = sqLiteDatabaseObj.rawQuery( "select * from AndroidJSonTable

where cid="+sid+"", null );

StringBuffer buffer= new StringBuffer();

while (cursor.moveToNext())
{

String cid =cursor.getString(1);

String name =cursor.getString(2);

String mob =cursor.getString(3);

String addr =cursor.getString(4);

String pcode =cursor.getString(5);

buffer.append(cid+ " " + name + " " + mob +" " + addr +" " + pcode +"

\n");

Toast.makeText(getApplicationContext(), buffer,

Toast.LENGTH_LONG).show();

} }); } }

10) Write a program to capture an image using camera and display it. (Note:
Consider the appropriate XML file. All attributes are not required. In java file all
imports are not expected. Different relevant logic/code can be considered.) [S-
22]

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:padding="40dp"

android:orientation="horizontal"

tools:context=".MainActivity">
<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="CAMERA"

android:id="@+id/text"

android:textSize="20dp"

android:gravity="center"/>

<ImageView

android:id="@+id/image"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/text"

android:layout_marginTop="81dp"

android:src="@drawable/rose"/>

<Button

android:id="@+id/photo"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/image"

android:layout_centerHorizontal="true"

android:layout_marginTop="30dp"

android:text="TAKE PHOTO" />

</RelativeLayout>
MainActivity.java

package com.example.ifcdiv;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.os.Bundle;

import android.provider.MediaStore;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

Button b1;

ImageView imageView;

int CAMERA_REQUEST=1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

b1=findViewById(R.id.photo);

imageView=findViewById(R.id.image);

b1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(i,CAMERA_REQUEST);
}

});

@Override

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent

data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode==CAMERA_REQUEST)

Bitmap image= (Bitmap) data.getExtras().get("data");

imageView.setImageBitmap(image);

11) Write a program to implement Android Activity Life Cycle. Use toast messages
to display message through life cycle. (Note: No XML code is required. In java file
all imports are not expected.)[S-22]

package com.example.p1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);
Toast.makeText(getApplicationContext(),"Activity

created",Toast.LENGTH_LONG).show();

@Override

protected void onStart() {

super.onStart();

Toast.makeText(getApplicationContext(),"Activity

Started",Toast.LENGTH_LONG).show();

@Override

protected void onStop() {

super.onStop();

Toast.makeText(getApplicationContext(),"Activity

Stop",Toast.LENGTH_LONG).show();

@Override

protected void onDestroy() {

super.onDestroy();

Toast.makeText(getApplicationContext(),"Activity

Destroy",Toast.LENGTH_LONG).show();

@Override

protected void onPause() {

super.onPause();

Toast.makeText(getApplicationContext(),"Activity
Pause",Toast.LENGTH_LONG).show();

@Override

protected void onRestart() {

super.onResume();

Toast.makeText(getApplicationContext(),"Activity

Restart",Toast.LENGTH_LONG).show();

@Override

protected void onResume() {

super.onResume();

Toast.makeText(getApplicationContext(),"Activity

Resume",Toast.LENGTH_LONG).show();

12) Develop an application to convert thanks" text to speech as given in the


following GUI. [W-23]

Code of activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

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"

android:transitionGroup="true">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Android Text to Speech(TTS) Demo"

android:id="@+id/textView"

android:layout_below="@+id/textview"

android:layout_centerHorizontal="true"

android:textColor="#ff7aff24"

android:textSize="35dp" />

<EditText

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/editText"

android:layout_below="@+id/textView"

android:layout_marginTop="46dp"
android:text="thanks"

android:layout_alignParentRight="true"

android:layout_alignParentEnd="true"

android:layout_alignParentLeft="true"

android:layout_alignParentStart="true"

android:textColor="#ff7aff10"

android:textColorHint="#ffff23d1" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="CLICK TO CONVERT TEXT TO SPEECH"

android:id="@+id/button"

android:layout_below="@+id/editText"

android:layout_centerHorizontal="true"

android:layout_marginTop="46dp"

android:textSize="15dp" />

</RelativeLayout>

Code of toolbar_title_layout.xml file

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_height="wrap_content"

android:orientation="vertical"

android:gravity="center"

<TextView

android:padding="4dp"
android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="TextToSpeechDemo"

android:gravity="center"

android:textSize="16sp"

android:textStyle="bold"

android:textColor="@android:color/white"/>

</LinearLayout>

Code of MainActivity.java.

package com.example.texttospeech.myapplication;

import android.app.Activity;

import android.os.Bundle;

import android.speech.tts.TextToSpeech;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import java.util.Locale;

import android.widget.Toast;

public class MainActivity extends Activity {

TextToSpeech t1;

EditText ed1;

Button b1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CU

STOM);

getSupportActionBar().setCustomView(R.layout.toolbar_title_layout);

setContentView(R.layout.activity_main);

ed1=(EditText)findViewById(R.id.editText);

b1=(Button)findViewById(R.id.button);

t1=new TextToSpeech(getApplicationContext(), new

TextToSpeech.OnInitListener() {

@Override

public void onInit(int status) {

if(status != TextToSpeech.ERROR) {

t1.setLanguage(Locale.UK);

});

b1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String toSpeak = ed1.getText().toString();

Toast.makeText(getApplicationContext(),

toSpeak,Toast.LENGTH_SHORT).show();

t1.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null);

});

}
public void onPause(){

if(t1 !=null){

t1.stop();

t1.shutdown();

super.onPause();

13) Develop a program to TURN ON and OFF bluetooth. Write .java file and
permission tags. [W-23]

 Code of MainActivity.java

package com.example.bluetooth.myapplication;

import android.app.Activity;

import android.bluetooth.BluetoothAdapter;

import android.bluetooth.BluetoothDevice;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.ListView;

import android.widget.Toast;

import java.util.ArrayList;

import java.util.Set;
public class MainActivity extends Activity {

Button b1,b2,b3,b4;

private BluetoothAdapter BA;

private Set<BluetoothDevice>pairedDevices;

ListView lv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

b1 = (Button) findViewById(R.id.button);

b2=(Button)findViewById(R.id.button2);

b3=(Button)findViewById(R.id.button3);

b4=(Button)findViewById(R.id.button4);

BA = BluetoothAdapter.getDefaultAdapter();

lv = (ListView)findViewById(R.id.listView);

public void on(View v){

if (!BA.isEnabled()) {

Intent turnOn = new

Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(turnOn, 0);

Toast.makeText(getApplicationContext(), "Turned

on",Toast.LENGTH_LONG).show();

} else {

Toast.makeText(getApplicationContext(), "Already on",


Toast.LENGTH_LONG).show();

public void off(View v){

BA.disable();

Toast.makeText(getApplicationContext(), "Turned off"

,Toast.LENGTH_LONG).show();

public void visible(View v){

Intent getVisible = new

Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

startActivityForResult(getVisible, 0);

public void list(View v){

pairedDevices = BA.getBondedDevices();

ArrayList list = new ArrayList();

for(BluetoothDevice bt : pairedDevices) list.add(bt.getName());

Toast.makeText(getApplicationContext(), "Showing Paired

Devices",Toast.LENGTH_SHORT).show();

final ArrayAdapter adapter = new

ArrayAdapter(this,android.R.layout.simple_list_item_1, list);

lv.setAdapter(adapter);

}}
Permission Tags

AndroidManifest.xml file

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.bluetooth.myapplication" >

<uses-permission android:name="android.permission.BLUETOOTH"/>

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name=".MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

14) Write a program to capture an image using camera and display it. [sample
question paper]
Chapter 6 [20M]
For 2 Marks

1) State how the APK files are built? [W-22]

The javac compiler compiles the java source file into the class file.

The dx tool takes all the class files of your application and generates a single .dex file
which is a platform specific tool.Then Android Assets Packaging Tool (aapt) handles the
packaging process and finally creates an executable file with extension .apk.

An APK file contains all of a program's code (such as .dex files), resources, assets,

certificates, and manifest file.

2) Name any four methods to get location data in android. [W-22]

•float distanceTo(Location dest)

•float getAccuracy()

•float getBearing()

•double getAltitude()

•double getLatitude()

•float getSpeed()

•boolean hasAccuracy()

•boolean hasAltitude()

•boolean hasBearing()

•boolean hasBearing()

•boolean hasSpeed()

•void reset()

•void setAccuracy(float accuracy)

•void setAltitude(double altitude)


3) Define Geocoding and Reverse Geocoding. [W-23]

Geocoding :

Geocoding is the process of transforming a street address or other description of a

location into a (latitude, longitude) coordinate.

Reverse Geocoding :

Reverse geocoding is the process of transforming a (latitude, longitude) coordinate

into a (partial) address.

4) Enlist the steps to publish the Android application. [sample question paper]

5)State syntax to display built in zoom control. [S-22]

a) Built in Zoom control in Google map can be displayed with :

UiSettings.setZoomControlsEnabled(true);

OR

b) In case, while display Google map by intent, default zoom level can be given in

the form of data as

geo:latitude,longitude?z=zoom

where lat and lag are for location and zoom level is to set initial zoom level which

ranges from 0 to 21.

OR

c) In any normal activity, ZoomControl can be displayed as component by following

syntax :

ZoomControl zoomControls = (ZoomControls) findViewById(R.id.simpleZoomControl);

zoomControls.show()
For 4 Marks

1) Explain the steps to deploy app on Google Play Store. [W-22]

Step 1:

Create a Developer Account Before you can publish any app on Google Play, you need to
create a Developer Account. You can easily sign up for one using your existing Google
Account. You’ll need to pay a one-time registration fee of $25 using your international
credit or debit card. It can take up to 48 hours for your registration to be fully processed.

Step 2:

Plan to Sell? Link Your Merchant Account If you want to publish a paid app or plan to sell
in-app purchases, you need to create a payments center profile, i.e. a merchant account. A
merchant account will let you manage your app sales and monthly payouts, as well as
analyze your sales reports right in your Play Console.

Step 3: Create an App

After creating application by clicking on ‘Create Application'. Here you have to select your
app’s default language from the drop-down menu and then type in a title for your app. The
title of your app will show on Google Play after you’ve published.

Step 4: Prepare Store Listing

Before you can publish your app, you need to prepare its store listing. These are all the
details that will show up to customers on your app’s listing on Google Play. You not
necessarily complete it at once, you can always save a draft and revisit it later when you’re
ready to publish.The information required for our store listing is divided into several
categories such as Product Details containing title, short and full description of the app,
your app’s title and description should be written with a great user experience in mind.
Use the right keywords, but don’t overdo it. Make sure your app doesn’t come across as
spam-y or promotional, or it will risk getting suspended on the Play Store.Graphic Assets
where you can add screenshots, images, videos, promotional graphics, and icons that
showcase your app’s features and functionality.Languages & Translations, Categorization
where in category can be selected to which your

app belong to. Contact Details, Privacy Policy for apps that request access to sensitive user
data or permissions, you need to enter a comprehensive privacy policy that effectively
discloses how your app collects, uses, and shares that data.

Step 5: Upload APK to an App Release


Finally upload your app, by uploading APK file. Before you upload APK, you need to create
an app release. You need to select the type of release you want to upload your first app
version to. You can choose between an internal test, a closed test, an open test, and a
production release. The first three releases allow you to test out your app among a select
group of users before you make it go live for everyone to access.This is a safer option
because you can analyze the test results and optimize or fix your app accordingly if you
need to before rolling it out to all users. Once you create a production lease, your uploaded
app version will become accessible to everyone in the countries you choose to distribute it
in and click on ‘Create release.’

Step 6: Provide an Appropriate Content Rating

If you don’t assign a rating to your app, it will be listed as ‘Unrated’. Apps that are
‘Unrated’ may get removed from Google Play. To rate your app, you need to fill out a
content rating questionnaire An appropriate content rating will also help you get to the
right audience, which will eventually improve your engagement rates.

Step 7: Set Up Pricing & Distribution

Before you can fill out the details required in this step, you need to determine your app’s
monetization strategy. Once you know how your app is going to make money, you can go
ahead and set up your app as free or paid.You can always change your app from paid to
free later, but you cannot change a free app to paid. For that, you’ll need to create a new
app and set its price.

Step 8: Rollout Release to Publish Your App

The final step involves reviewing and rolling out your release after making sure you’ve
taken care of everything else.Before you review and rollout your release, make sure the
store listing, content rating, and pricing and distribution sections of your app each have a
green check mark next to them.Once you’re sure about the correctness of the details,
select your app and navigate to ‘Release management’ – ‘App releases.’ You can always opt
for reviews by clicking on ‘Review’ to be taken to the ‘Review and rollout release’ screen.
Here, you can see if there are any issues or warnings you might have missed out on.
Finally, select ‘Confirm rollout.’ This will also publish your app to all users in your target

countries on Google Play.


2) Explain the Android security model. [W-22]

The Android security model is primarily based on a sandbox and permission mechanism.
Each application is running in a specific Dalvik virtual machine with a unique user ID
assigned to it,which means the application code runs in isolation from the code of all other
applications.

Therefore, one application has not granted access to other applications’ files.Android
application has been signed with a certificate with a private key Know the owner of the
application is unique. This allows the author of the application will be identified if needed.
When an application is installed in the phone is assigned a user ID, thus avoiding it from
affecting it other applications by creating a sandbox for it. This user ID is permanent on
which devices and applications with the same user ID are allowed to run in a single
process. This is a way to ensure that a malicious application has Cannot access /
compromise the data of the genuine application. It is mandatory for an application to list
all the resources it will Access during installation.

Terms are required of an application, in the installation process should be user-based or


interactive Check with the signature of the application.Declaring and Using
PermissionsThe purpose of a permission is to protect the privacy of an Android user.
Android apps must request permission to access sensitive user data (such as contacts and
SMS), as well as certain system features (such as camera and internet). Depending on the
feature, the system might grant the permission automatically or might prompt the user to
approve the request. Permissions are divided into several protection levels. The
protection level affects whether runtime permission requests are required.

There are three protection levels that affect thirdparty apps: normal, signature, and
dangerous permissions.Normal permissions: Normal permissions cover areas where your
app needs to access data or resources outside the app’s sandbox, but where there’s very
little risk to the user’s privacy or the operation of other apps. For example, permission to
set the time zone is a normal permission. If an app declares in its manifest that it needs a
normal permission, the system automatically grants the app that permission at install
time. The system doesn’t prompt the user to grant normal permissions, and users cannot
revoke these permissions.

Signature permissions: The system grants these app permissions at install time, but only
when the app that attempts to use permission is signed by the same certificate as the app
that defines the permission.

Dangerous permissions: Dangerous permissions cover areas where the app wants data
or resources that involve the user’s private information, or could potentially affect the
user’s stored data or the operation of other apps. For example, the ability to read the
user’s contacts is a dangerous permission. If an app declares that it needs a dangerous
permission, the user mustexplicitly grant the permission to the app. Until the user
approves the permission, your app cannot provide functionality that depends on that
permission. To use a dangerous permission, your app must prompt the user to grant
permission at runtime. For more details about how the user is prompted, see Request
prompt for dangerous permission.

3)Explain the procedure of Geo-coding and reverse Geo-coding. [W-22]

Geo-Coding:

• If we know the latitude and longitude of a location, we can find out its address using a
process

known as Geocoding. Google Maps in Android supports this via the Geocoder class.

• The following code shows how we can find out the address of a location we have just
touched

using the getFromLocation() method:

classMapOverlay extends com.google.android.maps.Overlay

@Override

publicboolean draw(Canvas canvas, MapViewmapView,

boolean shadow, long when)

//...

@Override

publicbooleanonTouchEvent(MotionEvent event, MapViewmapView)

//---when user lifts his finger---


if (event.getAction() == 1) {

GeoPoint p = mapView.getProjection().fromPixels(

(int) event.getX(),

(int) event.getY());

Geocoder geoCoder = new Geocoder(

getBaseContext(), Locale.getDefault());

try {

List<Address> addresses = geoCoder.getFromLocation(

p.getLatitudeE6() / 1E6,

p.getLongitudeE6() / 1E6, 1);

String add = "";

if (addresses.size() > 0)

for (inti=0; i<addresses.get(0).getMaxAddressLineIndex();

i++)

add += addresses.get(0).getAddressLine(i) + "n";

Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();

catch (IOException e) {

e.printStackTrace();

return true;

else
return false;

Reverse-geocoding:

If we know the address of a location but want to know its latitude and longitude, we can
do so

via reverse-Geocoding. Again, we can use the Geocoder class for this purpose.

• The following code shows how we can find the exact location of the Empire State
Building

by using the getFromLocationName() method:

Geocoder geoCoder = new Geocoder(this, Locale.getDefault());

try {

List<Address> addresses = geoCoder.getFromLocationName(

"empire state building", 5);

String add = "";

if (addresses.size() > 0) {

p = new GeoPoint(

(int) (addresses.get(0).getLatitude() * 1E6),

(int) (addresses.get(0).getLongitude() * 1E6));

mc.animateTo(p);

mapView.invalidate();

} catch (IOException e) {

e.printStackTrace();

Once. the location is found, the above code navigates the map to the location.
3) Elaborate the need of permissions in Android. Explain the permissions to set
system functionalitics like SEND-SMS, bluetooth. [W-22]

The purpose of a permission is to protect the privacy of an Android user. Android apps
must request permission to access sensitive user data (such as contacts and SMS), as well
as certain system features (such as camera and internet). Depending on the feature, the
system might grant the permission automatically or might prompt the user to approve the
request.

android. permission. SEND_SMS

Allows the app to send SMS messages. This may result in unexpected charges.

Malicious apps may cost you money by sending messages without your confirmation.

Following is the code snippet to set SEND_SMS permissions in manifest file.

<uses-permission android: name="android.permission.SEND_SMS"/>

android. permission. BLUETOOTH

You need to provide following permissions in AndroidManifest.xml file.

<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

4) List and elaborate steps to deploy an Android application on Google play store.[S-
22]

Steps to deploy and Android Application on Google Play Store:

Step 1: Make a Developer Account

Step 2: Plan to Sell? Link Your Merchant Account

Step 3: Create an App

Step 4: Prepare Store Listing

Step 5: Upload APK to an App Release

Step 6: Provide an Appropriate Content Rating

Step 7: Set Up Pricing & Distribution


Step 8: Rollout Release to Publish Your App

Step 1: Create a Developer Account

Before you can publish any app on Google Play, you need to create a Developer Account.

You can easily sign up for one using your existing Google Account. You’ll need to pay a

one-time registration fee of $25 using your international credit or debit card. It can take

up to 48 hours for your registration to be fully processed.

Step 2: Plan to Sell? Link Your Merchant Account

If you want to publish a paid app or plan to sell in-app purchases, you need to create a

payments center profile, i.e. a merchant account. A merchant account will let you manage

your app sales and monthly payouts, as well as analyze your sales reports right in your

Play Console.

Step 3: Create an App

Now you have create an application by clicking on 'Create Application'. Here you have

to select your app’s default language from the drop-down menu and then type in a title

for your app. The title of your app will show on Google Play after you’ve published.

Step 4: Prepare Store Listing

Before you can publish your app, you need to prepare its store listing. These are all the

details that will show up to customers on your app’s listing on Google Play. You not

necessarily complete it at once , you can always save a draft and revisit it later when

you’re ready to publish.

The information required for your store listing is divided into several categories such as

Product Details containing title, short and full description of the app, Your app’s title

and description should be written with a great user experience in mind. Use the right

keywords, but don’t overdo it. Make sure your app doesn’t come across as spam-y or

promotional, or it will risk getting suspended on the Play Store.


Graphic Assets where you can add screenshots, images, videos, promotional graphics,

and icons that showcase your app’s features and functionality.

Languages & Translations, Categorization where in category can be selected to which

your app belong to. Contact Details , Privacy Policy for apps that request access to

sensitive user data or permissions, you need to enter a comprehensive privacy policy that

effectively discloses how your app collects, uses, and shares that data.

Step 5: Upload APK to an App Release

Finally upload your app, by uploading APK file. Before you upload APK, you need to

create an app release. You need to select the type of release you want to upload your first

app version to. You can choose between an internal test, a closed test, an open test, and a

production release. The first three releases allow you to test out your app among a select

group of users before you make it go live for everyone to access.

This is a safer option because you can analyze the test results and optimize or fix your

app accordingly if you need to before rolling it out to all users.

Once you create a production release, your uploaded app version will become accessible

to everyone in the countries you choose to distribute it in and click on ‘Create release.’

Step 6: Provide an Appropriate Content Rating

If you don’t assign a rating to your app, it will be listed as ‘Unrated’. Apps that are

‘Unrated’ may get removed from Google Play.

To rate your app, you need to fill out a content rating questionnaire An appropriate

content rating will also help you get to the right audience, which will eventually improve

your engagement rates.

Step 7: Set Up Pricing & Distribution

Before you can fill out the details required in this step, you need to determine your app’s

monetization strategy. Once you know how your app is going to make money, you can go
ahead and set up your app as free or paid.

You can always change your app from paid to free later, but you cannot change a free app

to paid. For that, you’ll need to create a new app and set its price.

Step 8: Rollout Release to Publish Your App

The final step involves reviewing and rolling out your release after making sure you’ve

taken care of everything else.

Before you review and rollout your release, make sure the store listing, content rating,

and pricing and distribution sections of your app each have a green check mark next to

them.

Once you’re sure about the correctness of the details, select your app and navigate to

‘Release management’ – ‘App releases.’ You can always opt for reviews by clicking on

‘Review’ to be taken to the ‘Review and rollout release’ screen. Here, you can see if there

are any issues or warnings you might have missed out on.

Finally, select ‘Confirm rollout.’ This will also publish your app to all users in your target

countries on Google Play.

5) State and elaborate the syntax of required class and methods for Geocoding. [S-
22]

Geocoder:

A class for handling geocoding and reverse geocoding.

Geocoding is the process of transforming a street address or other description of a

location into a (latitude, longitude) coordinate.

Reverse geocoding is the process of transforming a (latitude, longitude) coordinate into a

(partial) address. The amount of detail in a reverse geocoded location description may

vary, for example one might contain the full street address of the closest building, while
another might contain only a city name and postal code.

The Geocoder class requires a backend service that is not included in the core android

framework.

The Geocoder query methods will return an empty list if there no backend service in the

platform. Use the isPresent() method to determine whether a Geocoder implementation

exists.

Syntax

Geocoder (Context context)

Constructs a Geocoder localized for the default locale.

Geocoder(Context context, Locale locale)

Constructs a Geocoder localized for the given locale.

Methods with Syntax

a. getFromLocation

Syntax

public List<Address> getFromLocation (double latitude, double longitude, int

maxResults)

public void getFromLocation (double latitude, double longitude, int maxResults,

Geocoder.GeocodeListener listener)

This method returns an array of Addresses that attempt to describe the area immediately

surrounding the given latitude and longitude. The returned addresses should be localized

for the locale provided to this class's constructor.

b. getFromLocationName

Syntax :

● public List<Address> getFromLocationName (String locationName, int

maxResults, double lowerLeftLatitude, double lowerLeftLongitude, double


upperRightLatitude, double upperRightLongitude)

● public void getFromLocationName (String locationName, int maxResults,

double lowerLeftLatitude, double lowerLeftLongitude, double

upperRightLatitude, double upperRightLongitude, Geocoder.GeocodeListener

listener)

● public void getFromLocationName (String locationName, int maxResults,

Geocoder.GeocodeListener listener)

● public List<Address> getFromLocationName (String locationName, int

maxResults)

Returns an array of Addresses that attempt to describe the named location, which may be

a place name such as "Dalvik, Iceland", an address such as "1600 Amphitheatre Parkway,

Mountain View, CA", an airport code such as "SFO", and so forth. The returned

addresses should be localized for the locale provided to this class's constructor.

c. isPresent

Syntax

public static boolean isPresent ()

Returns true if there is a geocoder implementation present that may return results. If true,

there is still no guarantee that any individual geocoding attempt will succeed.

6) Discuss developer console with at least four features. [S-22]

Google Play Developer Console is the platform that Google provides for Google

Play and Android developers to publish their apps.

● The Google Play Developer console allows app developers and marketers to

better understand how their apps are performing in terms of growth, technical
performance such as crashes or display issues, and financials.

● The console offers acquisition reports and detailed analysis which can help app

devs find out how well an app is really performing.

● The platform is important as it provides developers with access to first party data

(trustworthy information collected about an app’s audience that comes straight

from Google Play) that highlights the real performance of an app.

● It shows the number of impressions an app listing receives and the number of

Installs an app receives from different sources over time

7) Write a program to demonstrate declaring and using permissions with any


relevant example.[S-22]

Permission declaring :

The permissions are declared in AndroidManifest.xml file under Manifest folder.

Permission can be set by <uses-permission> tag in AndroidManifest.xml.

Example:

Following example is to send SMS.

(Note: Any other relevant example which uses permissions can be considered)

AndroidManifest.xml

<uses-permission android:name="android.permission.SEND_SMS"/>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<TextView

android:id="@+id/textView"

android:layout_width="81dp"

android:layout_height="41dp"

android:layout_marginEnd="268dp"

android:layout_marginBottom="576dp"

android:text="To :"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"/>

<TextView

android:id="@+id/textView2"

android:layout_width="70dp"

android:layout_height="43dp"

android:layout_marginEnd="276dp"

android:layout_marginBottom="512dp"

android:text="Sms Text"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />

<EditText

android:id="@+id/etPhno"

android:layout_width="wrap_content"

android:layout_height="wrap_content"
android:layout_marginEnd="40dp"

android:layout_marginBottom="572dp"

android:ems="10"

android:inputType="textPersonName"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />

<EditText

android:id="@+id/etmsg"

android:layout_width="193dp"

android:layout_height="51dp"

android:layout_marginEnd="56dp"

android:layout_marginBottom="504dp"

android:inputType="textPersonName"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

tools:ignore="SpeakableTextPresentCheck" />

<Button

android:id="@+id/btnSms"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginEnd="156dp"

android:layout_marginBottom="400dp"

android:text="SEND SMS"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.testreceivesms;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.ActivityCompat;

import androidx.core.content.ContextCompat;

import android.Manifest;

import android.content.IntentFilter;

import android.content.pm.PackageManager;

import android.os.Bundle;

import android.telephony.SmsManager;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

EditText et1,et2;

Button b1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

et1=findViewById(R.id.etPhno);

et2=findViewById(R.id.etmsg);

b1=findViewById(R.id.btnSms);
if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.SEN

D_SMS)!=

PackageManager.PERMISSION_GRANTED)

ActivityCompat.requestPermissions(MainActivity.this,new

String[]{Manifest.permission.SEND_SMS},100);

b1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

try {

String phno= et1.getText().toString();

String msg=et2.getText().toString();

SmsManager smsManager= SmsManager.getDefault();

smsManager.sendTextMessage(phno,null,msg,null,null);

Toast.makeText(MainActivity.this,"Sms sent successfully",

Toast.LENGTH_LONG).show();

catch(Exception e)

Toast.makeText(MainActivity.this,"Sms failed to send... try again",

Toast.LENGTH_LONG).show();

});
}

8)Develop a program to add "Hello World" marker at (10 ,10) co-ordinates. Write
only . java file. [W-23]

Activity_maps.xml

package com.example.googlemap;

import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.OnMapReadyCallback;

import com.google.android.gms.maps.SupportMapFragment;

import com.google.android.gms.maps.model.LatLng;

import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements

OnMapReadyCallback {

private GoogleMap mMap;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_maps);

// Obtain the SupportMapFragment and get notified when the map is ready to

be used.

SupportMapFragment mapFragment = (SupportMapFragment)

getSupportFragmentManager()

.findFragmentById(R.id.map);

mapFragment.getMapAsync(this);

}
@Override

public void onMapReady(GoogleMap googleMap) {

mMap = googleMap;

// Add a marker in Sydney and move the camera

LatLng hello = new LatLng(10,10);

mMap.addMarker(new MarkerOptions().position(hello).title("Marker Hello

World"));

mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mumbai,10F));

9)Elaborate Android Security Model. [W-23]

 The Android security model is primarily based on a sandbox and permission

mechanism.

Each application is running in a specific Dalvik virtual machine with a unique

user ID assigned to it, which means the application code runs in isolation

from the code of all other applications.

Therefore, one application has not granted access to other applications’ files.

Android application has been signed with a certificate with a private key

Know the owner of the application is unique.

This allows the author of the application will be identified if needed. When

an application is installed in the phone is assigned a user ID, thus avoiding it

from affecting it other applications by creating a sandbox for it.

This user ID is permanent on which devices and applications with the same

user ID are allowed to run in a single process.


This is a way to ensure that a malicious application has Cannot access /

compromise the data of the genuine application.

It is mandatory for an application to list all the resources it will Access during

installation. Terms are required of an application, in the installation process

should be user-based or interactive Check with the signature of the

application

Declaring and Using Permissions

The purpose of a permission is to protect the privacy of an Android user.

Android apps must request permission to access sensitive user data (such as

contacts and SMS), as well as certain system features (such as camera and

internet). Depending on the feature, the system might grant the permission

automatically or might prompt the user to approve the request.

Permissions are divided into several protection levels. The protection level

affects whether runtime permission requests are required. There are three

protection levels that affect third party apps: normal, signature, and

dangerous permissions.

Normal permissions: Normal permissions cover areas where your app needs

to access data or resources outside the app’s sandbox, but where there’s very

little risk to the user’s privacy or the operation of other apps. For example,

permission to set the time zone is a normal permission. If an app declares in

its manifest that it needs a normal permission, the system automatically

grants the app that permission at install time. The system doesn’t prompt the

user to grant normal permissions, and users cannot revoke these permissions.

Signature permissions: The system grants these app permissions at install

time, but only when the app that attempts to use permission is signed by the
same certificate as the app that defines the permission.

Dangerous permissions: Dangerous permissions cover areas where the app

wants data or resources that involve the user’s private information, or could

potentially affect the user’s stored data or the operation of other apps. For

example, the ability to read the user’s contacts is a dangerous permission. If

an app declares that it needs a dangerous permission, the user must explicitly

grant the permission to the app. Until the user approves the permission, your

app cannot provide functionality that depends on that permission. To use a

dangerous permission, your app must prompt the user to grant permission at

runtime. For more details about how the user is prompted, see Request

prompt for dangerous permission.

9) Develop an application to send and receive SMS. (Write only Java and permission
tag in manifest file) [W-23]

 Permissions and <receiver> tag required in AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS" />

<uses-permission android:name="android.permission.SEND_SMS"/>

<uses-permission android:name="android.permission.READ_SMS"/>

<uses-permission android:name="android.permission.WRITE_SMS"/>

<receiver

android:name=".SmsReceiver"

android:enabled="true"

android:exported="true">

<intent-filter>

<action android:name="android.provider.Telephony.SMS_RECEIVED" />


</intent-filter>

</receiver>

MainActivity.java

(Cosidering appropriate layout file with 2 edit text boxes namely for phone

number,

message and a button for sending sms)

package com.example.testreceivesms;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.ActivityCompat;

import androidx.core.content.ContextCompat;

import android.Manifest;

import android.content.IntentFilter;

import android.content.pm.PackageManager;

import android.os.Bundle;

import android.telephony.SmsManager;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

SmsReceiver sms= new SmsReceiver();

EditText et1,et2;

Button b1;

@Override

protected void onCreate (Bundle savedInstanceState) {


super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

et1=findViewById(R.id.etPhno);

et2=findViewById(R.id.etmsg);

b1=findViewById(R.id.btnSms);

if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.SEND_SMS)
!=

PackageManager.PERMISSION_GRANTED)

ActivityCompat.requestPermissions(MainActivity.this,new

String[]{Manifest.permission.SEND_SMS},100);

b1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

try {

String phno= et1.getText().toString();

String msg=et2.getText().toString();

SmsManager smsManager= SmsManager.getDefault();

smsManager.sendTextMessage(phno,null,msg,null,null);

Toast.makeText(MainActivity.this,"Sms sent successfully",

Toast.LENGTH_LONG).show();

catch(Exception e)

{
Toast.makeText(MainActivity.this,"Sms failed to send... try again",

Toast.LENGTH_LONG).show();

});

@Override

protected void onStart() {

super.onStart();

IntentFilter filter=new

IntentFilter("android.provider.Telephony.SMS_RECEIVED");

registerReceiver(sms,filter);

@Override

protected void onStop() {

super.onStop();

unregisterReceiver(sms);

SmsReceiver.java

package com.example.testreceivesms;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;
import android.telephony.SmsMessage;

import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

SmsReceiver(){}

@Override

public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();

if (bundle != null) {

// Retrieve the SMS Messages received

Object[] sms = (Object[]) bundle.get("pdus");

// For every SMS message received

for (int i=0; i < sms.length; i++) {

// Convert Object array

SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

String phone = smsMessage.getOriginatingAddress();

String message = smsMessage.getMessageBody().toString();

Toast.makeText(context, “Received from “+ phone + ": " + message,

Toast.LENGTH_SHORT).show();

10) Discuss Developer console with its purpose. [sample question paper]
11) Explain zoom control (IN / OUT) with the help of an example. [sample
question paper]
12) Describe types of permisions used while developing android applications.
[sample test paper]

For 6 Marks

1) Develop a program to send and receive an Email.[W-22]

Program to send Email

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<EditText

android:id="@+id/editText1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_alignParentRight="true"

android:layout_marginTop="18dp"

android:layout_marginRight="22dp" />

<EditText

android:id="@+id/editText2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/editText1"
android:layout_alignLeft="@+id/editText1"

android:layout_marginTop="20dp" />

<EditText

android:id="@+id/editText3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/editText2"

android:layout_alignLeft="@+id/editText2"

android:layout_marginTop="30dp" />

<TextView

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBaseline="@+id/editText1"

android:layout_alignBottom="@+id/editText1"

android:layout_alignParentLeft="true"

android:text="Send To:"

android:textColor="#0F9D58" />

<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="Email Subject:"

android:textColor="#0F9D58" />

<TextView

android:id="@+id/textView3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBaseline="@+id/editText3"

android:layout_alignBottom="@+id/editText3"

android:text="Email Body:"

android:textColor="#0F9D58" />

<Button

android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/editText3"

android:layout_alignLeft="@+id/editText3"

android:layout_marginLeft="76dp"

android:layout_marginTop="20dp"

android:text="Send email!!" />

</RelativeLayout>

MainActivity.java

import android.content.Intent;

import android.os.Bundle;

import android.widget.Button;

import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

// define objects for edit text and button

Button button;

EditText sendto, subject, body;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// Getting instance of edittext and button

sendto = findViewById(R.id.editText1);

subject = findViewById(R.id.editText2);

body = findViewById(R.id.editText3);

button = findViewById(R.id.button);

// attach setOnClickListener to button with Intent object define in it

button.setOnClickListener(view -> {

String emailsend = sendto.getText().toString();

String emailsubject = subject.getText().toString();

String emailbody = body.getText().toString();

// define Intent object with action attribute as ACTION_SEND

Intent intent = new Intent(Intent.ACTION_SEND);

// add three fields to intent using putExtra function

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailsend});

intent.putExtra(Intent.EXTRA_SUBJECT, emailsubject);

intent.putExtra(Intent.EXTRA_TEXT, emailbody);
// set type of intent

intent.setType("message/rfc822");

// startActivity with intent with chooser as Email client using

createChooser function

startActivity(Intent.createChooser(intent, "Choose an Email client :"));

});

Program to receive Email

(Note: Receiving email is not the service of Android OS, instead it uses some third party

applicaton like Gmail, so instead of receiving email in android app, a code which
broadcasts

message if email comes using broadcast receiver or any relevant logic can be considered.)

MainActivity.java

package com.example.myemailprog;

import androidx.appcompat.app.AppCompatActivity;

import android.content.IntentFilter;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

GmailReceiver gml;

IntentFilter intf;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);
gml = new GmailReceiver();

intf = new IntentFilter("android.intent.action.VIEW");

@Override

protected void onResume() {

super.onResume();

registerReceiver(gml, intf);

@Override

protected void onDestroy() {

super.onDestroy();

unregisterReceiver(gml);

Gmailrerciever..java

package com.example.myemailprog;

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.res.Resources;

import android.graphics.BitmapFactory;

import android.widget.Toast;
public class GmailReceiver extends BroadcastReceiver

@Override

public void onReceive(Context context, Intent intent)

Toast.makeText(context, "Email Received", Toast.LENGTH_LONG).show();

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.myemailprog">

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/Theme.MyEmailProg">

<activity

android:name=".MainActivity"

android:exported="true">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />


</intent-filter>

</activity>

<receiver android:name="GmailReceiver"

android:exported="false">

<intent-filter>

<action android:name="android.intent.action.PROVIDER_CHANGED"

android:priority="-10">

</action>

<action android:name="android.intent.action.VIEW" />

<data android:scheme="content" android:host="gmail-ls"

android:pathPattern="/unread/.*">

</data>

</intent-filter>

</receiver>

</application>

</manifest>

2) Write a program to find the direction from user's current location to MSBTE,
Bandra. (Write only Java and manitest file).

(Note : Any other relevant logic to get the required output can also be considered.) [W-22]

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.msbte.google_map_currentlocationroute">

<uses-permission android:name="android.permission.INTERNET" />


<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"

/>

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

<meta-data

android:name="com.google.android.gms.version"

android:value="@integer/google_play_services_version" />

<meta-data

android:name="com.google.android.geo.API_KEY"

android:value="@string/google_maps_key" />

<activity android:name=".MainActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>
MainActivity.java

import android.Manifest;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.location.Location;

import android.net.Uri;

import android.provider.Settings;

import android.support.v4.app.ActivityCompat;

import android.support.v7.app.AlertDialog;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;

import com.google.android.gms.common.api.GoogleApiClient;

import com.google.android.gms.location.LocationRequest;

import com.google.android.gms.location.LocationServices;

import com.google.android.gms.maps.CameraUpdateFactory;

import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.MapFragment;

import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.CameraPosition;

import com.google.android.gms.maps.model.LatLng;

import com.google.android.gms.maps.model.MarkerOptions;

import com.google.android.gms.maps.model.Polyline;

import com.google.android.gms.maps.model.PolylineOptions;

import com.karumi.dexter.Dexter;

import com.karumi.dexter.MultiplePermissionsReport;

import com.karumi.dexter.PermissionToken;

import com.karumi.dexter.listener.DexterError;

import com.karumi.dexter.listener.PermissionRequest;

import com.karumi.dexter.listener.PermissionRequestErrorListener;

import com.karumi.dexter.listener.multi.MultiplePermissionsListener;

import java.util.List;

public class MainActivity extends AppCompatActivity implements

GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,

com.google.android.gms.location.LocationListener , OnMapReadyCallback,

TaskLoadedCallback{

//variables for map and route

private GoogleMap mMap;

private MarkerOptions place1, place2;

Button getDirection;

private Polyline currentPolyline;

private MapFragment mapFragment;

private boolean isFirstTime = true;

//variables for current location


private static final String TAG = "MainActivity";

private TextView tvLocation;

private GoogleApiClient mGoogleApiClient;

private Location mLocation;

private LocationRequest mLocationRequest;

private com.google.android.gms.location.LocationListener listener;

private long UPDATE_INTERVAL = 2 * 1000; /* 10 secs */

private long FASTEST_INTERVAL = 2000; /* 2 sec */

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//code for getting current location

requestMultiplePermissions();

tvLocation = (TextView) findViewById((R.id.tv));

mGoogleApiClient = new GoogleApiClient.Builder(this)

.addConnectionCallbacks(this)

.addOnConnectionFailedListener(this)

.addApi(LocationServices.API)

.build();

//code for drawing route

@Override

public void onMapReady(GoogleMap googleMap) {

mMap = googleMap;
mMap.clear();

Log.d("mylog", "Added Markers");

mMap.addMarker(place1);

mMap.addMarker(place2);

CameraPosition googlePlex = CameraPosition.builder()

.target(new LatLng(22.7739,71.6673))

.zoom(7)

.bearing(0)

.tilt(45)

.build();

mMap.animateCamera(CameraUpdateFactory.newCameraPosition(googlePlex), 5000,

null);

private String getUrl(LatLng origin, LatLng dest, String directionMode) {

// Origin of route

String str_origin = "origin=" + origin.latitude + "," + origin.longitude;

// Destination of route

String str_dest = "destination=" + dest.latitude + "," + dest.longitude;

// Mode

String mode = "mode=" + directionMode;

// Building the parameters to the web service

String parameters = str_origin + "&" + str_dest + "&" + mode;

// Output format

String output = "json";

// Building the url to the web service


String url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" +

parameters + "&key=" + getString(R.string.google_maps_key);

return url;

@Override

public void onTaskDone(Object... values) {

if (currentPolyline != null)

currentPolyline.remove();

currentPolyline = mMap.addPolyline((PolylineOptions) values[0]);

//runtime permission method

private void requestMultiplePermissions(){

Dexter.withActivity(this)

.withPermissions(

Manifest.permission.ACCESS_FINE_LOCATION,

Manifest.permission.ACCESS_COARSE_LOCATION )

.withListener(new MultiplePermissionsListener() {

@Override

public void onPermissionsChecked(MultiplePermissionsReport report) {

// check if all permissions are granted

if (report.areAllPermissionsGranted()) {

Toast.makeText(getApplicationContext(), "All permissions are granted by

user!", Toast.LENGTH_SHORT).show();

// check for permanent denial of any permission


if (report.isAnyPermissionPermanentlyDenied()) {

// show alert dialog navigating to Settings

openSettingsDialog();

@Override

public void onPermissionRationaleShouldBeShown(List<PermissionRequest>

permissions, PermissionToken token) {

token.continuePermissionRequest();

}).

withErrorListener(new PermissionRequestErrorListener() {

@Override

public void onError(DexterError error) {

Toast.makeText(getApplicationContext(), "Some Error! ",

Toast.LENGTH_SHORT).show();

} })

.onSameThread()

.check();

private void openSettingsDialog() {

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

builder.setTitle("Required Permissions");

builder.setMessage("This app require permission to use awesome feature. Grant them in

app settings.");
builder.setPositiveButton("Take Me To SETTINGS", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.cancel();

Intent intent = new

Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", getPackageName(), null);

intent.setData(uri);

startActivityForResult(intent, 101);

});

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.cancel();

});

builder.show();

//methods for getting current location

@Override

public void onConnected(Bundle bundle) {

if (ActivityCompat.checkSelfPermission(this,

Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,

Manifest.permission.ACCESS_COARSE_LOCATION) !=

PackageManager.PERMISSION_GRANTED) {

return;

startLocationUpdates();

mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

if(mLocation == null){

startLocationUpdates();

if (mLocation != null) {

// mLatitudeTextView.setText(String.valueOf(mLocation.getLatitude()));

//mLongitudeTextView.setText(String.valueOf(mLocation.getLongitude()));

} else {

Toast.makeText(this, "Location not Detected", Toast.LENGTH_SHORT).show();

}}

@Override

public void onConnectionSuspended(int i) {

Log.i(TAG, "Connection Suspended");

mGoogleApiClient.connect();

@Override

public void onConnectionFailed(ConnectionResult connectionResult) {

Log.i(TAG, "Connection failed. Error: " + connectionResult.getErrorCode());

}
@Override

protected void onStart() {

super.onStart();

if (mGoogleApiClient != null) {

mGoogleApiClient.connect();

}}

@Override

protected void onStop() {

super.onStop();

if (mGoogleApiClient.isConnected()) {

mGoogleApiClient.disconnect();

}}

protected void startLocationUpdates() {

// Create the location request

mLocationRequest = LocationRequest.create()

.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)

.setInterval(UPDATE_INTERVAL)

.setFastestInterval(FASTEST_INTERVAL);

if (ActivityCompat.checkSelfPermission(this,

Manifest.permission.ACCESS_FINE_LOCATION) !=

PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,

Manifest.permission.ACCESS_COARSE_LOCATION) !=

PackageManager.PERMISSION_GRANTED) {

return;

}
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,

mLocationRequest, this);

@Override

public void onLocationChanged(Location location) {

String msg = "Updated Location: " +

Double.toString(location.getLatitude()) + "," +

Double.toString(location.getLongitude());

tvLocation.setText(String.valueOf(location.getLatitude() +"

"+String.valueOf(location.getLongitude())));

Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();

if(isFirstTime){

//code to draw path on map

getDirection = findViewById(R.id.btnGetDirection);

getDirection.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

new FetchURL(MainActivity.this).execute(getUrl(place1.getPosition(),

place2.getPosition(), "driving"), "driving");

});

place1 = new MarkerOptions().position(new LatLng(location.getLatitude(),

location.getLongitude())).title("Location 1");

place2 = new MarkerOptions().position(new

LatLng(19.021824,72.8662016)).title("MSBTE");
mapFragment = (MapFragment)

getFragmentManager().findFragmentById(R.id.mapNearBy);

mapFragment.getMapAsync(this);

isFirstTime = false;

} }}

3) Develop and application to send and receive SMS (Design minimal UI as per your
choice. Write XML, java and manifest file) (Note: Consider appropriate XML file.
All attributes are not required. In java file all imports are not expected. Different
relevant login/code can be considered. Statements showing permissions can be
written under AndroidManifest.xml) [S-22]

Permissions and <receiver> tag required in AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS" />

<uses-permission android:name="android.permission.SEND_SMS"/>

<uses-permission android:name="android.permission.READ_SMS"/>

<uses-permission android:name="android.permission.WRITE_SMS"/>

<receiver

android:name=".SmsReceiver"

android:enabled="true"

android:exported="true">

<intent-filter>

<action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter>

</receiver>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>


<androidx.constraintlayout.widget.ConstraintLayout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<TextView

android:id="@+id/textView"

android:layout_width="81dp"

android:layout_height="41dp"

android:layout_marginEnd="268dp"

android:layout_marginBottom="576dp"

android:text="To :"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"/>

<TextView

android:id="@+id/textView2"

android:layout_width="70dp"

android:layout_height="43dp"

android:layout_marginEnd="276dp"

android:layout_marginBottom="512dp"

android:text="Sms Text"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />
<EditText

android:id="@+id/etPhno"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginEnd="40dp"

android:layout_marginBottom="572dp"

android:ems="10"

android:inputType="textPersonName"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />

<EditText

android:id="@+id/etmsg"

android:layout_width="193dp"

android:layout_height="51dp"

android:layout_marginEnd="56dp"

android:layout_marginBottom="504dp"

android:inputType="textPersonName"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

tools:ignore="SpeakableTextPresentCheck" />

<Button

android:id="@+id/btnSms"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginEnd="156dp"
android:layout_marginBottom="400dp"

android:text="SEND SMS"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.testreceivesms;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.ActivityCompat;

import androidx.core.content.ContextCompat;

import android.Manifest;

import android.content.IntentFilter;

import android.content.pm.PackageManager;

import android.os.Bundle;

import android.telephony.SmsManager;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

SmsReceiver sms= new SmsReceiver();

EditText et1,et2;

Button b1;

@Override

protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

et1=findViewById(R.id.etPhno);

et2=findViewById(R.id.etmsg);

b1=findViewById(R.id.btnSms);

if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.SEN

D_SMS)!=

PackageManager.PERMISSION_GRANTED)

ActivityCompat.requestPermissions(MainActivity.this,new

String[]{Manifest.permission.SEND_SMS},100);

b1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

try {

String phno= et1.getText().toString();

String msg=et2.getText().toString();

SmsManager smsManager= SmsManager.getDefault();

smsManager.sendTextMessage(phno,null,msg,null,null);

Toast.makeText(MainActivity.this,"Sms sent successfully",

Toast.LENGTH_LONG).show();

catch(Exception e)

{
Toast.makeText(MainActivity.this,"Sms failed to send... try again",

Toast.LENGTH_LONG).show();

});

@Override

protected void onStart() {

super.onStart();

IntentFilter filter=new

IntentFilter("android.provider.Telephony.SMS_RECEIVED");

registerReceiver(sms,filter);

@Override

protected void onStop() {

super.onStop();

unregisterReceiver(sms);

SmsReceiver.java

package com.example.testreceivesms;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;
import android.telephony.SmsMessage;

import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

SmsReceiver(){}

@Override

public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();

if (bundle != null) {

// Retrieve the SMS Messages received

Object[] sms = (Object[]) bundle.get("pdus");

// For every SMS message received

for (int i=0; i < sms.length; i++) {

// Convert Object array

SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

String phone = smsMessage.getOriginatingAddress();

String message = smsMessage.getMessageBody().toString();

Toast.makeText(context, “Received from “+ phone + ": " + message,

Toast.LENGTH_SHORT).show();

}
4) Develop an application to display Google map with user's current location. (Note
: Consider the appropriate XML file. All attributes are not required. In java file all
imports are not expected. Different relevant logic/code can be considered.)[S-22]

act ivity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

<fragment

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/google_map"

android:name="com.google.android.gms.maps.SupportMapFragment" />

</RelativeLayout>

MainActivity.Java

package com.example.location;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.ActivityCompat;

import androidx.fragment.app.FragmentActivity;

import android.Manifest;

import android.content.pm.PackageManager;

import android.location.Location;
import android.os.Bundle;

import android.widget.Toast;

import com.google.android.gms.location.FusedLocationProviderClient;

import com.google.android.gms.location.LocationServices;

import com.google.android.gms.maps.CameraUpdateFactory;

import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.OnMapReadyCallback;

import com.google.android.gms.maps.SupportMapFragment;

import com.google.android.gms.maps.model.LatLng;

import com.google.android.gms.maps.model.MarkerOptions;

import com.google.android.gms.tasks.OnSuccessListener;

import com.google.android.gms.tasks.Task;

public class MainActivity extends FragmentActivity implements OnMapReadyCallback

Location currentlocation; FusedLocationProviderClient fusedLocationProviderClient;

private static final int REQUEST_CODE = 101;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

fusedLocationProviderClient =

LocationServices.getFusedLocationProviderClient(this);

fetchLastLocation();

private void fetchLastLocation() {


if (ActivityCompat.checkSelfPermission(this,

Manifest.permission.ACCESS_FINE_LOCATION) !=

PackageManager.PERMISSION_GRANTED &&

ActivityCompat.checkSelfPermission(this,

Manifest.permission.ACCESS_COARSE_LOCATION) !=

PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this,new

String[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_CODE);

return;

Task<Location> task = fusedLocationProviderClient.getLastLocation();

task.addOnSuccessListener(new OnSuccessListener<Location>() {

@Override

public void onSuccess(Location location) {

if(location!=null)

currentlocation=location;

Toast.makeText(getApplicationContext(),currentlocation.getLatitude()+""+current

location.getLongitude(), Toast.LENGTH_SHORT).show();

SupportMapFragment supportMapFragment =

(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.go

ogle_map);

supportMapFragment.getMapAsync(MainActivity.this);

}
});

} @Override

public void onMapReady(@NonNull GoogleMap googleMap) {

LatLng latLng=new

LatLng(currentlocation.getLatitude(),currentlocation.getLongitude());

MarkerOptions markerOptions=new MarkerOptions().position(latLng)

.title("I am Here");

googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));

googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,5));

googleMap.addMarker(markerOptions);

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[]

permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

switch (requestCode) {

case REQUEST_CODE:

if (grantResults.length > 0 && grantResults[0] ==

PackageManager.PERMISSION_GRANTED) {

fetchLastLocation();

break;

}
5) Develop a program to perform addition, subtraction, division, multiplication of
two numbers and display the result. (Use appropriate UI controls). [W-23]

Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and

fill all required details to create a new project.

Step 2 − Add the following code to res/layout/activity_main.xml.

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:padding="4dp">

<TextView

android:id="@+id/textResult"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_marginTop="70dp"

android:background="#008080"

android:padding="5dp"

android:text="Code4Example"

android:textColor="#fff"

android:textSize="24sp"

android:textStyle="bold" />

<EditText

android:id="@+id/editNum1"
android:inputType="number"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_centerInParent="true" />

<EditText

android:id="@+id/editNum2"

android:inputType="number"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/editNum1"

android:layout_centerInParent="true" />

<GridLayout

android:layout_centerHorizontal="true"

android:layout_centerInParent="true"

android:layout_below="@+id/editNum2"

android:columnCount="2"

android:rowCount="2"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:layout_margin="1dp"

android:onClick="btnAdd"
android:text="+" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:layout_margin="1dp"

android:onClick="btnSub"

android:text="-" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:layout_margin="1dp"

android:onClick="btnMul"

android:text="*" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:layout_margin="1dp"

android:onClick="btnDiv"

android:text="/" />

</GridLayout>

</RelativeLayout>

Step 3 − Add the following code to src/MainActivity.java


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

EditText editNum1,editNum2;

TextView textResult;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

editNum1= findViewById(R.id.editNum1);

editNum2= findViewById(R.id.editNum2);

textResult= findViewById(R.id.textResult);

public void btnAdd(View view){

double num1 = Double.parseDouble(editNum1.getText().toString());

double num2 = Double.parseDouble(editNum2.getText().toString());

double result = num1 + num2;

textResult.setText(Double.toString(result));

public void btnSub(View view){

double num1 = Double.parseDouble(editNum1.getText().toString());

double num2 = Double.parseDouble(editNum2.getText().toString());


double result = num1 - num2;

textResult.setText(Double.toString(result));

public void btnMul(View view){

double num1 = Double.parseDouble(editNum1.getText().toString());

double num2 = Double.parseDouble(editNum2.getText().toString());

double result = num1 * num2;

textResult.setText(Double.toString(result));

public void btnDiv(View view){

double num1 = Double.parseDouble(editNum1.getText().toString());

double num2 = Double.parseDouble(editNum2.getText().toString());

double result = num1 / num2;

textResult.setText(Double.toString(result));

Output:
6) Develop an application to display a Google Map. (Write JAVA & Manifest file) [W-
23]

AndroidManifest.xml code:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="example.com.mapexample">

<!--

The ACCESS_COARSE/FINE_LOCATION permissions are not requir

ed to use

Google Maps Android API v2, but you must specify either coarse or fine

location permissions for the 'MyLocation' functionality.

-->

<usespermission android:name="android.permission.ACCESS_FINE_LOCATION

" />

<usespermission android:name="android.permission.ACCESS_COARSE_LOCAT

ION" />

<uses-permission android:name="android.permission.INTERNET" />

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">
<meta-data

android:name="com.google.android.geo.API_KEY"

android:value="@string/google_maps_key" />

<activity

android:name=".MapsActivity"

android:label="@string/title_activity_maps">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

code of MapsActivity.java :

package example.com.mapexample;

import android.support.v4.app.FragmentActivity;

import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;

import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.OnMapReadyCallback;

import com.google.android.gms.maps.SupportMapFragment;

import com.google.android.gms.maps.model.LatLng;

import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyC

allback{
private GoogleMap mMap;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_maps);

// Obtain the SupportMapFragment and get notified when the map is ready to be used

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragment

Manager()

.findFragmentById(R.id.map);

mapFragment.getMapAsync(this);

@Override

public void onMapReady(GoogleMap googleMap) {

mMap = googleMap;

// Add a marker in Sydney and move the camera

LatLng sydney = new LatLng(-34, 151);

mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sy

dney"));

mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

}
7) Develop an application to update a record of an employee whose emp.id is ‘E101’
in SQlite database. Change employee name from “POR" to “XYZ". Also display the
updated record (Write .java and .xml files). [W-23]

activity_update_emp.xml file

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

<!--Edit text to enter employee name-->

<EditText

android:id="@+id/idEdtEmpName"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:hint="Enter Employee Name" />

<!--edit text for employee salary-->

<EditText

android:id="@+id/idEdtEmpSalary"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:hint="Enter Employee Salary" />


<!--button for adding new employee-->

<Button

android:id="@+id/idBtnAddCourse"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:text="Add Employee"

android:textAllCaps="false" />

</LinearLayout>

DBHandler.java file

import android.content.ContentValues;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class DBHandler extends SQLiteOpenHelper {

// creating a constant variables for our database.

// below variable is for our database name.

private static final String DB_NAME = "empdb";

// below int is our database version

private static final int DB_VERSION = 1;

// below variable is for our table name.

private static final String TABLE_NAME = "myemp";

// below variable is for our id column.

private static final String ID_COL = "id";


// below variable is for our course name column

private static final String NAME_COL = "emp_name";

// below variable is for our employee salary column.

private static final String TRACKS_COL = "emp_salary";

// creating a constructor for our database handler.

public DBHandler(Context context) {

super(context, DB_NAME, null, DB_VERSION);

// below method is for creating a database by running a sqlite query

@Override

public void onCreate(SQLiteDatabase db) {

// on below line we are creating

// an sqlite query and we are

// setting our column names

// along with their data types.

String query = "CREATE TABLE " + TABLE_NAME + " ("

+ ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, "

+ NAME_COL + " TEXT,"

+ SALARY_COL + " TEXT)";

// at last we are calling a exec sql

// method to execute above sql query

db.execSQL(query);

// this method is use to add new EMPLOYEE to our sqlite database.

public void addNewCourse(String empName, String empSalary) {


// on below line we are creating a variable for

// our sqlite database and calling writable method

// as we are writing data in our database.

SQLiteDatabase db = this.getWritableDatabase();

// on below line we are creating a

// variable for content values.

ContentValues values = new ContentValues();

// on below line we are passing all values

// along with its key and value pair.

values.put(NAME_COL, empName);

values.put(TRACKS_COL, empSalary);

// after adding all values we are passing

// content values to our table.

db.insert(TABLE_NAME, null, values);

// at last we are closing our

// database after adding database.

db.close();

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// this method is called to check if the table exists already.

db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

onCreate(db);

}
}

empRVAdapter.java file

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

// creating variables for our edittext, button and dbhandler

private EditText empNameEdt, empSalaryEdt;

private Button addempBtn;

private DBHandler dbHandler;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// initializing all our variables.

empNameEdt = findViewById(R.id.idEdtempName);

empSalaryEdt = findViewById(R.id.idEdtempSalary);

addempBtn = findViewById(R.id.idBtnAddemp);

// creating a new dbhandler class

// and passing our context to it.

dbHandler = new DBHandler(MainActivity.this);


// below line is to add on click listener for our add emp button.

addCourseBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// below line is to get data from all edit text fields.

String empName = empNameEdt.getText().toString();

String empSalary = empSalaryEdt.getText().toString();

// validating if the text fields are empty or not.

if (empName.isEmpty() && empSalary.isEmpty() &&) {

Toast.makeText(MainActivity.this, "Please enter all the data..",

Toast.LENGTH_SHORT).show();

return;

// on below line we are calling a method to add new

// employee to sqlite data and pass all our values to it.

dbHandler.addNewemp(empName, empSalary);

// after adding the data we are displaying a toast message.

Toast.makeText(MainActivity.this, "Employee has been added.",

Toast.LENGTH_SHORT).show();

empNameEdt.setText("");

empSalaryEdt.setText("");

});

}
Update employee record java file:

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class UpdateCourseActivity extends AppCompatActivity {

// variables for our edit text, button, strings and dbhandler class.

private EditText empNameEdt, empSalaryEdt;

private Button updateempBtn;

private DBHandler dbHandler;

String empName, empSalary;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_update_emp);

// initializing all our variables.

empNameEdt = findViewById(R.id.idEdtempName);

empSalaryEdt = findViewById(R.id.idEdtempSalary);

updateempBtn = findViewById(R.id.idBtnUpdateemp);

// on below line we are initializing our dbhandler class.

dbHandler = new DBHandler(UpdateempActivity.this);


// on below lines we are getting data which

// we passed in our adapter class.

empName = getIntent().getStringExtra("emp_name");

empSalary = getIntent().getStringExtra("emp_salary");

// setting data to edit text

// of our update activity.

empNameEdt.setText(empName);

empSalaryEdt.setText(empSalary);

// adding on click listener to our update course button.

updateempBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// inside this method we are calling an update employee

// method and passing all our edit text values.

dbHandler.updateemp(empName, empNameEdt.getText().toString(),

empSalaryEdt.getText().toString());

// displaying a toast message that our employee database has been updated.

Toast.makeText(UpdateempActivity.this, "Employee Record Updated..",

Toast.LENGTH_SHORT).show();

// launching our main activity.

Intent i = new Intent(UpdateempActivity.this, MainActivity.class);

startActivity(i);

}});

}
8) Describe all steps in application deployment on google playstore. ii) Write steps
for customized permissions. [W-23]

a) Application deployment steps:

Publishing is the general process that makes your Android app available to users.

When you publish an Android app on google play store, you do the following:

Prepare the app for release.

During the preparation step, you build a release version of your app.

Release the app to users.

During the release step, you publicize, sell, and distribute the release version

of your app, which users can download and install on their Android-powered

devices.

Prepare your app for release

1)Preparing your app for release is a multistep process involving the following tasks:

Configure your app for release.

At a minimum, you need to make sure that logging is disabled and removed

and that your release variant has debuggable false for Groovy

or isDebuggable = false for Kotlin script set. You should also set your app's

version information.

Build and sign a release version of your app.

You can use the Gradle build files with the release build type to build and

sign a release version of your app. For more information, see Build and run

your app.

Test the release version of your app.

Before you distribute your app, you should thoroughly test the release version

on at least one target handset device and one target tablet device. Firebase
Test Lab is useful for testing across a variety of devices and configurations.

Update app resources for release.

Make sure that all app resources, such as multimedia files and graphics, are

updated and included with your app or staged on the proper production

servers.

Prepare remote servers and services that your app depends on.

If your app depends on external servers or services, make sure they are secure

and production ready.

2) Signing of Application

 Application signing allows developers to identify the author of the application and
to update their application without creating complicated interfaces and
permissions.
 Every application that is run on the Android platform must be signed by the
developer. Applications that attempt to install without being signed will be rejected
by either Google Play or the package installer on the Android device.

APK Signing Schemes

 v1 Scheme: based on JAR signing.


 v2 Scheme: APK Signature Scheme v2, which was introduced in Android 7.0.
 v3 Scheme: APK Signature Scheme v3, which was introduced in Android 9.

b) Steps for Customized Permissions:

1) App signing

All APKs must be signed with a certificate whose private key is held by their

developer. The certificate does not need to be signed by a certificate authority. It's

allowable, and typical, for Android apps to use self-signed certificates. The purpose

of certificates in Android is to distinguish app authors. This lets the system grant or

deny apps access to signature-level permissions and grant or deny an app's request to

be given the same Linux identity as another app.


2)Grant signature permissions after device manufacturing time

Starting in Android 12 (API level 31), the knownCerts attribute for signature-level

permissions lets you refer to the digests of known signing certificates at declaration

time.

You can declare the knownCerts attribute and use the knownSigner flag in your

app's protectionLevel attribute for a particular signature-level permission. Then, the

system grants that permission to a requesting app if any signer in the requesting app's

signing lineage, including the current signer, matches one of the digests that's

declared with the permission in the knownCerts attribute.

The knownSigner flag lets devices and apps grant signature permissions to other

apps without having to sign the apps at the time of device manufacturing and

shipment.

3)User IDs and file access

At install time, Android gives each package a distinct Linux user ID. The identity

remains constant for the duration of the package's life on that device. On a different

device, the same package might have a different UID—what matters is that each

package has a distinct UID on a given device.

Because security enforcement happens at the process level, the code of any two

packages can't normally run in the same process, since they need to run as different

Linux users.

Any data stored by an app is assigned that app's user ID and isn't normally accessible

to other packages.

For example, an app that needs to control which other apps can start one of its

activities can declare a permission for this operation as follows:

<manifest
xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.myapp" >

<permission

android:name="com.example.myapp.permission.DEADLY_ACTIVITY"

android:label="@string/permlab_deadlyActivity"

android:description="@string/permdesc_deadlyActivity"

android:permissionGroup="android.permission-group.COST_MONEY"

android:protectionLevel="dangerous" />

...

</manifest>

8) Develop a program to send an email. [sample question paper]


9) Write a program to locate user’s current location. (Write ONLY .java and manifest
file). [sample question paper]

You might also like