Android Tutorial

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

Android Tutorial

"The only true wisdom is in knowing you know nothing."


― Socrates

Manjunath.R

#16/1, 8th Main Road, Shivanagar, Rajajinagar, Bangalore560010, Karnataka, India

*Corresponding Author Email: [email protected]

*Website: http://www.myw3schools.com/
 Educational institutions are teaching it

 Corporate societies are employing it

 Pupils need it

 (Pedagogues desire it... ;)

 (Coders perceive it... :)

The Android (a mobile operating system based on a modified version of the Linux kernel) which was
developed by the Open Handset Alliance, led by Google, and other companies – and has now garnered
the interest of a million smartphone users. This book is for all android developers, whether you are a
noviceor an experienced pro. The beginner will find its carefully paced discussions and many
examplesespecially helpful. Of course those who have already familiar with android programming are
likely toderive more benefits from this book. After completing this book you will find yourself at a
moderate levelof expertise in Android programming from where you can take yourself to next levels.
Contents

Java Programming 1

Android 109

"Remember that code is really the language in which we ultimately express the requirements. We may

create languages that are closer to the requirements. We may create tools that help us parse and assemble

those requirements into formal structures. But we will never eliminate necessary precision—so there will

always be code."

― Robert C. Martin
Java Programming Language

Paradigm Multi-paradigm: generic, object-oriented (class-


based), imperative, reflective

Designed by James Gosling

Developer Sun Microsystems

First appeared May 23, 1995; 25 years ago

Stable release Java SE 14 / March 17, 2020; 2 months ago

Typing discipline Static, strong, safe, nominative, manifest

Filename extensions .java, .class, .jar

Website oracle.com/java/

Influenced by

CLU, Simula67, LISP, SmallTalk, Ada 83, C++, C#, Eiffel, Mesa, Modula-3, Oberon, Objective-
C, UCSD Pascal, Object Pascal

Influenced

Ada
2005, BeanShell, C#, Chapel, Clojure, ECMAScript, Fantom, Gambas, Groovy, Hack, Haxe, J#, Kotli
n, PHP, Python, Scala, Seed7, Vala

Java is one of the most used programming languages used in the development of virus-free
systems [because:

469
1
 No explicit pointer
 Java Programs run inside a virtual machine sandbox

] and a open-source and free high level programming language and a computing platform for
application development conceived by James Gosling, Patrick Naughton, Chris Warth, Ed
Frank, and Mike Sheridan at Sun Microsystems, Inc. in 1991 to create programs to control
consumer electronics (which is now a subsidiary of Oracle Corporation) and released in 1995,
runs on a variety of platforms, such as Windows, Mac OS, and the various versions of UNIX,
used in internet programming, mobile devices, games, e-business solutions etc., because of its
reliability, high performance, simplicity and easy to use and quick to learn and rigid versus
extensibility. Since Java has a runtime environment (JRE) and API, it is called a platform. As a
language that has the Object-Oriented feature, Java supports:

 Polymorphism
 Inheritance
 Encapsulation
 Abstraction
 Classes
 Objects
 Instance
 Method
 Message Passing

Advantages:

 Object Oriented

 Platform Independent

 Simple

470
2
 Dynamic

 Secure

 Multi-threaded

 Architecture-neutral

 Portable

 Robust

Types of Java Applications:

 Standalone Application

 Web Application

 Enterprise Application

 Mobile Application

Java Language Keywords

abstract continue for new switch


assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while

471
3
text file named HelloWorld.java

name

main()method
public class HelloWorld {
public static void main(String [] args) {
System.out.println("Hello, World!"); statement
}
}

 Declare a class with name HelloWorld.

 Declare the main method public static void main(String args[])

 Now Type the System.out.println("Hello, World!"); which displays the text Hello World.

Process of Java program execution:

A Java program:

public class HelloWorld {


public static void main(String [] args) {
System.out.println("Hello, World!");
}
}

472
4
is written using Text Editor , such as [ Notepad++, Notepad ] and saved with [.java] Extension.
File Saved with [.java] extension is called Source Program or Source Code.

// HelloWorld.java

public class HelloWorld {


public static void main(String [] args) {
System.out.println("Hello, World!");
}
}

/* Because the class name is HelloWorld the source file should be named as
HelloWorld.java */

and sent to the java compiler (i.e., javac compiler) where the source program is compiled i.e.,
the program is entirely read and translated into Java byte codes (but not into machine language).
If the javac compiler finds any error during compilation, it provides information about the error
to the programmer. The programmer has to review code and check for the solution. And if there
are no errors the translated program (i.e., java byte codes − a highly optimized set of
instructions) is stored in computers main memory as HelloWorld.class and since the java byte
codes cannot be trusted to be correct. Therefore before execution they are verified and converted
to machine level language i.e., machine code sequence of 0s and 1s by Java run-time system,
which is called the Java Virtual Machine (JVM) and is executed by a Java interpreter and

Hello, World!

is displayed on the console screen.

// Comment on one line

/* Comment on one or

473
5
More lines */

/** Documentation comment */

JVM (Java Virtual Machine) resides under RAM (Random Access Memory – the stuff
that boosts up your computer to run faster and allows your computer to perform many tasks at
the same time) and JVM comprises:

 Class Loader: it loads .class file that contains Java byte


codes.
 Byte Code Verifier: it verifies byte codes.
 Execution Engine: it translates java byte codes to machine
codes and executes them.

In the statement:

public class HelloWorld

The word "HelloWorld" implies: name of the class is HelloWorld and this class is public.
public means that the class HelloWorld can be accessed by any other class in any package.

In the program:

public class HelloWorld {

/* This is my first java program.


* This will print 'Hello, World!' as the output
*/

public static void main(String [] args) {


System.out.println("Hello, World!"); // prints Hello, World!
}

474
6
}

public class HelloWorld {

imply the body of the class HelloWorld (Here: the curly brace '{' imply the beginning of the
class and the curly brace '}' imply the end of the class) within which the main method

public static void main(String [] args) {

is written. All method names should start with a Lower Case letter. For all class names the first
letter should be in Upper Case.

Java program processing starts from the main() method which is a


mandatory part of every Java program.

public static void main(String [] args) → main method (a collection of


statements or methods like System.out.println( ) that are grouped together to perform an
operation) and this main method is public

and

} imply the body of the main method

(Here: the curly brace

475
7
{

imply the beginning of the main method and the curly brace

imply the end of the main method) within which the statement:

System.out.println("Hello, World!");

is written and executed.

 main method in java functions like main function main() in C and C++.

If the statement:

public class HelloWorld

is replaced by the statement:

public class sample i.e.,

public class sample {


public static void main(String [] args) {
System.out.println("Hello, World!");
}
}

Then the error will be displayed on the console screen because the program written in notepad is
saved as HelloWorld.java not as sample.java. Name of the program file should exactly match
the class name. When saving the file, you should save it using the class name and append '.java'
to the end of the name.

476
8
Like C and C++, Java is also a case sensitive language i.e., capital letters (or upper case letters)
must be avoided to prevent the display of error on the screen. For example: If the statement:

PUBLIC static void main(String [] args)

is written instead of the statement:

public static void main(String [] args)

, compilation Error will be displayed on the screen.

Each code statement must end with a semicolon. If we forget to end each program statement
within the body of main method with a semicolon (";") − Error will be displayed on the screen.

The program begins its execution with the method:

public static void main(String [] args)

the main method − the entry point of the program execution i.e., the point from where the
execution of Java program begins.

In the statement:

System.out.println();

 System → name of a standard class that contains variables and methods for supporting
simple keyboard and character output to the display.
 out → represents the standard output stream

477
9
 println() → output method of the Java language which makes provision to print the
output in the next line:

Hello,world!

on the screen.

The text Hello,world! should be enclosed by the double quotation marks (" ") and should be
written within the println method and this println method should be ended with the semicolon
i.e.,

System.out.println("Hello,world!");

Otherwise the compilation error will be displayed on the console screen.

public class HelloWorld {


public static void main(String [] args) {
System.out.println("Hello, World!");
System.out.println("Hello, World!");
}
}

Output on the screen:

Hello, World!
Hello, World!

public class HelloWorld {


public static void main(String [] args) {
System.out.print("Hello, World!");
System.out.print("Hello, World!");

478
10
}
}

Output on the screen:


Hello, World!Hello, World!

In the statement:

public static void main(String [] args)

 public → implies: this method can accessed from anywhere outside the class HelloWorld

If the word "public" in the statement:

public static void main(String [] args)

is replaced by the word

private

or

protected

Then compilation error will be flagged on the screen because if the method is declared private or
protected then this method does not make itself available to JVM for execution.

 main → implies the name of the method


 static means the main method is the part of the class HelloWorld

479
11
Why static?

Because the program execution begins from the main method and if the main method is not
declared static then the execution of the program does not take place.

 void → implies the main method does not return any value i.e., main method return
nothing when it completes execution.
 String args[]→ While running the program if we want to pass something to the
main method, then this parameter is used as the way of taking input from the user − so we
can pass some strings while running the program if we want.

Moreover, JVM cannot recognize the method:

public static void main(String [] args)

as method if the parameter String [] args is not included.

If the word args in the statement: public static void main(String [] args) is replaced by
another word say jamesgosling or java

i.e.,

public class HelloWorld


{
public static void main(String [] jamesgosling)
{
System.out.println("Hello, World!");
}
}

public class HelloWorld {


public static void main (String [] java) {

480
12
System.out.println("Hello, World!");
}
}

No error will be displayed on the screen i.e.,

Hello,world!

will be displayed on the console screen.

If the statement:

public static void main(String [] args)

is replaced by the statement public static void main(String []) − Then the error is
displayed on the screen.

Most Java programmers prefer args and argv i.e., the statements:

 public static void main(String [] args)


 public static void main(String [] argv)

are preferred.

If the space is left between the words Hello and World i.e., if the statement:

public class Hello World

481
13
is written instead of the statement:

public class HelloWorld

Then the compilation error will be displayed on the console screen.

Java Modifiers

 Access Modifiers − default, public, protected, private


 Non-access Modifiers − final, abstract, strictfp

Java Variables

 Local Variables
 Class Variables (Static Variables)
 Instance Variables (Non-static Variables)

Java String Methods

Method Description Return Type

charAt() Returns the character at the specified char

index (position)

codePointAt() Returns the Unicode of the character at int

the specified index

codePointBefore() Returns the Unicode of the character int

before the specified index

482
14
codePointCount() Returns the Unicode in the specified int

text range of this String

compareTo() Compares two strings lexicographically int

compareToIgnoreCase() Compares two strings lexicographically, int

ignoring case differences

concat() Appends a string to the end of another String

string

contains() Checks whether a string contains a boolean

sequence of characters

contentEquals() Checks whether a string contains the boolean

exact same sequence of characters of the

specified CharSequence or StringBuffer

copyValueOf() Returns a String that represents the String

characters of the character array

endsWith() Checks whether a string ends with the boolean

specified character(s)

equals() Compares two strings. Returns true if boolean

the strings are equal, and false if not

equalsIgnoreCase() Compares two strings, ignoring case boolean

considerations

format() Returns a formatted string using the String

specified locale, format string, and

arguments

getBytes() Encodes this String into a sequence of byte[]

bytes using the named charset, storing

the result into a new byte array

getChars() Copies characters from a string to an void

array of chars

hashCode() Returns the hash code of a string int

indexOf() Returns the position of the first found int

occurrence of specified characters in a

483
15
string

intern() Returns the index within this string of String

the first occurrence of the specified

character, starting the search at the

specified index

isEmpty() Checks whether a string is empty or not boolean

lastIndexOf() Returns the position of the last found int

occurrence of specified characters in a

string

length() Returns the length of a specified string int

matches() Searches a string for a match against a boolean

regular expression, and returns the

matches

offsetByCodePoints() Returns the index within this String int

that is offset from the given index by

codePointOffset code points

regionMatches() Tests if two string regions are equal boolean

replace() Searches a string for a specified value, String

and returns a new string where the

specified values are replaced

replaceFirst() Replaces the first occurrence of a String

substring that matches the given regular

expression with the given replacement

replaceAll() Replaces each substring of this string String

that matches the given regular

expression with the given replacement

split() Splits a string into an array of String[]

substrings

startsWith() Checks whether a string starts with boolean

specified characters

subSequence() Returns a new character sequence that is CharSequence

484
16
a subsequence of this sequence

substring() Extracts the characters from a string, String

beginning at a specified start position,

and through the specified number of

character

toCharArray() Converts this string to a new character char[]

array

toLowerCase() Converts a string to lower case letters String

toString() Returns the value of a String object String

toUpperCase() Converts a string to upper case letters String

trim() Removes whitespace from both ends of a String

string

valueOf() Returns the primitive value of a String String

object

Java Math Methods

Method Description Return Type

abs(x) Returns the absolute value of x double|float|int|long

acos(x) Returns the arccosine of x, in radians double

asin(x) Returns the arcsine of x, in radians double

atan(x) Returns the arctangent of x as a numeric double


value between -PI/2 and PI/2 radians
atan2(y,x) Returns the angle theta from the conversion double
of rectangular coordinates (x, y) to polar
coordinates (r, theta).
cbrt(x) Returns the cube root of x double

ceil(x) Returns the value of x rounded up to its double


nearest integer
copySign(x, y) Returns the first floating point x with the double

485
17
sign of the second floating point y
cos(x) Returns the cosine of x (x is in radians) double

cosh(x) Returns the hyperbolic cosine of a double double


value
exp(x) Returns the value of Ex double

expm1(x) Returns ex -1 double

floor(x) Returns the value of x rounded down to its double


nearest integer
getExponent(x) Returns the unbiased exponent used in x int

hypot(x, y) Returns sqrt(x2 +y2) without intermediate double


overflow or underflow
IEEEremainder(x, Computes the remainder operation on x and y double
y) as prescribed by the IEEE 754 standard
log(x) Returns the natural logarithm (base E) of x double

log10(x) Returns the base 10 logarithm of x double

log1p(x) Returns the natural logarithm (base E) of double


the sum of x and 1
max(x, y) Returns the number with the highest value double|float|int|long

min(x, y) Returns the number with the lowest value double|float|int|long

nextAfter(x, y) Returns the floating point number adjacent double|float


to x in the direction of y
nextUp(x) Returns the floating point value adjacent double|float
to x in the direction of positive infinity
pow(x, y) Returns the value of x to the power of y double

random() Returns a random number between 0 and 1 double

round(x) Returns the value of x rounded to its int


nearest integer
rint() Returns the double value that is closest to double
x and equal to a mathematical integer
signum(x) Returns the sign of x double

sin(x) Returns the sine of x (x is in radians) double

sinh(x) Returns the hyperbolic sine of a double double


value
sqrt(x) Returns the square root of x double

tan(x) Returns the tangent of an angle double

tanh(x) Returns the hyperbolic tangent of a double double

486
18
value
toDegrees(x) Converts an angle measured in radians to an double
approx. equivalent angle measured in
degrees
toRadians(x) Converts an angle measured in degrees to an double
approx. angle measured in radians
ulp(x) Returns the size of the unit of least double|float
precision (ulp) of x

 All Math methods are static.

Data Type Size Description

byte 1 byte Stores whole numbers from -128 to 127

short 2 bytes Stores whole numbers from -32,768 to 32,767

int 4 bytes Stores whole numbers from -2,147,483,648 to 2,147,483,647

long 8 bytes Stores whole numbers from -9,223,372,036,854,775,808 to


9,223,372,036,854,775,807

float 4 bytes Stores fractional numbers. Sufficient for storing 6 to 7


decimal digits

double 8 bytes Stores fractional numbers. Sufficient for storing 15 decimal


digits

boolean 1 bit Stores true or false values

char 2 bytes Stores a single character/letter or ASCII values

487
19
 Program 1.1

Java program to print the word "hello Bill Gates" on screen

public class HelloWorld {


public static void main (String [] args) {
System.out.println("hello Bill Gates");
}
}

The output on the screen:

hello Bill Gates

 Program 1.2

Java program to print the word " ****hello silicon city**** " on screen

public class HelloWorld {


public static void main(String [] args) {
System.out.println(" ****hello silicon city**** ");
}
}

The output on the screen:

****hello silicon city****

 Program 1.3

Java program to print

488
20
*

*****

*****

*****

*****

on screen

public class HelloWorld {


public static void main(String [] args) {
System.out.println("\n * ");
System.out.println("\n ***** ");
System.out.println("\n ***** ");
System.out.println("\n ***** ");
System.out.println("\n ***** ");
}
}

The output on the screen:

*****

*****

*****

*****

If new line \n is not included in the above program then the output on the screen is:

*********************

 Write a program to print the following outputs:

489
21
(a)

****

**java**

****

(b)

****************

* *

* Hello World! *

* *

****************

(c)

Braces come in pairs!

Comments come in pairs!

All statements end with a semicolon!

Spaces are optional!

Must have a main method!

java is done mostly in lowercase. Like C & C++ it's also a case-sensitive language

Answers:

490
22
a)

public class HelloWorld {


public static void main (String [] args) {
System.out.println("\n * ");
System.out.println("\n **** ");
System.out.println("\n **java** ");
System.out.println("\n **** ");
System.out.println("\n * ");
}
}

b)

public class HelloWorld {


public static void main (String [] args) {
System.out.println("\n **************** ");
System.out.println("\n * * ");
System.out.println("\n * Hello World! * ");
System.out.println("\n * * ");
System.out.println("\n **************** ");
}
}

c)

public class HelloWorld {


public static void main (String [] args) {
System.out.println("\n Braces come in pairs!");
System.out.println("\n Comments come in pairs!");
System.out.println("\n All statements end with a semicolon!");
System.out.println("\n Spaces are optional!");

491
23
System.out.println("\n Must have a main method!");
System.out.println("\n java is done mostly in lowercase. Like C & C++ it's also a case-
sensitive language");
}
}

 Program 1.4

Java program to find the area of the circle

public class HelloWorld {


public static void main (String [] args) {
int r, area;
r = 2;
area = 3.14 * r * r;
System.out.println("The area of the circle = " + area);
}
}

The output on the screen:

The area of the circle = 12

In C language, the statement:

printf("The area of the circle = %d ", area);

make the provision to print the output on the screen.

In C++ language, the statement

492
24
cout<<"The area of the circle = "<< area;

make the provision to print the output on the screen.

whereas in the Java language, the statement:

System.out.println("The area of the circle = " + area);

make the provision to print the output on the screen.

In the statement:

System.out.println("The area of the circle = " + area);

There are two strings:

 The area of the circle =


 area

plus operator (+) functions as the concatenation operator (concatenation means


connecting two statements to produce a single statement) – which (here) concatenates the string:

"The area of the circle = "

and the string:

"area (which is 3.14 * r * r (= 12 since r = 2))"

493
25
producing a String statement:

The area of the circle = 12

which will be displayed on the screen as the result.

Even though if we write ARGS instead of args i.e., even though if we express args in capital
letter, No error will be displayed on the screen.

public static void main(String [] ARGS) → no error will be displayed on the console
screen

Operator Name Description Example

+ Addition Adds together two values x + y

- Subtraction Subtracts one value from another x - y

* Multiplication Multiplies two values x * y

/ Division Divides one value by another x / y

% Modulus Returns the division remainder x % y

++ Increment Increases the value of a variable by 1 ++x

-- Decrement Decreases the value of a variable by 1 --x

494
26
 Program 1.5

Java program to find the circumference of the circle

public class HelloWorld {


public static void main (String [] args) {
float r, circumference;
r = 2;
circumference = 2 * 3.14 * r;
System.out.println("The circumference of the circle = " + circumference);
}
}

The output on the screen is:

The circumference of the circle = 12.57

 What will be the output of the following programs:

a)

public class HelloWorld {


public static void main (String [] args) {
double l, b, area;
l=2;
b=2.5;
area = l*b;
System.out.println("The area of the rectangle = " + area);
}
}

495
27
Answer:

The area of the rectangle = 5.0

b)

public class HelloWorld {


public static void main (String [] args) {
int a, b, c;
a= 3;
b=3;
c=3;
if ((a + b< c) || (b + c < a) || (a==b && b==c))
System.out.println(" the triangle is equilateral");
else
System.out.println(" the triangle is not possible");
}
}

Answer:

the triangle is equilateral

 Program 1.6

Java program to convert the temperature in Celsius to Fahrenheit

public class HelloWorld{


public static void main(String [] args){
float C, F;
C=38.5;

496
28
F = 9*C/5 +32;
System.out.println("temperature in Fahrenheit= " +F);
}
}

The output on the screen:

temperature in Fahrenheit= 101.3

 Program 1.7

Java program to find the sum of two numbers

public class HelloWorld


{
public static void main(String [] args)
{
int a, b, sum;
a=1;
b=2;
sum = a + b;
System.out.println("the sum of a and b = " + sum);
}
}

The output on the screen:

the sum of a and b = 3

If you want to supply the values for a and b through the key board, then we have to rewrite the
program as follows:

497
29
import java.util.Scanner;
public class HelloWorld
{
public static void main(String [] args) {
int a, b, sum;
Scanner scan = new Scanner(System.in);
System.out.print("Enter any two Numbers: ");
a = scan.nextInt();
b = scan.nextInt();
sum = a + b;
System.out.println("the sum of a and b = " + sum);
}
}

The output on the screen:

Enter any two Numbers:

If you enter two numbers 2 and 3

the sum of a and b = 5

will be outputted on the screen

Scanner is a class found in java.util package. So to use Scanner class, we first need
to include:
java.util package
in our program.

import java.util.Scanner; // This will import just the Scanner class


import java.util.*; // This will import the entire java.util package

The statement:

Scanner scan = new Scanner(System.in);

498
30
implies: declaring an object of the Scanner class "scan" to read the values entered for a and b
through the key board. And the statements:

a = scan.nextInt();
b = scan.nextInt();

imply: scan is an object of Scanner class and nextInt() is a method of the object "scan" that
allows the object "scan" to read only integer values from the keyboard.

 nextInt() that allows the object "scan" to read only integer values from the keyboard,

methods that allows the object "scan" to read other data types from the keyboard are
listed below:

Methods Datatype

nextInt() Integer

nextFloat() Float

nextDouble() Double

nextLong() Long

nextShort() Short

next() Single word

nextLine() Line of Strings

nextBoolean() Boolean

 Program 1.8

Java program to find the square root of a number

499
31
i)

public class HelloWorld


{
public static void main(String [] args) {
float x;
x = 233;
System.out.println(" square root of a number = " + Math.sqrt(x));
}
}

The output on the screen:

square root of a number = 15.264

If you want to supply the value for x through the key board, then the above program should take
the form:

import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args) {
int x;
Scanner scan = new Scanner(System.in);
System.out.print("Enter any Number: ");
x = scan.nextFloat();
System.out.println(" square root of a number = " + Math.sqrt(x));
}
}

The output on the screen:

Enter any Number:

If you enter the number 233

500
32
square root of a number = 15.264337522

will be outputted on the screen.

ii)

public class HelloWorld


{
public static void main(String [] args) {
double x;
x = 233;
System.out.println(" square root of a number = " + Math.sqrt(x));
}
}

The output on the screen:

square root of a number = 15.264337522473747

If you want to supply the value for x through the key board, then the above program should take
the form:

import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args) {
double x;
Scanner scan = new Scanner(System.in);
System.out.print("Enter any Number: ");
x = scan.nextDouble();
System.out.println(" square root of a number = " + Math.sqrt(x));
}
}

501
33
The output on the screen:

Enter any Number:


If you enter the number 233
square root of a number = 15.264337522473747
will be outputted on the screen.

 Program 1.9

What will be the output of the following program:

public class HelloWorld{


public static void main(String[] args) {
char c;
c = 'A';
System.out.println("ch= " + c);
}
}

The output on the screen:

ch=A

If you want to supply the value for c through the key board, then the above program should take
the form:

public class HelloWorld {


public static void main(String[] args) throws Exception {
char c;
System.out.print("Enter a character:");

502
34
c = (char)System.in.read();
System.out.println("ch= " + c);
}
}

The output on the screen:

Enter a character:

If you enter the character K

ch= K

will be outputted on the screen.

 Note: Exception is a problem that arises during the execution of a program. When an
exception occurs, program abnormally terminates and disrupts − throws Exception should
be written after the statement public static void main(String[] args) so that the
exceptions are thrown to the operating system to handle and the program will be
successfully executed and the output will be displayed on the screen.

 Program 2.0

import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args) {
String m;
Scanner in = new Scanner(System.in);
System.out.print("Enter the word: ");
m = in.nextLine();
System.out.println(" the word you entered = " + m);
}
}

503
35
The output on the screen:

Enter the word:

If you enter the word dog

the word you entered = dog

will be outputted on the screen.

If the statement:

m = scan.nextLine();

is written instead of

m = in.nextLine();

Then we have to replace the statement:

Scanner in = new Scanner(System.in);

by the statement:

Scanner scan = new Scanner(System.in);

Otherwise compilation error will be displayed on the console screen.

 What is the mistake in the following program:

public class HelloWorld


{
static public void main(String args []) {
float x;
x = 233;
System.out.println(" cube root of a number = " + Math.cbrt(x));

504
36
}
}

Answer:

There is no mistake in the above program.

The statement:

public static void main(String[] args)

can also be written as:

static public void main(String args [])

The output on the screen is:

cube root of a number = 6.1534494936636825

 Program 2.1

Java program to find the product of two numbers.

public class HelloWorld{


public static void main(String [] args) {
int a, b, product;
a=1;
b=2;
product = a * b;
System.out.println("the product of a and b = " + product);
}
}

505
37
The output on the screen:

the sum of a and b = 2

If you want to supply the values for a and b through the key board, then we have to rewrite the
above program as follows:

import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args) {
int a, b, product;
Scanner scan = new Scanner(System.in);
System.out.print("Enter any two Numbers: ");
a = scan.nextInt();
b = scan.nextInt();
product = a * b;
System.out.println("the product of a and b = " + product);
}
}

The output on the screen:

Enter any two Numbers:


If you enter two numbers 6 and 3
the product of a and b = 18
will be outputted on the screen

If you want to assign the floating point values for a and b, then the above program should take
the form:

import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args) {
float a, b, product;
Scanner scan = new Scanner(System.in);

506
38
System.out.print("Enter any two Numbers: ");
a = scan.nextFloat();
b = scan.nextFloat();
product = a * b;
System.out.println("the product of a and b = " + product);
}
}

The output on the screen:

Enter any two Numbers:

If you enter two floating point values 2.9 and 3.6

the product of a and b = 10.44

will be outputted on the screen.

If the statement:

System.out.println("the product of a and b = " + product);

is replaced by the statement:

System.out.println(a + "* " + b + " = " + product);

Then the output on the screen is:

2.9 * 3.6 = 10.44

507
39
 Note: The word public in the statement:

public class HelloWorld

implies: that the program or the data within the program (such as methods, variables etc.) can be
accessed directly by an external java program.

If replace the word public by private i.e.,

private class HelloWorld

is written instead of

public class HelloWorld

then the program or the data within the program (such as methods, variables etc.) cannot be
accessed directly by an external program.

If you want to insert a 10 digit number for a and b i.e.,

a=1000000000

b=3000000000, then the statement:

int a, b, product;

should be replaced by the statement:

long int a, b, product;

i.e.,

public class HelloWorld{

508
40
public static void main(String [] args){
long int a, b, product;
a=1000000000;
b=2000000000;
product = a * b;
System.out.println("the product of a and b = " + product);
}
}

The output on the screen:

the product of a and b = 3000000000000000000

 What will be the output of the following program:

public class HelloWorld{


static public void main(String args []) {
float x;
x = 2;
System.out.println(" square of a number = " + Math.pow((x), 2));
}
}

Answer:

square of a number = 4

 Program 2.2

Java program to find the square of a number

public class HelloWorld{


public static void main(String [] args){
int a, b;

509
41
a=2;
b = a * a;
System.out.println("the square of a = " + b);
}
}

The output on the screen:

the square of a = 4

If you want to supply the value for a through the key board, then we have to rewrite the above
program as follows:

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int a, b;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any Number: ");
a = scan.nextInt();
b = a * a;
System.out.println("the square of a = " + b);
}
}

The output on the screen:

Enter any number:

If you enter a number 3

the square of a = 9 will be outputted on the screen.

 Note:

510
42
 If scan.nextint() is written instead of scan.nextInt()
 public static void main(string [] args); is written instead of
public static void main(String [] args)

 system.out.println("the square of a = " + b); is written instead of

System.out.println("the square of a = " + b);

Then the compilation error will be displayed on the screen.

 Program 2.3

Java program to find the greatest of two numbers using if - else statement

The syntax of if – else statement is:

if (this condition is true)

print this statement using the println method

else

print this statement using the println method

public class HelloWorld{


public static void main(String [] args){
int a, b;
a=2;
b =3;
if(a>b)

511
43
{
System.out.println("a is greater than b");
}
else
{
System.out.println("b is greater than a");
}
}
}

The output on the screen:

b is greater than a

In the above program:

if the condition (a> b) is true, then the statement

{
System.out.println("a is greater than b");
}

is executed to print the output:

a is greater than b

else the statement

{
System.out.println("b is greater than a");
}

is executed to print the output:

b is greater than a

512
44
If you want to supply the values for a and b through the key board, then the above program
should be rewritten as:

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args){
int a, b;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any two Numbers: ");
a = scan.nextInt();
b = scan.nextInt();
if(a>b)
{
System.out.println("a is greater than b");
}
else
{
System.out.println("b is greater than a");
}
}
}

The output on the screen:

Enter any two Numbers:

If you enter two numbers 2 and 3

b is greater than a

will be outputted on the screen.

 Note:

Even if the statements:

System.out.println("a is greater than b");

513
45
System.out.println ("b is greater than a");

are not written within the braces { }

i.e.,

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args){
int a, b;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any two Numbers: ");
a = scan.nextInt();
b = scan.nextInt();
if(a>b)
System.out.println("a is greater than b");
if(b>a)
System.out.println("b is greater than a");
}
}

There will no display of compilation error on the screen or there will be no change in the
output displayed on the screen (i.e., b is greater than a will be outputted on the screen).

 Program 2.4

Java program to find the greatest of three numbers using else if statement

The syntax of else if statement is:

if (this condition is true)

514
46
print this statement using the method System.out.println( );

else if (this condition is true)

print this statement using the method System.out.println( );

else

print this statement using the method System.out.println( );

public class HelloWorld{


public static void main(String [] args){
int a, b, c;
a=2;
b =3;
c=4;
if(a>b&&a>c)
{
System.out.println("a is greater than b and c");
}
else if(b>a&&b>c)
{
System.out.println("b is greater than a and c");
}
else
{
System.out.println("c is greater than b and a");
}
}
}

The output on the screen:

515
47
c is greater than b and a

If the statements:

if(a>b&&a>c)
{
System.out.println("a is greater than b and c");
}
else if(b>a&&b>c)
{
System.out.println("b is greater than a and c");
}
else
{
System.out.println("c is greater than b and a");
}

are replaced by the statements:

if(a>b&&a>c)
{
System.out.println(a + "is greater than" + b + "and" + c);
}
else if(b>a&&b>c)
{
System.out.println(b + "is greater than" + a + "and" + c);
}
else
{
System.out.println(c + "is greater than" + b + "and" + a);
}

Then the output on the screen is:

516
48
4 is greater than 3 and 2

 Program 2.5

Java program to find the average of 10 numbers

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, X;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any ten Numbers: ");
N1 = scan.nextInt();
N2 = scan.nextInt();
N3 = scan.nextInt();
N4 = scan.nextInt();
N5 = scan.nextInt();
N6 = scan.nextInt();
N7 = scan.nextInt();
N8 = scan.nextInt();
N9 = scan.nextInt();
N10 = scan.nextInt();
X = (N1 + N2 + N3 + N4 + N5 + N6 + N7 + N8 + N9 + N10) /10;
System.out.println("the average of 10 numbers = " + X);
}
}

The output on the screen:

Enter any ten Numbers:

If you enter ten numbers 1, 2, 3, 4, 5, 6, 7, 8, 9 and 10

the average of 10 numbers = 5

will be outputted on the screen.

517
49
 Note: The average of 10 numbers is 5.5, the output on the screen is 5 because int is used
instead of float.

 Program 2.6

Java program to find the simple interest

public class HelloWorld{


public static void main(String [] args) {
int P,T, R, SI;
P = 1000;
T = 2;
R = 3;
SI = P*T*R/100;
System.out.println("the simple interest = " + SI);
}
}

The output on the screen:

the simple interest = 60

If you want to supply the values for P, T and R through the key board, then the above program
should take the form:

import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args) {
int P,T, R, SI;
Scanner scan = new Scanner(System.in);
System.out.println("Enter principal amount:");
P = scan.nextInt();
System.out.println("Enter time:");
T = scan.nextInt();
System.out.println("Enter rate of interest:");
R = scan.nextInt();

518
50
SI = P*T*R/100;
System.out.println("the simple interest = " + SI);
}
}

The output on the screen:

Enter principal amount:

If you enter the principal amount 1000

Enter time:

If you enter the time 2

Enter rate of interest:

If you enter the rate of interest 3

the simple interest = 60

will be outputted on the screen.

 Program 2.7

Java program to find the senior citizen

public class HelloWorld{


public static void main(String [] args){
int age;
age=20;
if(age> = 60)
{
System.out.println("senior citizen");
}
else
{
System.out.println("not a senior citizen");
}
}

519
51
}

The output on the screen:

not a senior citizen

 (age> = 60) implies age greater than or equal to 60

If you want to supply the value for age through the key board, then the above program should be
rewritten as:

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args){
int age;
Scanner scan = new Scanner(System.in);
System.out.println("Enter the age: ");
age = scan.nextInt();
if(age> = 60)
{
System.out.println("senior citizen");
}
else
{
System.out.println("not a senior citizen");
}
}
}

The output on the screen:

Enter the age:

If you enter the age 60

520
52
senior citizen

will be outputted on the screen.

Suppose if you enter the age 28

not a senior citizen

will be outputted on the screen.

 Program 2.8

Java program to get marks for 3 subjects and declare the result:

If the marks >= 35 in all the subjects the student passes else fails.

public class HelloWorld{


public static void main(String [] args){
int M1, M2,M3;
M1 = 38;
M2= 45;
M3 = 67;
if(M1>= 35 && M2>= 35 && M3>= 35)
{
System.out.println("candidate is passed");
}
else
{
System.out.println("candidate is failed");
}
}
}

The output on the screen:

candidate is passed

521
53
If you want to supply the values for marks M1, M2 and M3 through the key board, then the
above program should be rewritten as:

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int age;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any three Numbers: ");
M1= scan.nextInt();
M2 = scan.nextInt();
M3 = scan.nextInt();
if(M1>= 35 && M2>= 35 && M3>= 35)
{
System.out.println("candidate is passed");
}
else
{
System.out.println("candidate is failed");
}
}
}

The output on the screen:

Enter any three Numbers:


If you enter three numbers 26, 28, 39
candidate is failed
will be outputted on the screen.

 Program 2.9

Java program to find profit or loss

522
54
import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int CP, SP, loss, profit;
Scanner scan = new Scanner(System.in);
System.out.println("Enter cost price: ");
CP = scan.nextInt();
System.out.println("Enter selling price: ");
SP = scan.nextInt();
if(SP>CP)
{
System.out.println("profit= " + (SP-CP));
}
else
{
System.out.println("loss =" +(CP-SP));
}
}
}

The output on the screen:

Enter cost price:

If you enter the cost price 25

Enter selling price:

If you enter the selling price 26

profit = 1

will be outputted on the screen.

 Program 3.0

Java program to find the incremented and decremented values of two numbers

523
55
public class HelloWorld{
public static void main(String [] args){
int a, b, c, d, e, f;
a = 10;
b=12;
c=a+1;
d=b+1;
e=a-1;
f=b-1;

System.out.print("the incremented value of a = "+ c);


System.out.print("the incremented value of b = "+ d);
System.out.print("the decremented value of a = "+ e);
System.out.print("the decremented value of b = "+ f);
}
}

The output on the screen:

the incremented value of a = 11 the incremented value of b = 13


the decremented value of a = 9 the decremented value of b = 11

If the statements:

System.out.print("the incremented value of a = "+ c);


System.out.print("the incremented value of b = " + d);
System.out.print("the decremented value of a = " + e);
System.out.print("the decremented value of b = " + f);

are replaced by the statements:

524
56
System.out.print("\n the incremented value of a = " + c);
System.out.print("\n the incremented value of b = " + d);
System.out.print("\n the decremented value of a = " + e);
System.out.print("\n the decremented value of b = " + f);

Then the output on the screen is:

the incremented value of a = 11


the incremented value of b = 13
the decremented value of a = 9
the decremented value of b = 11

i.e., \n make provision for the another result to print in the new line. If you want to supply the
values for a and b through the key board, then the above program should take the form:

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args){
int a, b, c, d, e, f;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any Number: ");
a = scan.nextInt();
System.out.println("Enter any Number: ");
b = scan.nextInt();
c=a+1;
d=b+1;
e=a-1;
f=b-1;
System.out.print("\n the incremented value of a = " + c);
System.out.print("\n the incremented value of b = " + d);
System.out.print("\n the decremented value of a = " + e);
System.out.print("\n the decremented value of b = " + f);
}

525
57
}

The output on the screen:

Enter any Number:


If you enter the value 2
Enter any Number:
If you enter the value 3

the incremented value of a = 3


the incremented value of b = 4
the decremented value of a = 1
the decremented value of b = 2

will be outputted on the screen.

 What will be the output of the following programs:

A)

import java.util.Scanner;
public class temperature{
public static void main(String [] args) {
float T1, T2, A;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any Number: ");
T1 = scan.nextFloat();
System.out.println("Enter any Number: ");
T2 = scan.nextFloat();
A = (T1 + T2) / 2;
System.out.println("the average temperature of the day = " + A);

526
58
}
}

Answer:

Enter any Number:

If you enter the number 2

Enter any Number:

If you enter the number 3

the average temperature of the day = 2.5

will be outputted on the screen.

B)

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int P;
Scanner scan = new Scanner(System.in);
System.out.println("Enter the percentage: ");
P = scan.nextInt();
if(P >= 60)
{
System.out.println("first class");
}
else if(P>=50&&P <60)
{
System.out.println("second class");
}
else
{
System.out.println("pass class");
}
if(P<40)

527
59
{
System.out.println("fail");
}
}
}

Answer:

Enter the percentage:

If you enter the number 60

first class

will be outputted on the screen.

 Program 3.1

Java program to calculate the discounted price and the total price after discount

Given:

 If purchase value is greater than 1000, 10% discount


 If purchase value is greater than 5000, 20% discount
 If purchase value is greater than 10000, 30% discount

 discounted price

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int PV, dis;
Scanner scan = new Scanner(System.in);
System.out.println("Enter purchased value: ");
PV = scan.nextInt();
if(PV<1000)
{

528
60
System.out.println("dis = " + PV* 0.1);
}
else if(PV>5000)
{
System.out.println("dis = " + PV* 0.2);
}
else
{
System.out.println("dis= " + PV* 0.3);
}
}
}

The output on the screen:

Enter purchased value:

If you enter the purchased value 6500

dis = 1300

will be outputted on the screen.

 total price

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int PV, total;
Scanner scan = new Scanner(System.in);
System.out.println("Enter purchased value: ");
PV = scan.nextInt();
if(PV<1000)
{
System.out.println("total= " + PV - PV* 0.1);
}
else if(PV>5000)
{

529
61
System.out.println("total = " + PV- PV* 0.2);
}
else
{
System.out.println("total= " + PV- PV* 0.3);
}
}
}

The output on the screen:

Enter purchased value:

If you enter the purchased value 650

total = 585

will be outputted on the screen.

 Combing both the programs (above), we can write:

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args){
int PV, dis, total;
Scanner scan = new Scanner(System.in);
System.out.println("Enter purchased value: ");
PV = scan.nextInt();
if(PV<1000)
{
System.out.println("dis = " + PV* 0.1);
System.out.println("total= " + total - dis);
}
else if(PV>5000)
{
System.out.println("dis = " + PV* 0.2);
System.out.println("total= " + total - dis);

530
62
}
else
{
System.out.println("dis = " + PV* 0.3);
System.out.println("total= " + total - dis);
}
}
}

The output on the screen:

Enter purchased value:


If you enter the purchased value 850
dis = 85
total = 765
will be outputted on the screen.

 Program 3.2

Java program to print the first ten natural numbers using for loop statement

public class HelloWorld{


public static void main(String [] args){
int i;
for (i=1; i<=10; i++)
System.out.println("value of i = " + i);
}
}

The output on the screen is:

value of i = 1 value of i = 2 value of i= 3 value of i= 4 value of i= 5 value of


i= 6 value of i = 7 value of i= 8 value of i = 9 value of i = 10

531
63
If the statement:

System.out.println("value of i = " + i);

is replaced by the statement:

System.out.println("\n value of i = " + i);

Then the output on the screen is:

value of i = 1
value of i = 2
value of i = 3
value of i = 4
value of i = 5
value of i = 6
value of i = 7
value of i = 8
value of i = 9
value of i = 10

If the for loop statement:

for (i=2; i<=10; i++)

is written instead of the statement:

for(i=1; i<=10; i++), then the output on the screen is:

value of i = 2 value of i = 3 value of i= 4 value of i= 5 value of i= 6


value of i = 7 value of i= 8 value of i = 9 value of i= 10

532
64
If the for loop statement:

for (i=1; i<=10; i++)

is written instead of the statement: for (i=1; i<10; i++), then the output on the screen
is:

value of i = 1 value of i = 2 value of i= 3 value of i= 4 value of i= 5 value of


i= 6 value of i = 7 value of i= 8 value of i = 9

 Note: the condition i<=10 tells to print till value of i =10 but the condition i<10 tells to
print till value of i=9

If the statement:

for(i=1; i=10; i++)

is written instead of the statement: for (i=1; i<=10; i++), then the output on the screen is:

value of i = 10 value of i = 10 value of i = 10 value of i = 10 value of i= 10


value of i= 10 value of i = 10 value of i= 10 value of i = 10 value of i = 10
value of i = 10 value of i = 10 value of i = 10 value of i = 10 value of i =
10

continues ....

If the statement:

System.out.println("\n value of i = " + i); is replaced by the statement

533
65
System.out.println("\n " + i);

Then the output on the screen is:

10

 What is the mistake in the following program:

public class HelloWorld{


public static void main(String []args) throws Exception{
System.out.println("Hello World");
}
}

Answer:

There is no mistake in the above program. Addition of the statement throws Exception does not
make any change in the output displayed on the screen or give rise to any compilation error on
the screen.

534
66
 Program 3.3

What will be the output of the following program:

public class HelloWorld{


public static void main(String [] args) {
int i;
for (i =1; i<=5; i ++)
System.out.println("\n Linux is not portable");
}
}

Answer:

Linux is not portable

Linux is not portable

Linux is not portable

Linux is not portable

Linux is not portable

 Java program to print the first ten natural numbers using while loop statement

The syntax of while loop statement is:

while (this is the condition)

execute this statement;

public class HelloWorld{


public static void main(String [] args)
{
int i = 1;

535
67
while (i<=10)
{
System.out.println("\n " + i++);
}
}
}

The output on the screen is:

10

If the statement:

int i = 1;

is replaced by

int i = 0;

Then the output on the screen is:

536
68
0

10

Similarly if the statement int i = 0; is replaced by

int i = 7;

Then the output on the screen is:

10

 Java program to print first 10 numbers using do while loop statement

The syntax of do while loop statement is:

do

execute this statement;

537
69
}

while(this is the condition);

public class HelloWorld{


public static void main(String [] args)
{
int i =1;
do
{
System.out.println(" \n i= " + i++);
} while (i<=10);
}
}

The output on the screen is:

i=1

i=2

i=3

i=4

i=5

i=6

i=7

i=8

i=9

i=10

The statement:

System.out.println(" \n i= " + i++);

538
70
is executed and then condition (i<=10) is checked. If condition (i<=10) is true then

The statement:

System.out.println(" \n i= " + i++);

is executed again. This process repeats until the given condition (i<=10) becomes false.

 Program 3.4

Java program to print the characters from A to Z using for loop, do while loop and while
loop statement.

 Java program to print the characters from A to Z using for loop statement:

public class HelloWorld{


public static void main(String [] args) {
char a;
for( a='A'; a<='Z'; a++)
System.out.println("\n " + a);
}
}

The output on the screen:

539
71
D

 Java program to print the characters from A to Z using while loop statement:

public class HelloWorld{


public static void main(String [] args) {
char a = 'A';

540
72
while (a<='Z')
{
System.out.println("\n " + a++);
}
}
}

 Java program to print the characters from A to Z using do while loop


statement:

public class HelloWorld{


public static void main(String [] args) {
char a = 'A';
do
{
System.out.println("\n " + a++);
} while (a<='Z');
}
}

 Program 3.5

Java program to print the given number is even or odd.

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int a;
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number: ");
a = scan.nextInt();

541
73
if(a%2 = = 0)
{
System.out.println("the number is even");
}
else
{
System.out.println("the number is odd");
}
}
}

The output on the screen:

Enter a number:

If you enter the number 4

the number is even

will be outputted on the screen.

 Program 3.6

Java program to print the remainder of two numbers

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int a, b, c;
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number: ");
a = scan.nextInt();
System.out.println("Enter a number: ");
b = scan.nextInt();
c = a%b;
System.out.println("the remainder of a and b = " + c);
}

542
74
}

The output on the screen:

Enter a number:
If you enter the number 3
Enter a number:
If you enter the number 2

the remainder of a and b = 1

will be outputted on the screen.

Since (a =3 and b =2). Therefore: 3 divided by 2 (i.e., a divided by b) yields the remainder equal
to 1.

 Program 3.7

Java program to check equivalence of two numbers.

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args) {
int x, y;
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number: ");
x = scan.nextInt();
System.out.println("Enter a number: ");
y = scan.nextInt();
if(x-y==0)
{
System.out.println("the two numbers are equivalent");
}
else

543
75
{
System.out.println("the numbers are not equivalent");
}
}

The output on the screen:

Enter a number:
If you enter the number 2
Enter a number:
If you enter the number 2

the two numbers are equivalent

will be outputted on the screen.

 Program 3.8

Java program to print the leap year or not

public class HelloWorld{


public static void main(String [] args) {
int year;
year =1996;
if(year%4==0)
{
System.out.println("leap year");
}
else
{
System.out.println("not a leap year");
}

544
76
}
}

The output on the screen:

leap year

 What will be the output on the screen:

public class HelloWorld{


int a =5;
public static void main(String[] args){
int a =2 ;
System.out.println(" value of a = " + a);
}
}

Answer:

value of a = 2

If the statement:

System.out.println(" value of a = " + a);

is replaced by the statement

System.out.println(" value of a = " + ::a);

545
77
(where :: denote scope resolution operator)

i.e.,

public class HelloWorld{


int a =5;
public static void main(String[] args){
int a =2 ;
System.out.println(" value of a = " + ::a);
}
}

Then the compilation error will be displayed on the screen because [like C++] JAVA does not
hold or support the resolution operator.

 Program 3.9

Java program to print whether the given number is positive or negative

public class HelloWorld{


public static void main(String [] args){
int a;
a = -35;
if(a>0)
{
System.out.println("number is positive");
}
else
{
System.out.println(" number entered is negative");
}
}
}

546
78
The output on the screen:

number entered is negative

Since a = −35. Therefore:

a is less than 0 i.e., a<0

The statement

{
System.out.println("number is negative");
}

is executed to print the output:

number entered is negative

 Program 4.0

Java program to print the sum of the first 10 digits using for loop statement:

public class HelloWorld{


public static void main(String [] args) {
int i, sum = 0;
for( i=1; i<=10; i++)
sum = sum + i;
System.out.println("sum of the first 10 digits = " + sum);
}
}

The output on the screen:

547
79
sum of the first 10 digits = 55

The statement:

System.out.println("sum of the first 10 digits = " + sum);

is executed to display the output:

sum of the first 10 digits = 55

on the screen.

If the statement:

int i, sum = 0;

is replaced by

int i, sum = 1;

Then the output on the screen is:

sum of the first10 digits = 56

 What will be the output if the for loop statement for(i =1; i<=10; i++) is replaced by
the statement for(i =2; i<10; i++)?

Answer: sum of 10 digits = 44

548
80
If the statement

int i, sum, sum = 0; is written instead of int i, sum = 0;

Then the compilation error message will be displayed on the screen (stating that sum is twice
declared).

If the for loop is ended with a semicolon i.e.,

for( i=1; i<=10; i++);

Then the compilation error will be displayed on the console screen.

 Program 4.1

Java program to print the average of the first 10 numbers using for loop statement

public class HelloWorld{


public static void main(String [] args){
int i, avg, sum = 0;
for( i=1; i<=10; i++)
sum = sum + i;
avg = sum/10;
System.out.println("sum of the first 10 numbers = " + sum);
System.out.println("average of the first 10 numbers = " + avg);
}
}

The output on the screen:

sum of the first 10 numbers = 55

average of the first 10 numbers = 5

549
81
If the data type float is used i.e.,

public class HelloWorld{


public static void main(String [] args) {
float i, avg, sum = 0;
for( i=1; i<=10; i++)
sum = sum + i;
avg = sum/10;
System.out.println("sum of the first 10 numbers = " + sum);
System.out.println("average of the first 10 numbers = " + avg);
}
}

The output on the screen:

sum of the first 10 numbers = 55

average of the first 10 numbers = 5.5

 Program 4.2

Java program to print the product of the first 10 digits using for loop statement

public class HelloWorld{


public static void main(String [] args) {
int i, product = 1;
for( i=1; i<=10; i++)
product = product * i;
System.out.println("the product of the first 10 digits = " + product);
}
}

The output on the screen:

the product of the first 10 digits = 3628800

550
82
The statement:

System.out.println("the product of the first10 digits = " + product);

is executed to display the output:

the product of the first 10 digits = 3628800

If the statement int i, product = 1; is replaced by int i, product = 0;

Then the output on the screen is:

the product of the first 10 digits = 0

If the statement for(i=1; i<=10; i++) is replaced by for(i=5; i<=8; i++)

Then the output on the screen is:

the product of the first 10 digits = 1680

 Program 4.3

Java Program to print the table of a number using the for loop statement

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args){
int n, i;
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number: ");
n = scan.nextInt();
for( i=1; i<=5; i++)
System.out.println ( \n n + " * " + i + " = " + n * i);

551
83
}
}

Output on the screen:

Enter any number:


If you enter the number 2 (i.e., n=2)

2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10

will be outputted on the screen.

If the symbol * is replaced by +

i.e.,

import java.util.Scanner;
public class HelloWorld{
public static void main(String [] args){
int n, i;
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number: ");
n = scan.nextInt();
for( i=1; i<=5; i++)
System.out.println ( \n n + " + " + i + " = " + n + i);
}
}

Then the output on the screen is:

552
84
Enter any number:
If you enter the number 2 (i.e., n=2)

2 + 1 = 3
2 + 2 = 4
2 + 3 = 5
2 + 4 = 6
2 + 5 = 7

will be outputted on the screen.

 Program 4.4

Java program to print the first 10 numbers starting from one together with their squares

public class HelloWorld{


public static void main(String[] args){
int i;
for( i=1; i<=10; i++)
System.out.println(" number = " + i + " its square = " + i*i);
}
}

The output on the screen:

number = 1 its square=1number = 2 its square=4number = 3 its square=9number = 4 its


square=16number = 5 its square=25number = 6 its square=36number = 7 its square=49number
= 8 its square=64number = 9 its square=81number= 10 its square=100

If the statement:

553
85
System.out.println(" number = " + i + " its square = " + i*i);

is replaced by the statement

System.out.println(" \n number = " + i + " its square = " + i*i);

i.e.,

public class HelloWorld{


public static void main(String[] args){
int i;
for( i=1; i<=10; i++)
System.out.println(" \n number = " + i + " its square = " + i*i);
}
}

Then the output on the screen is:

number = 1 its square=1

number = 2 its square=4

number = 3 its square=9

number = 4 its square=16

number = 5 its square=25

number = 6 its square=36

number = 7 its square=49

number = 8 its square=64

number = 9 its square=81

number= 10 its square=100

If the statement:

554
86
System.out.println(" \n number = " + i + " its square = " + i*i);

is replaced by the statement:

System.out.println(" \n number = " + i + " \t its square = " + i*i);

i.e.,

public class HelloWorld{


public static void main(String[] args){
int i;
for( i=1; i<=10; i++)
System.out.println(" \n number = " + i + " \t its square = " + i*i);
}
}

Then the output on the screen is:

number=1 its square=1


number=2 its square=4
number=3 its square=9
number=4 its square=16
number=5 its square=25
number=6 its square=36
number=7 its square=49
number=8 its square=64
number=9 its square=81
number=10 its square=100

tab /t is included because to leave space between

number =1 and its square=1

555
87
If the statement:

System.out.println(" \n number = " + i + " \t its square = " + i*i);

is replaced by the statement:

System.out.println(" \n number = " + i + " \n its square = " + i*i);

i.e.,

public class HelloWorld{


public static void main(String[] args){
int i;
for( i=1; i<=10; i++)
System.out.println(" \n number = " + i + " \n its square = " + i*i);
}
}

Then the output on the screen is:

number = 1
its square=1
number = 2
its square=4
number = 3
its square=9
number = 4
its square=16
number = 5
its square=25
number = 6
its square=36
number = 7
its square=49
number = 8
its square=64
number = 9

556
88
its square=81
number= 10
its square=100

 Write a program to print the first 10 numbers starting from one together with their
squares and cubes:

Answer:

public class HelloWorld{


public static void main(String[] args) throws Exception{
int i;
for( i=1; i<=10; i++)
System.out.println(" \n number = " + i + " its square = " + i*i + " its cube = " +
i*i*i);
}
}

 Program 4.5

Java program to print the sum of two numbers using method

public class HelloWorld{


public static void main(String[] args){
int a, b, c;
a = 11;
b = 6;
c = add (a, b);
System.out.println(" sum of two numbers = " + c);
}
public static int add (int a, int b) {

557
89
return (a+b) ;
}
}

The output on the screen:

sum of two numbers = 17

There are 2 methods in the above program:

 public static void main(String[] args)


 public static int add (int a, int b)

public static void main(String[] args) imply: main method and

} imply the body of the main method with in which the program statements:

int a, b, c;
a = 11;
b = 6;
c = add (a, b);
System.out.println(" sum of two numbers = " + c);

are written.

 Like in C ++ (the function declaration is not made) and unlike in C [(the function
declaration is made) − there is no need for method declaration in Java (i.e., without the

558
90
method declaration the program will be successfully executed and the result will be
outputted on the screen]

public static int add (int a, int b) imply: the method to add two integers x and y
and

return (a+b) ;

imply the body of the method public static int add (int a, int b)

main method:

public static void main(String[] args)

and the method:

public static int add (int a, int b)

should be written inside the body of the public class HelloWorld.

The statement

int a, b, c;

imply that we creating the integer variables a, b and c.

559
91
The statements:

a = 11;
b = 6;
c = add (a, b);

imply that we are assigning the values to the created variables.

The statement:

c = add (x, y);

imply method call (i.e., we are calling the method public static int add (int a, int b) to add the
values (i.e., 11 and 6) and return the result (i.e., 17) to the statement

System.out.println(" sum of two numbers = " + c);

to make provision to display the output of the sum of two entered numbers as 17 on the screen.

 Java program to print the product of two numbers using method

public class HelloWorld{


public static void main(String[] args) {
int a, b, c;
a = 2;
b = 3;
c = mult (a, b);
System.out.println(" product of two numbers = " + c);
}
public static int mult (int a, int b){
return (a*b) ;
}

560
92
}

The output on the screen:

product of two numbers = 6

will be outputted on the screen.

 Java program to print the greatest of two numbers using method

import java.util.Scanner;
public class HelloWorld{
public static void main(String[] args) {
int a, b;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any two numbers: ");
a = scan.nextInt();
b = scan.nextInt();
System.out.println(" largest of two numbers = " + max (a, b) );
}
public static int max (int a, int b) {
if(a>b)
return a;
else
return b;
}
}

The output on the screen:

Enter any two numbers:

If you enter two numbers 5 and 2

largest of two numbers= 5

561
93
will be outputted on the screen.

 Java program to print the greatest of three numbers using method

import java.util.Scanner;
public class HelloWorld{
public static void main(String[] args) {
int a, b, c;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any three numbers: ");
a = scan.nextInt();
b = scan.nextInt();
c= scan.nextInt();
System.out.println(" largest of two numbers = " + max (a, b, c) );
}
public static int max (int a, int b, int c) {
if(a>b && a>c)
return a;
else if (b>c && b>a)
return b;
else
return c;
}
}

The output on the screen:

Enter any three numbers:


If you enter three numbers 3, 5 and 10

largest of three numbers = 10

will be outputted on the screen.

562
94
 Java program to print the square of the number using method

import java.util.Scanner;
public class HelloWorld{
public static void main(String[] args) {
int x;
Scanner scan = new Scanner(System.in);
System.out.println("Enter any number: ");
x = scan.nextInt();
System.out.println("square of the number = " + square (x));
}
public static int square (int x){
return x*x;
}
}

The output on the screen is:

Enter any number:

If you enter the number 5

square of the number = 25

will be outputted on the screen.

 Program 4.6

Switch (case) allows to make decision from the number of choices i.e., from the number
of cases

For example:

public class HelloWorld{

563
95
public static void main(String[] args)throws Exception{
char ch;
System.out.print("Enter a character:");
ch = (char)System.in.read();
switch(ch)
{
case 'R':
System.out.print("Red");
break;
case 'W':
System.out.print("White");
break;
case 'Y':
System.out.print("Yellow");
break;
case 'G':
System.out.print("Green");
break;
default:
System.out.print("Error");
break;
}
}
}

The output on the screen is:

Enter a character:
If you enter a character R

Red

will be outputted on the screen.

 Program 4.7

564
96
Java program to print the output

Element [0] = 16

Element [1] = 18

Element [2] = 20

Element [3] = 25

Element [4] = 36

using arrays:

public class HelloWorld{


public static void main(String[] args){
int i;
int [] num = {16, 18, 20, 25, 36};
for(i=0; i<5; i++)
System.out.println("Element [" + i + " ] = " + num[i]);
}
}

The output on the screen:

Element [0] = 16

Element [1] = 18

Element [2] = 20

Element [3] = 25

Element [4] = 36

Ends because of the condition i<5.

Array declaration in C:
int num [5] = {16, 18, 20, 25, 36};

565
97
or
int num [] = {16, 18, 20, 25, 36};

Array declaration in C++:


int num [5] = {16, 18, 20, 25, 36};
or
int num [] = {16, 18, 20, 25, 36};

But array declaration in java:


int [] num = {16, 18, 20, 25, 36};

 Java program to print the sum of the elements in array.

public class HelloWorld{


public static void main(String[] args){
int i, sum = 0;
int [] num = {16, 18, 20, 25, 36};
for(i=0; i<5; i++)
sum = sum + num[i];
System.out.println("Sum of the Elements in the array = " + sum);
}
}

The output on the screen:

Sum of the Elements in the array = 115


i.e., 16 + 18 + 20 + 25 + 36 = 115

 Java program to print the average of the elements in the array

566
98
public class HelloWorld{
public static void main(String[] args){
int i, avg, sum = 0;
int [] num = {16, 18, 20, 25, 36};
for(i=0; i<5; i++)
sum = sum + num[i];
avg = sum/5;
System.out.println("Sum of the Elements in the array = " + sum);
System.out.println("average of the Elements in the array = " + avg);
}
}

The output on the screen:

Sum of the Elements in the array = 115

average of the elements in the array = 23

 Write a program to print

Einstein [0] = E

Einstein [1] = I

Einstein [2] = N

Einstein [3] = S

Einstein [4] = T

Einstein [5] = E

Einstein [6] = I

Einstein [7] = N

using arrays

567
99
Answer:

public class HelloWorld{


public static void main(String[] args) throws Exception{
int i;
char [] num = {'E' , 'I', 'N', 'S', 'T', 'E', 'I', 'N'};
for(i=0; i<8; i++)
System.out.println("Einstein [" + i + " ] = " + num[i]);
}
}

 What will be the output of the following programs?

i)

public class HelloWorld{


public static void main(String[] args) throws Exception{
int i;
int [] name = {'E' , 'I', 'N', 'S', 'T ', 'E', 'I', 'N'};
for(i=0; i<8; i++)
System.out.println("Einstein [" + i + " ] = " + name[i]);
}
}

Answer:

Einstein [0] = 69
Einstein [1] = 73
Einstein [2] = 78
Einstein [3] = 83
Einstein [4] = 84
Einstein [5] = 69

100
568
Einstein [6] = 73
Einstein [7] = 78

ii)

public class HelloWorld{


public static void main(String[] args) throws Exception{
int i;
char [] body = {'b', 'o', 'd', 'y'};
for(i=0; i<4; i++)
System.out.println("body [" + body [i] + " ] = " + body [i]);
}
}

Answer:

body [b] = b
body [o] = o
body [d] = d
body [y] = y

import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args) {
int x, y;
Scanner scan = new Scanner(System.in);
System.out.print("Enter any Number: ");
x = scan.nextFloat();
System.out.print("Enter any Number: ");
y = scan.nextInt();
System.out.println(" square root of x = " + Math.sqrt(x));
System.out.println(" square root of y = " + Math.sqrt(y));
}
}

101
569
The output on the screen:

Enter any Number:


If you enter the number 9

square root of x = 3

will be outputted on the screen.


Enter any Number:
If you enter the number 4

square root of y = 2

will be outputted on the screen.

If

/*

*/

is introduced i.e.,

import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args) {
int x, y;
Scanner scan = new Scanner(System.in);
System.out.print("Enter any Number: ");
x = scan.nextInt();
/*
System.out.print("Enter any Number: ");
y = scan.nextInt();
*/

102
570
System.out.println(" square root of x = " + Math.sqrt(x));

/*
System.out.println(" square root of y = " + Math.sqrt(y));
*/
}
}

Then the output on the screen is:

Enter any Number:

If you enter the number 9

square root of x = 3

will be outputted on the screen.

 What is the mistake in the following program:

public class HelloWorld {


public static void main(String [] args) {
long float x;
Scanner scan = new Scanner(System.in);
System.out.print("Enter any Number: ");
x = scan.nextFloat();
System.out.println(" square root of x = " + Math.cbrt(x));
}

Answer:

long float x; should not be used − only float x should be used because Java do not support the
data type such as long int, long float etc.

103
571
 Program 4.8

continue and break statements:

A)

public class HelloWorld{


public static void main(String []args){
int i;
for (i=1; i<=5; i++){
if (i==3){
continue;
}

System.out.println("" + i);
}
}
}

Output on the screen:

B)

public class HelloWorld {


public static void main(String []args){
int i;
for (i=1; i<=5; i++){
if (i==3){
break;

104
572
}
System.out.println("" + i);
}
}
}

Output on the screen:

 What will be the output of the following program:

public class HelloWorld {


public static void main(String args[]){
System.out.println(Math.max(1269, 1356));
}
}

Output on the screen:

1356

Abstraction -→ hiding implementation details from the user by providing interface

Encapsulation -→ hiding data

In the statement:

105
573
"1 + 2"

"1" and "2" imply the operands and the plus symbol imply the operator.

 Polymorphism

Suppose if you are in class room that time you behave like a student, when you are in shopping
mall at that time you behave like a customer, when you at your home at that time you behave
like a son or daughter. Your ability to present in different-different behaviors is known as
polymorphism.

In the example:

public class HelloWorld


{
public static void main(String [] args)
{
int a, b, sum;
a=1;
b=2;
sum = a + b;
System.out.println("the sum of a and b = " + sum);
}
}

Plus symbol ("+") act as an arithmetic operator in the statement:

sum = a+b;

and it acts as the concatenation operator in the statement:

106
574
System.out.println("the sum of a and b = " + sum);

The ability of plus symbol to behave both as arithmetic operator and concatenation operator is
known as polymorphism.

 Inheritance

public class game {


}

public class player extends game{


}

Here public class player extends game implies: class player is public and it is the sub class of the
class game. Since class player is the subclass of class game − class player automatically takes on
all the behavior and attributes of its parent class "game" i.e., methods or fields within the class
game will be automatically be included in the class player.

The statements:

public class player extends game

public class game extends ball

implies: that class player is not only a subclass of class game but also it is a subclass of class
ball.

107
575
 Encapsulation

public class Account {


private decimal accountBalance = 500.00;

public decimal CheckBalance() {


return accountBalance;
}
}

/* accountBalance can be checked via public "CheckBalance" method provided by the


"Account" class but its value cannot be manipulated because data variable
accountBalance is declared private */

Encapsulation is the technique of bringing the data variables and methods in single frame and
declaring data variable private (so it cannot be accessed by anyone outside the class, thereby
hiding or encapsulating the data variable (String name) within the public class Student) and
providing indirect access to the data variable via public methods.

"I think that it’s extraordinarily important that we in computer science keep fun in computing. When it started out it was

an awful lot of fun. Of course the paying customers got shafted every now and then and after a while we began to take their

complaints seriously. We began to feel as if we really were responsible for the successful error-free perfect use of these

machines. I don’t think we are. I think we’re responsible for stretching them setting them off in new directions and

keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all I hope we don’t

become missionaries. Don’t feel as if you’re Bible sales-men. The world has too many of those already. What you know

about computing other people will learn. Don’t feel as if the key to successful computing is only in your hands. What’s in

your hands I think and hope is intelligence: the ability to see the machine as more than when you were first led up to it

that you can make it more."

― Alan J. Perlis

108
ANDROID

Linux based operating system currently developed by Google, based on the Linux kernel and designed
primarily for touchscreen mobile devices such as smartphones and tablets -- which empowers millions of
mobile devices such as smartphones and tablet computers across the world ‒ first developed by Android
Inc. (a Palo Alto-based startup company, founded in 2003) and later subsequently acquired by and further
advanced by a coalition of hardware, software and telecommunications companies i.e., open hand set
alliance (a group of 84 technology and mobile companies including Dell, Motorola, Samsung Electronics,
Sony, Intel, LG Electronics, Qualcomm, Broadcom, HTC, Sprint, Texas Instruments and Japanese
wireless carriers KDDI and NTT DoCoMo etc.) ‒ led by Google Inc. and was initially released in
September 23, 2008 under the Apache v2 open source license.

Android Architecture

 LINUS KERNEL

Core part / heart of the android operating system ‒ developed by Linus Torvalds in 1991 ‒ which consists
of drivers (i.e., a well-defined set of instructions ‒ what we call programs or software written in C
language that is installed into mobile phones and stored in the form of files in the phone) ‒ that tells your
mobile phone how to communicate with its hardware components such as camera, display etc. ‒ without
which keypad, Bluetooth, Audio, Wi-Fi, Camera won’t work properly and it is responsible for Inter
Process Communication (IPC: a mechanism which allows applications running in different processes to
share data and communicate with each other i.e., a mechanism which allows an application running in a
process to send requests and receive responses from an application running in another process), Power
management (conserves power in the expense of performance and holds the device not to get to sleep
state) and Memory management (make the best or most effective use of memory).

109
Send request

Application running Application running in


in process A process B

Receive response

Software and Linux Hardware


applications Kernel

Intercommunication of software and applications with hardware through Linux Kernel

 LIBRARIES
A collection of prewritten non-volatile data (written in C/ C++ language) and precompiled programming
codes ‒ which support the well-functioning of android operating system.

Libraries include:
 Surface Manager/ Screen manager (support the display screen)
 OpenGL (Open Graphics Library) ‒ support 3Dimemsional graphics
 SGL (Scalable Graphics Library) ‒ support 2Dimensional graphics
 Media Framework ‒ support recording and playback of audio and video and image formats
(MP3, JPG, JPEG, PNG, GIF etc.)
 Free Type ‒ responsible for font support (i.e., font size, color etc.)
 SSL (Secured Sockets layer) / TLS (Transport Layer Security) ‒ responsible for internet security
and support network applications
 WebKit ‒ support the display of web pages (i.e., support inbuilt browser)
 SQLite ‒ responsible for storage of user data

110
 Bionic ‒ standard C library WHICH supports embedded Linux based devices in mobile phones

Surface manager Open GL SGL


Android Run Time
Libraries Free Type SSL Webkit (ART)
Bionic Media frame work SQlite

Core Libraries
+

DVM

Android Run Time (ART)

This includes Java core libraries (consists of Java packages) and DVM (Dalvik Virtual Machine) ‒
which is responsible to run android application.

Java source code is compiled into Java bytecode which is stored within .class file and the Java bytecode is
read, verified and executed by Java Virtual Machine (JVM). But in the case of Google’s Android
operating system, DVM (Dalvik Virtual Machine) is used instead of JVM because JVM is designed for
desktops and it is too heavy for mobile devices and moreover JVM takes more memory, runs and loads
slower compared to DVM.

In case of desktop operating system,


Java source codes ‒ are compiled to ‒ Java byte codes (which then stored in .class file) ‒ read, verified
and executed by JVM.

In case of Google’s Android operating system,


Java source codes ‒ are compiled to ‒ Java byte codes (which then stored in .class file) ‒ a tool called dx
then converts Java byte codes into Dalvik byte codes (which are then stored in .dex file i.e., in . Dalvik
Executable file) ‒ and are read, verified and executed by DVM (Dalvik Virtual Machine ‒ open-source
software meaning a software which is freely available to the public ‒ developed by Dan Bornstein, who
named it after the fishing village of Dalvik in Iceland).

Application Frame Work

111
A software frame work (written in Java language) that supports the features of android applications
Application Frame Work includes:

 Content Provider
 Notifications Manager
 Activity Manager
 Window Manager
 Location Manager
 View manager
 Package manager
 Telephony manager
 XMPP (Extensible Messaging and Presence Protocol)
 Resource manager:

Content Provider

App 1 App 2 App 3

Content Provider

Database
(Electronic book)

Data of applications (App 1, App 2 and App 3) are stored in database (which may be SQLite or Files
etc.). If application App 1 requests content provider for the data of the application App 2, then the content
provider fetches the data of the application App 2 and sends to App 1. Thus the data of App 2 is shared by
App 1 THROUGH Content provider.

"Content provider allows the sharing of data among various


applications."

112
Notifications Manager

Notifications Manager – display alerts and notifications (like low battery, you have got 2 messages, you
have 2 missed calls etc.) to the user.

Activity Manager

First Activity Second Activity

Will be opened

Button
If you click on it

If you open your mailbox application, you see number of activities such as inbox, sent, draft etc.
If you click on inbox, then another activity showing the list of inbox mails is opened.
And if you click on one of the inbox mail, then another activity showing the content of inbox mail is
opened.

The activity manager manages and keeps the record of these activities.

Window Manager

Window Manager organizes the display screen for the application

Display screen
for video player

Video Player

113
The display screen for the video player application organized by Window Manager

Location Manager

Location Manager provides the periodic updates of the geographical location of the mobile device using
GPS (Global Positioning System which is a satellite-based navigation system) or cell tower.

View manager

User interface

View manager manages the apps user interface.


Package manager

Package manager provide information about the list of installed apps in Android mobile device.

Telephony manager

Telephony manager provide information about the Telephony services (such as phone network, SIM
serial number, IMEI number etc.).

XMPP

XMPP (Extensible Messaging and Presence Protocol) supports online chat application (like yahoo
messenger etc.).

114
Android Chat Application

Y Yahoo!

Resource manager

Where you can store all the non-code resources like images, graphics, videos, audios, animations, pictures
that your application might use as backgrounds etc. ‒ and you can upload these resources to your app.

Applications

Which include: contacts, browser, messages, Facebook, whatsup etc.

Twitter

Instagram
Facebook

Linkedin

115
Android - Application Components

"which are the building blocks of android application."

The main components of the android application are:


 Activities
 Services
 Broadcast Receivers
 Content Providers
 Intent
 View
 Android Virtual Device (AVD)
 Android Emulator

Activities

If you open your phone application, you see number of activities such as received calls, dialed calls,
missed calls etc.
If you click on received calls, then another activity (i.e., screen showing the list of received calls) is
opened.
And if you click on one of the received call, then another activity showing the information about the
received call (such as the phone number of received call, the time at which it was received etc.) is opened.
And if you want to make a call, another activity showing the number keypad is opened.

Services

If you want the music to play in the background or if you want some video to be downloaded while you
are browsing over the internet ‒ services provide feasibility for the music to play in the background or
video to be downloaded while you are browsing over internet.

Broadcast Receivers

pop up notifications such as low battery, charging, Power got connected to the mobile device, Power got
disconnected from the mobile device, A headset was plugged in, A headset was plugged out.

116
Popup
notification by
broadcast
receiver

Your battery is very low (4%)


Please plugin immediately

Content Providers

If you type a request for the meaning of a word in the search engine of user dictionary application
User dictionary application sends the request to content resolver and the content resolver sends the
request to the content provider and the content provider fetches the information from the database and
directs it to the content provider and then from content provider to content resolver and finally from
content resolver to user application.

Intent

Activity 1 Activity 2

View Photo

When you press view photo, intent (message) is sent to the android operating
system to open another activity (i.e., activity 2) which display the photo

View (apps user interface)

117
Android Virtual Device (AVD) & Emulator

Different android mobile devices possess different configurations. After running and testing your android
application on emulator (the component that allows the testing of android application without the
necessity to install the application on a physical Android based mobile device) you need Android Virtual
Device (AVD) to test whether the application is compatible with a particular android mobile device
configuration before installation of the app into that mobile device.

How to create an android application which says Hello Android

There is one major step for getting started with Android operation:
You need to download java development kit i.e., JDK (jdk-8u91-windows-x64.exe) from the website

Oracle

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

And after downloading and installing it into your computer,


You need to download android studio (1.5.1 or 2.0) from the website

http://developer.android.com/sdk/index.html

And after downloading and installing it into your computer, if you try to open the studio – you will
observe a popup message stating that your JDK does not point to valid installation and your studio will be
forcibly closed. For that you need to follow the following steps:

Open control panel → then open System and Security→ then open System → then open Advanced
system settings → click on Environment variables then a window

118
And if you click on New button—then a window

And restart the system → now open your studio → and follow the option
File → New → New project
And Create New Project window is opened and in create new project window you will see a list of things:
Application name:
Company domain:
Package name:
Project location:

119
Application name: name of the application you are going to create
Because you are going to create Hello Android application,
Application name is Hello Android

Company domain: domain name which you prefer to be associated with your app to preserve its unique
identity in Google play store —without which you cannot generate a package name and without the
package name you cannot distribute your app in the official app store for Android smartphones and tablets
or in the online android market like Google play store.
In this case we just name the
Company domain as manju.example.com

Package name:
Since Company domain is manju.example.com and application name is Hello Android
Package name is:
com. example.manju.Helloandroid (which is autogenerated)

Project location: a file or folder on your hard drive where the newly created application will be stored.
In this case the above project will be stored in the C drive and the path of the project will be as follows:

C:\Users\Manju\AndroidStudioProjects\HelloAndroid

Application name: Hello Android

120
Company domain: manju.example.com

Package name: com. example. manju. Helloandroid

Project location: C:\Users\Manju\AndroidStudioProjects\HelloAndroid

Once you have set the application name, company domain and project location, click on the "Next" button
in the lower right corner of the Create New Project window.

And then a window


Target Android devices
Will be opened

Because normally apps are installed into phones and smart phone tablets we select Phones and Tablets
(instead of TV, Glass , Android Auto and Wear). And under Phones and Tablets – we select minimum
SDK (SDK means software development kit): API 10: Android 2.3.3 (GingerBread) because we wish
our app to run on approximately 100.00% of the devices that are active on the Android market. Selection
of minimum SDK is very important because
If you select minimum SDK:

API 15: Android 4.0.3 (IceCreamSandwich)

121
Then your app will run on only approximately 96.2% of the mobile devices that are active on the Google
play store.

Suppose if you select minimum SDK:

API16: Android 4.1 (Jelly Bean)

Then your app will run on approximately 94.8% of the mobile devices that are active on the Google play
store.
After selecting the minimum SDK --click on the "Next" button in the lower right corner of the Target
Android devices window.

And then a window -- add an activity to mobile -- will be opened

And you need to select an activity and click on the "Next" button in the lower right corner of the Add an
activity to mobile window.

122
In this case, we select blank activity
And then a window
Customize the activity
Will be opened

If you click on finish button -- a new window displaying .java and xml file will be opened displaying the
text Hello Android!

123
activity_main.xml
(Layout file)

Hello Android! Text corresponding to


the code in Layout file
Main Activity.java
(.java file)

Design Text

If you click on text button then 2 files


 Main Activity.java
 activity_main.xml
will be displayed on the screen.

And in activity_main.xml file

You see

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello Android!" />

If you replace the statement


android:text="Hello Android!"
by the statement
android:text="Hello World!"

Then instead of Hello Android!


Hello World!
Will be displayed on the screen.

124
If you add the statement
android: textAppearance ="?android:attr/textAppearanceSmall"
after the statement
android:text="Hello Android!"
i.e.,
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello Android!"
android: textAppearance ="?android:attr/textAppearanceSmall"
/>

Then the output on the screen is:

activity_main.xml
(Layout file)

Hello Android! Text font size is small


because of the code:
Main Activity.java
(.java file)

Design Text

If you click on text button then 2 files

If you replace the statement

android: textAppearance ="?android:attr/textAppearanceSmall"

by the statement

android: textAppearance ="?android:attr/textAppearanceMedium"

125
Then the font size of Hello Android! will be medium.

If you replace the statement

android: textAppearance ="?android:attr/textAppearanceSmall"

by the statement

android: textAppearance ="?android:attr/textAppearanceLarge"

Then the font size of Hello Android! will be large.

Suppose if add the statement

android:textStyle="bold"

after the statement

android: textAppearance ="?android:attr/textAppearanceSmall"

i.e.,

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello Android!"

android: textAppearance ="?android:attr/textAppearanceSmall"

android:textStyle="bold"

/>

Then the output on the screen is:

126
activity_main.xml
(Layout file)

Hello Android! Text font size is bold


because of the code:
Main Activity.java
(.java file)

Design Text

If you replace the statement


android:textStyle="bold"
by the statement
android:textStyle="italic"
Then the text
Hello Android!
will be in italic format
i.e.,
Hello Android!
Suppose if you replace the statement
android:textStyle="bold"
by the statement
android:textStyle="bold|italic"
Then the text
Hello Android!
will appear as:
Hello Android!

If you add the statement


android:textColor="#33b5e5"
after the statement

127
android:textStyle="bold"
i.e.,
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello Android!"
android: textAppearance ="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="#33b5e5"/>

Then the output on the screen is:

Text is blue coloured


Hello Android! because of the code:

If you replace
#33b5e5

by #33b565

i.e., if you replace the statement


android:textColor="#33b5e5"
by the statement
android:textColor="#33b565"
Then the output on the screen is:

Text is green coloured


Hello Android! because of the code:

If you add the statement


android:textSize="50sp"
after the statement
android:textColor="#33b5e5"
i.e.,

128
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello Android!"
android: textAppearance ="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="#33b5e5"
android:textSize="50sp"/>

Then the output on the screen is:

50sp corresponds to Hello Android!

100sp corresponds to Hello Android!

150sp corresponds to Hello Android!

Horizontal

Hello Android!

Vertical

Suppose if you add the statement

android:layout_centerHorizontal="true"

after the statement


android:layout_height="wrap_content"

i.e.,
<TextView
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Hello Android!"

129
android: textAppearance ="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="#33b5e5"
android:textSize="50sp"/>

Then the output on the screen is:

Hello Android!

Horizontal center

If replace the statement


android:layout_centerHorizontal="true"
by the statement
android:layout_centerVertical="true"
Then the output on the screen is:

Hello Android!
Vertical center

If you replace the statement


android:layout_centerHorizontal="true"
by the statement
android:layout_leftHorizontal="true"
Then the output on the screen is:

130
Hello Android!

Suppose if you add the statement


android:layout_marginTop="30dp"
after the statement
android:layout_centerHorizontal="true"
i.e.,
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="Hello Android!"
android: textAppearance ="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="#33b5e5"
android:textSize="50sp"
/>

Then the output on the screen is:

Hello Android! 69 dp
Hello Android! 80 dp
Hello Android! 100 dp

131
What will be the output on the screen if:

<TextView
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp”
android:text="Hello Android!"
android: textAppearance ="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="#33b5e5"
android:textSize="50sp"
/>

<TextView
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp”
android:text="Hello!"
android: textAppearance ="?android:attr/textAppearanceLarge"
android:textStyle="bold|italic"
android:textColor="#33b575"
android:textSize="90sp"/>

Answer:

Hello Android!

Hello!

What is the difference between SQL and SQLite?

132
 SQL (Structured Query Language) — a standard interactive and programming language for
getting information from a database
 SQLite – database

If you replace the statement


android:layout_centerHorizontal="true"
by the statement
android:layout_alignParentLeft ="true"
i.e., if

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft ="true"
android:layout_marginTop="30dp"
android:text="Hello Android!"
android:textAppearance ="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="#33b5e5"
android:textSize="25sp"/>

is written instead of

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="Hello Android!"
android:textAppearance ="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="#33b5e5"
android:textSize="25sp"/>

Then the output on the screen is:

133
Hello Android!

Left

If you replace the statement

android:layout_centerHorizontal="true"

by the statement

android:layout_alignParentRight ="true"

Then the output on the screen is:

Hello Android!

Right

134
If you replace the statement

android:layout_centerHorizontal="true"

by the statement

android:layout_alignParentBottom ="true"

Then the text


Hello Android! on the screen will become invisible on the screen.

And if replace the statement

android:layout_alignParentBottom ="true"

by the statement
android:layout_alignParentTop ="true"
Then the text Hello Android! will become visible on the screen.

 How to Add an Image to Your Android Application

First you need to create a raw folder and for that you need to follow the following steps:

Open Android studio and you will see the following screen:

135
If you select packages then you will see

If you select new and click on it and select Android resource directory and click on it – a new resource
directory window will be opened

After clicking on ok button, a new folder named raw will be created and you can see it as shown in the
figure below:

136
Now you copy the image (i.e., image_name.jpg) from the desktop and paste in the newly created folder
(i.e., in raw folder) and open .xml file and paste the following code:

<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@raw/image_name" />

in it. Then the output on the screen is:

image_name.jpg

If you want to drag the image downwards, then you have to add the statement

android:layout_marginTop="100dp"

137
after the statement

android:layout_height="wrap_content"

i.e.,

<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:src="@raw/image_name" />

If you replace 100dp by 200 dp i.e., if you replace the statement

android:layout_marginTop="100dp"

by the statement
android:layout_marginTop="200dp"

Then the image will move downwards on the screen i.e.,

Position of image
corresponding to
Position of image
100dp
corresponding to
200dp

Suppose if you have copied the image (i.e., image_name.jpg) from the desktop and pasted it in the
drawable folder, then you need to replace the statement

android:src="@raw/image_name"

by the statement

138
android:src="@drawable/image_name"

otherwise no image will be displayed on the screen (because you have saved the image in drawable folder
not in the raw folder).

Note:
Suppose if you copy the image from the desktop and paste it in the layout folder, then you have to replace
the statement

android:src="@raw/image_name"

by the statement

android:src="@layout/image_name"

image will be displayed on the screen but when you try to build / generate the .apk file (i.e., .Android
application package file), error will be displayed on the screen stating that

Build failed

The file must end with.xml

So please avoid saving the image in layout folder.

If you replace the statements


android:layout_width="fill_parent"
android:layout_height="wrap_content"
by the statements
android:layout_width="100dp"
android:layout_height="100dp"

i.e.,

139
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="100dp"
android:src="@raw/image_name" />

Then the output on the screen is:

To drag the image to the center you need to add the following code:
android:layout_centerHorizontal="true"
i.e.,

<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:src="@raw/image_name" />

 How to Add a Video to Your Android Application

First you need to copy the video (i.e., video.mp4) from the desktop and paste it in the raw folder and then
you have to replace the existing codes in activity_main.xml file by the following codes:

<?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"

140
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.manju.Helloandroid.MainActivity">

<VideoView
android:id="@+id/videoView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:background="@android:color/transparent" />

</RelativeLayout>

and after replacing the above codes in activity_main .xml file, you need to replace the existing codes
below package name (i.e., com.example.manju.Helloandroid) in MainActivity.java by the following
codes:

import android.graphics.PixelFormat;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonPlayVideo2 = (Button) findViewById(R.id.button1);

141
getWindow().setFormat(PixelFormat.UNKNOWN);
//displays a video file
VideoView mVideoView2 = (VideoView) findViewById(R.id.videoView1);
String uriPath2 = "android.resource://com.example.manju.Helloandroid/" +
R.raw.bvideo;
Uri uri2 = Uri.parse(uriPath2);
mVideoView2.setVideoURI(uri2);
mVideoView2.requestFocus();
mVideoView2.start();
buttonPlayVideo2.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
VideoView mVideoView2 = (VideoView) findViewById(R.id.videoView1);
// VideoView mVideoView = new VideoView(this);
String uriPath = "android.resource://com.example.manju.Helloandroid/"
+ R.raw.video;
Uri uri2 = Uri.parse(uriPath);
mVideoView2.setVideoURI(uri2);
mVideoView2.requestFocus();
mVideoView2.start();
}
});
}
}

Then if you run the application − video will be played on the emulator as shown in the figure below.

Video
playing on
the emulator

142
If you replace the statements

android:layout_width="wrap_content"
android:layout_height="wrap_content"
by the statements

android:layout_width="500px"
android:layout_height="500px"

Then the output on the screen is:

Video screen is
reduced because
of the code:

Note:

If you replace the file video.mp4 in the raw folder by the file music.mp3, then you should rewrite the
above codes after the package name in .java file as follows:

import android.graphics.PixelFormat;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

143
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonPlayVideo2 = (Button) findViewById(R.id.button1);
getWindow().setFormat(PixelFormat.UNKNOWN);
//displays a video file
VideoView mVideoView2 = (VideoView) findViewById(R.id.videoView1);
String uriPath2 = "android.resource://com.example.manju.helloandroid/" +
R.raw.music;
Uri uri2 = Uri.parse(uriPath2);
mVideoView2.setVideoURI(uri2);
mVideoView2.requestFocus();
mVideoView2.start();
buttonPlayVideo2.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
VideoView mVideoView2 = (VideoView) findViewById(R.id.videoView1);
// VideoView mVideoView = new VideoView(this);
String uriPath = "android.resource://com.example.manju.helloandroid/"
+ R.raw.music;
Uri uri2 = Uri.parse(uriPath);
mVideoView2.setVideoURI(uri2);
mVideoView2.requestFocus();
mVideoView2.start();
}
});
}
}
Then the output on the screen is:

You will see the


black screen but you
will hear the music

144
Note:
If you add the following code in .xml file:

<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:src="@raw/image_name" />

Then the output on the screen is:


X You can adjust the image
↔ ↕
using the following buttons

You can drag the image on


the black screen

 How to Create a second activity

First Activity Second Activity

Button1

First Activity:

145
First you need to replace the existing codes after the package name in Mainactivity.java file by the
following codes:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onButtonClick(View v) {


if (v.getId() == R.id.Bdisplay)

{
Intent i = new Intent(MainActivity.this, Display.class);
startActivity(i);
}

}
}

And you need to replace the existing codes in activity_main. xml by the following codes:

<?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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.manju.Helloandroid.MainActivity">

<Button

146
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1"
android:id="@+id/Bdisplay"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="onButtonClick" />

</RelativeLayout>

Second Activity:

And Go to packages and under packages select Main activity → right click on it → select New → and
select Java class

Then

And go to Layout and under layout select activity_main. xml and right click on it → select New → and
select → XmL → and select Layout xml file.

Will be opened
Creates a new xml layout file

Layout file name:

Root tag: linear layout Type display here

Then click on it and


Finish display.xml file will be
created.

147
And you should place the following codes in Display.java file:

import android. app. Activity;


import android.os.Bundle;

/**
* Created by Manju on 3/17/2016.
*/
public class Display extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display);
}
}

And you should place the following codes in display.xml file:

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Our new activity has started"
android:id="@+id/textView" />
</LinearLayout>

And you should add the following code in android manifest.xml file:

<activity android:name = ".Display"></activity>


i.e.,

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


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.manju.helloandroid">

<application
android:allowBackup="true"

148
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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


</intent-filter>
</activity>
<activity android:name = ".Display"></activity>
</application>

</manifest>

 How to Create multiple activity

First Activity Second Activity Third Activity

button 1 button 2

First Activity:

First you need to replace the existing codes after the package name in Mainactivity.java file by the
following codes:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;

public class MainActivity extends AppCompatActivity {

149
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onButtonClick(View v) {


if (v.getId() == R.id.Bdisplay)

{
Intent i = new Intent(MainActivity.this, Display.class);
startActivity(i);
}

}
}

And you need to replace the existing codes in activity_main. xml by the following codes:

<?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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.manju.Helloandroid.MainActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1"
android:id="@+id/Bdisplay"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="onButtonClick" />

</RelativeLayout>

150
Second Activity:

Go to packages and under packages select Mainactivity.java → right click on it → select New → and
select Java class

Then

And Go to packages and under packages select Main activity → right click on it → select New → and
select Java class

Then

And go to Layout and under layout select activity_main. xml and right click on it → select New → and
select → XmL → and select Layout xml file.

Will be opened
Creates a new xml layout file

Layout file name:

Root tag: linear layout Type display here

Then click on it and


Finish display.xml file will be
created.

And you should open the Display.java file and rewrite the existing codes by the following codes:

151
import android. app. Activity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;

/**
* Created by Manju on 3/17/2016.
*/
public class Display extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display);

public void onButtonClick(View v) {


if (v.getId() == R.id.Bfile)

{
Intent i = new Intent(Display.this, File.class);
startActivity(i);
}

And you should open the display.xml file and rewrite the existing codes by the following codes:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button2"
android:id="@+id/Bfile"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"

152
android:layout_marginBottom="177dp"
android:onClick="onButtonClick" />

</LinearLayout>

Third Activity:

And Go to packages and under packages select Display.java → right click on it → select New → and
select Java class

Then

And go to Layout and under layout select display. xml and right click on it → select New → and select →
XmL → and select Layout xml file.

Will be opened
Creates a new xml layout file

Layout file name:

Root tag: linear layout Type file here

Then click on it and file.xml


Finish file will be created.

And you should place the following codes in File.java file:

import android.app.Activity;
import android.os.Bundle;

153
/**
* Created by Manju on 3/21/2016.
*/

public class File extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.file);
}
}

And you should place the following codes in file.xml file:

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Our new activity is running"
android:id="@+id/textView" />
</LinearLayout>

And you should add the following codes in android manifest.xml file:

<activity android:name = ".Display"></activity>


<activity android:name = ".File"></activity>

i.e.,

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


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.manju.helloandroid">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"

154
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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


</intent-filter>
</activity>
<activity android:name = ".Display"></activity>
<activity android:name = ".File"></activity>
</application>

</manifest>

Code that must be written in Mainactivity.java file

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

155
setContentView(R.layout.activity_main);
}

public void onButtonClick(View v) {


if (v.getId() == R.id.Bdisplay)

{
Intent i = new Intent(MainActivity.this, Display.class);
startActivity(i);
}

if (v.getId() == R.id.Bmanju)

{
Intent i = new Intent(MainActivity.this, Manju.class);
startActivity(i);
}

Code that must be written in main_activity.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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.manju.helloandroid.MainActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button 1"
android:id="@+id/Bdisplay"
android:onClick="onButtonClick"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />

<Button

156
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button 2"
android:id="@+id/Bmanju"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="onButtonClick" />

</RelativeLayout>

And go to Mainactivity.java → right click on it → select New → and select Java class

Then

And again go to Mainactivity.java → right click on it → select New → and select Java class

Then

Now Display.java and Manju.java files are created.

157
And go to Layout and under layout select main_activity. xml and right click on it → select New → and
select → XmL → and select Layout xml file.

Will be opened
Creates a new xml layout file

Layout file name:

Root tag: linear layout Type display here

Then click on it and


Finish display.xml file will be
created.

And again go to Layout and under layout select main_activity. xml and right click on it → select New →
and select → XmL → and select Layout xml file.

Will be opened
Creates a new xml layout file

Layout file name:

Root tag: linear layout Type manju here

Then click on it and


Finish manju.xml file will be
created.

Now display.xml and manju.xml files are created.

Code that should be written in Display.java file:

import android. app. Activity;


import android.os.Bundle;

/**
* Created by Manju on 3/17/2016.

158
*/
public class Display extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display);
}
}

Code that should be written in display.xml file:

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Our new activity has started"
android:id="@+id/textView" />
</LinearLayout>

Code that should be written in Manju.java file:

import android.os.Bundle;
import android. app. Activity;
/**
* Created by Manju on 3/28/2016.
*/
public class Manju extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.manju);
}
}

Code that should be written in manju.xml file:

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
51

159
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Our new activity has ended"
android:id="@+id/textView" />

</LinearLayout>

And in android manifest file you have to add the following codes:

<activity android:name = ".Display"></activity>


<activity android:name = ".Manju"></activity>
i.e.,

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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


</intent-filter>
</activity>
<activity android:name = ".Display"></activity>
<activity android:name = ".Manju"></activity>

</application>

Note:

If the program:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

160
import android.view.View;
import android.content.Intent;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onButtonClick(View v) {


if (v.getId() == R.id.Bdisplay)

{
Intent i = new Intent(MainActivity.this, Display.class);
startActivity(i);
}

if (v.getId() == R.id.Bmanju)

{
Intent i = new Intent(MainActivity.this, Manju.class);
startActivity(i);
}

is rewritten as:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

161
public void onButtonClick(View v) {
if (v.getId() == R.id.Bdisplay)

{
Intent i = new Intent(MainActivity.this, Display.class);
startActivity(i);
}
}

public void onButtonClick(View v) {


if (v.getId() == R.id.Bmanju)

{
Intent i = new Intent(MainActivity.this, Manju.class);
startActivity(i);
}

}
}

Then execution error will be displayed on the Emulator or force shut down will result because method

public void onButtonClick(View v)

is declared twice.

 How to generate .apk file

Go to build → then select build apk → Gradle build starts → apk files are generated in few minutes →
install and run it on your android mobile set.

Note:

In order to sell your app on Google play -- you need to generate signed apk file for that:

162
Then go to build → select generate signed apk→ then you will see

Then you see New key store window → then fill the details – for example

In Alias → type (say IT means information technology)

Enter the password and confirm the password

163
Note: always select Validity (years) > 25 years because in order to publish your app in Google play you
need to select minimum years of 25.

After filling the details you press OK → then you will see GENERATE SIGNED APK window will be
opened → press next → then you need to fill the master password (note: you need to remember master
password because it is only the evidence the Google play will verify whether you are going to publish
your app or not) → after filling the master password , then click on finish → after few minutes of Gradle
building → you see the apk file in show folder.

 Open a website on button click

button 1

First you need to open the manifest file and add the statement

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

and you need to replace the existing codes in .xml file by the following codes:

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


<LinearLayout 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:fitsSystemWindows="true"
tools:context="com.example.manju.web.MainActivity"
android:baselineAligned="false">

<Button
android:layout_width="wrap_content"

164
android:layout_height="wrap_content"
android:text="Browser"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="browser1" />

</LinearLayout>

And you should modify the codes below the package name in MainActivity.java as follows:

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void browser1(View view){
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://google.com.kh"));
startActivity(browserIntent);

}
}

Note: since http://google.com.kh is written , Google website will be opened.

Suppose you want to add two buttons (i.e., if you click on button 1, Google website should be opened and
if you click on button 2, facebook website should be opened)

165
Then

Your .java file should take the form:

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void browser1(View view){
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://google.com.kh"));
startActivity(browserIntent);

public void browser2(View view){


Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://facebook.com.kh"));
startActivity(browserIntent);

and your .xml file should appear as:

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


<LinearLayout 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:fitsSystemWindows="true"
tools:context="com.example.manju.web.MainActivity"
android:baselineAligned="false">

166
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Browser"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="browser1" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Browser2"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="130dp"
android:onClick="browser2" />

</LinearLayout>

 Make a phone call on button click

First you NEED to open the manifest file and add the statement

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

and you need to replace the existing codes in activity_main. xml file by the following codes:

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


<LinearLayout 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:fitsSystemWindows="true"
tools:context="com.example.manju.web.MainActivity"
android:baselineAligned="false">

<Button
android:id="@+id/buttonCall"
android:layout_width="wrap_content"

167
android:layout_height="wrap_content"
android:text="Call1"
android:layout_alignParentBottom="true"
android:layout_marginBottom="200dp"
android:onClick="call" />

<Button
android:id="@+id/buttonCall1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Call2"
android:layout_alignParentBottom="true"
android:layout_marginBottom="150dp"
android:onClick="call" />

</LinearLayout>

And you should modify the codes below the package name in MainActivity.java file as follows:

import android.content.Intent;

import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android. view. View.OnClickListener;

public class MainActivity extends AppCompatActivity {


private Button button;

protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.buttonCall);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" +
"000000123"));
startActivity(callIntent);
}
});

168
button = (Button) findViewById(R.id.buttonCall1);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" +
"020000000"));
startActivity(callIntent);
}
});

The output on the screen is:

 Send SMS on button click

First you need to open the manifest file and add the statement

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

and you need to place the following codes in .xml file:

<Button
android:id="@+id/buttonSMS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sms"
android:layout_alignParentBottom="true"

169
android:layout_marginBottom="200dp"
android:onClick="SMS" />

And you should modify the codes below the package name in MainActivity.java file as follows:

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android. view. View.OnClickListener;

public class MainActivity extends AppCompatActivity {


private Button button;

protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.buttonSMS);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent SMSIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:" +
"9844622855"));
startActivity(SMSIntent);
}
});

}
}

Suppose you want to add two buttons (i.e., if you click on button 1, sms should be sent to one number and
if you click on button 2, sms should be sent to another number)

Then

170
Your .java file should take the form:

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android. view. View.OnClickListener;

public class MainActivity extends AppCompatActivity {


private Button button;

protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.buttonSMS);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent SMSIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:" +
"00000002"));
startActivity(SMSIntent);
}
});
button = (Button) findViewById(R.id.buttonSMS1);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent SMSIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:" +
"0000065660"));
startActivity(SMSIntent);
}
});

codes that should be added to .xml file:

171
<Button
android:id="@+id/buttonSMS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sms"
android:layout_alignParentBottom="true"
android:layout_marginBottom="200dp"
android:onClick="SMS" />

<Button
android:id="@+id/buttonSMS1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sms1"
android:layout_alignParentBottom="true"
android:layout_marginBottom="150dp"
android:onClick="SMS" />

 Calculator

activity main.xml file should take the form:

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


<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout1"
android:layout_marginLeft="10pt"
android:layout_marginRight="10pt"
android:layout_marginTop="3pt">
<EditText
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginRight="5pt"
android:id="@+id/etNum1"
android:layout_width="match_parent"
android:inputType="numberDecimal">
</EditText>

172
<EditText
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="5pt"
android:id="@+id/etNum2"
android:layout_width="match_parent"
android:inputType="numberDecimal">
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout2"
android:layout_marginTop="3pt"
android:layout_marginLeft="5pt"
android:layout_marginRight="5pt">
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="+"
android:textSize="8pt"
android:id="@+id/btnAdd">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="-"
android:textSize="8pt"
android:id="@+id/btnSub">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="*"
android:textSize="8pt"
android:id="@+id/btnMult">
</Button>

<Button

173
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="/"
android:textSize="8pt"
android:id="@+id/btnDiv">
</Button>

</LinearLayout>
<TextView
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginLeft="5pt"
android:layout_marginRight="5pt"
android:textSize="12pt"
android:layout_marginTop="3pt"
android:id="@+id/tvResult"
android:gravity="center_horizontal">
</TextView>

</LinearLayout>

And your .java file should take the form:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Bundle;
import android.app.Activity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements OnClickListener {

EditText etNum1;
EditText etNum2;

Button btnAdd;
Button btnSub;

174
Button btnMult;
Button btnDiv;

TextView tvResult;

String oper = "";

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// find the elements


etNum1 = (EditText) findViewById(R.id.etNum1);
etNum2 = (EditText) findViewById(R.id.etNum2);

btnAdd = (Button) findViewById(R.id.btnAdd);


btnSub = (Button) findViewById(R.id.btnSub);
btnMult = (Button) findViewById(R.id.btnMult);
btnDiv = (Button) findViewById(R.id.btnDiv);

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

// set a listener
btnAdd.setOnClickListener((OnClickListener) this);
btnSub.setOnClickListener(this);
btnMult.setOnClickListener(this);
btnDiv.setOnClickListener(this);

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
float num1 = 0;
float num2 = 0;
float result = 0;

// check if the fields are empty


if (TextUtils.isEmpty(etNum1.getText().toString())
|| TextUtils.isEmpty(etNum2.getText().toString())) {
return;
}

175
// read EditText and fill variables with numbers
num1 = Float.parseFloat(etNum1.getText().toString());
num2 = Float.parseFloat(etNum2.getText().toString());

// defines the button that has been clicked and performs the corresponding
operation
// write operation into oper, we will use it later for output
switch (v.getId()) {
case R.id.btnAdd:
oper = "+";
result = num1 + num2;
break;
case R.id.btnSub:
oper = "-";
result = num1 - num2;
break;
case R.id.btnMult:
oper = "*";
result = num1 * num2;
break;
case R.id.btnDiv:
oper = "/";
result = num1 / num2;
break;
default:
break;
}

// form the output line


tvResult.setText(num1 + " " + oper + " " + num2 + " = " + result);
}
}

 How to get location (latitude and longitude values) and city name?

Code in the MainActivity.java file:

import android.os.Bundle;
import android.app.Activity;
import java.io.IOException;
import java.util.List;
import java.util.Locale;

176
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements OnClickListener {

private LocationManager locationMangaer=null;


private LocationListener locationListener=null;

private Button btnGetLocation = null;


private EditText editLocation = null;
private ProgressBar pb =null;

private static final String TAG = "Debug";


private Boolean flag = false;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//if you want to lock screen for always Portrait mode


setRequestedOrientation(ActivityInfo
.SCREEN_ORIENTATION_PORTRAIT);

177
pb = (ProgressBar) findViewById(R.id.progressBar1);
pb.setVisibility(View.INVISIBLE);

editLocation = (EditText) findViewById(R.id.editTextLocation);

btnGetLocation = (Button) findViewById(R.id.btnLocation);


btnGetLocation.setOnClickListener(this);

locationMangaer = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);

@Override
public void onClick(View v) {
flag = displayGpsStatus();
if (flag) {

Log.v(TAG, "onClick");

editLocation.setText("Please!! move your device to"+


" see the changes in coordinates."+"\nWait..");

pb.setVisibility(View.VISIBLE);
locationListener = new MyLocationListener();

locationMangaer.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
5000, 10,locationListener);

} else {
alertbox("Gps Status!!", "Your NETWORK is: OFF");
}

/*----Method to Check GPS is enable or disable ------ */


private Boolean displayGpsStatus() {
ContentResolver contentResolver = getBaseContext()
.getContentResolver();
boolean gpsStatus = Settings.Secure
.isLocationProviderEnabled(contentResolver,
LocationManager.NETWORK_PROVIDER);
if (gpsStatus) {

178
return true;

} else {
return false;
}
}

/*----------Method to create an AlertBox -------------- */


protected void alertbox(String title, String mymessage) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your Device's network is Disable")
.setCancelable(false)
.setTitle("** network Status **")
.setPositiveButton("network On",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// finish the current activity
// AlertBoxAdvance.this.finish();
Intent myIntent = new Intent(
Settings.ACTION_SECURITY_SETTINGS);
startActivity(myIntent);
dialog.cancel();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// cancel the dialog box
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}

/*----------Listener class to get coordinates -------------- */


private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {

editLocation.setText("");
pb.setVisibility(View.INVISIBLE);
Toast.makeText(getBaseContext(),"Location changed : Lat: " +
loc.getLatitude()+ " Lng: " + loc.getLongitude(),

179
Toast.LENGTH_SHORT).show();
String longitude = "Longitude: " +loc.getLongitude();
Log.v(TAG, longitude);
String latitude = "Latitude: " +loc.getLatitude();
Log.v(TAG, latitude);

/*----------to get City-Name from coordinates -------------- */


String cityName=null;
Geocoder gcd = new Geocoder(getBaseContext(),
Locale.getDefault());
List<Address> addresses;
try {
addresses = gcd.getFromLocation(loc.getLatitude(), loc
.getLongitude(), 1);
if (addresses.size() > 0)
System.out.println(addresses.get(0).getLocality());
cityName=addresses.get(0).getLocality();
} catch (IOException e) {
e.printStackTrace();
}

String s = longitude+"\n"+latitude +
"\n\nCity name is: "+cityName;
editLocation.setText(s);
}

@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}

@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}

@Override
public void onStatusChanged(String provider,
int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
}

180
Code that you need to add in the manifest file:

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

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

Code in the activity_main.xml file:

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


<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Get Current Location and City Name"
android:layout_weight="0.20"
android:gravity="center"
android:textSize="20sp" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:id="@+id/editTextLocation"
android:editable="false">
<requestFocus></requestFocus>
</EditText>
<LinearLayout
android:id="@+id/layButtonH"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="center"
android:layout_weight="0.15">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Location"
android:id="@+id/btnLocation"></Button>
</LinearLayout>

181
<LinearLayout
android:id="@+id/layloadingH"
android:layout_height="wrap_content"
android:layout_weight="0.20"
android:layout_width="fill_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:id="@+id/progressBar1"
android:layout_height="wrap_content"></ProgressBar>
</LinearLayout>
</LinearLayout>

Note:

Suppose if you want to add the clock and text time to your app then your .xml file should take the form:

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


<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Get Current Location and City Name"
android:layout_weight="0.20"
android:gravity="center"
android:textSize="20sp" />

<TextClock
android:layout_width="82dp"
android:layout_height="43dp"
android:id="@+id/textClock"
android:layout_gravity="center_horizontal" />

<AnalogClock
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/analogClock"

182
android:layout_gravity="center_horizontal"
android:layout_weight="0.20" />

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:id="@+id/editTextLocation"
android:editable="false">
<requestFocus></requestFocus>
</EditText>
<LinearLayout
android:id="@+id/layButtonH"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="center"
android:layout_weight="0.15">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Location"
android:id="@+id/btnLocation"></Button>
</LinearLayout>
<LinearLayout
android:id="@+id/layloadingH"
android:layout_height="wrap_content"
android:layout_weight="0.20"
android:layout_width="fill_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:id="@+id/progressBar1"
android:layout_height="wrap_content"></ProgressBar>
</LinearLayout>
</LinearLayout>

 How to get location and address line, country name, postal code etc.?

Code in MainActivity.java file

import android.os.Bundle;
import android.app.Activity;

183
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements OnClickListener {

private LocationManager locationMangaer=null;


private LocationListener locationListener=null;

private Button btnGetLocation = null;


private EditText editLocation = null;
private ProgressBar pb =null;

private static final String TAG = "Debug";


private Boolean flag = false;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

184
//if you want to lock screen for always Portrait mode
setRequestedOrientation(ActivityInfo
.SCREEN_ORIENTATION_PORTRAIT);

pb = (ProgressBar) findViewById(R.id.progressBar1);
pb.setVisibility(View.INVISIBLE);

editLocation = (EditText) findViewById(R.id.editTextLocation);

btnGetLocation = (Button) findViewById(R.id.btnLocation);


btnGetLocation.setOnClickListener(this);

locationMangaer = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);

@Override
public void onClick(View v) {
flag = displayGpsStatus();
if (flag) {

Log.v(TAG, "onClick");

editLocation.setText("Please!! move your device to"+


" see the changes in coordinates."+"\nWait..");

pb.setVisibility(View.VISIBLE);
locationListener = new MyLocationListener();

locationMangaer.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
5000, 10,locationListener);

} else {
alertbox("Gps Status!!", "Your NETWORK is: OFF");
}

/*----Method to Check GPS is enable or disable ------ */


private Boolean displayGpsStatus() {
ContentResolver contentResolver = getBaseContext()
.getContentResolver();

185
boolean gpsStatus = Settings.Secure
.isLocationProviderEnabled(contentResolver,
LocationManager.NETWORK_PROVIDER);
if (gpsStatus) {
return true;

} else {
return false;
}
}

/*----------Method to create an AlertBox -------------- */


protected void alertbox(String title, String mymessage) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your Device's network is Disable")
.setCancelable(false)
.setTitle("** network Status **")
.setPositiveButton("network On",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// finish the current activity
// AlertBoxAdvance.this.finish();
Intent myIntent = new Intent(
Settings.ACTION_SECURITY_SETTINGS);
startActivity(myIntent);
dialog.cancel();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// cancel the dialog box
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}

/*----------Listener class to get coordinates -------------- */


private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {

186
editLocation.setText("");
pb.setVisibility(View.INVISIBLE);
Toast.makeText(getBaseContext(),"Location changed : Lat: " +
loc.getLatitude()+ " Lng: " + loc.getLongitude(),
Toast.LENGTH_SHORT).show();
String longitude = "Longitude: " +loc.getLongitude();
Log.v(TAG, longitude);
String latitude = "Latitude: " +loc.getLatitude();
Log.v(TAG, latitude);

/*----------to get City-Name from coordinates -------------- */


String L = null;
String M = null;
String N = null;
String O = null;
String P = null;
String Q = null;
String A = null;
Geocoder gcd = new Geocoder(getBaseContext(),
Locale.getDefault());
List<Address> addresses;
try {
addresses = gcd.getFromLocation(loc.getLatitude(), loc
.getLongitude(), 1);
if (addresses.size() > 0)
System.out.println(addresses.get(0).getLocality());
L = addresses.get(0).getAddressLine(0);
M = addresses.get(0).getSubLocality();
N = addresses.get(0).getLocality();
O = addresses.get(0).getSubAdminArea();
P = addresses.get(0).getPostalCode();
Q = addresses.get(0).getAdminArea();
A = addresses.get(0).getCountryName();
} catch (IOException e) {
e.printStackTrace();
}

String s = longitude+"\n"+latitude +
"\n\n "+ L + "\n\n " + M + "\n\n " + N +"\n\n " + O + "\n\n
"+ P + "\n\n " + Q + "\n\n "+ A;

editLocation.setText(s);
}

187
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}

@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}

@Override
public void onStatusChanged(String provider,
int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
}

 Date & time display

Code in MainActivity.java file:

import java.util.Calendar;
import java.util.Date;
import android.app.Activity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

Button btnCTime;
TextView txtCTime;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

188
btnCTime=(Button)findViewById(R.id.btnGenCurTime);
txtCTime=(TextView)findViewById(R.id.txtShowCurTime);
txtCTime.setInputType(InputType.TYPE_NULL);
btnCTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View vw) {
txtCTime.setText(new Date().toString());
}
});
}
}

Code in activity_main.xml file:

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/txtShowCurTime"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</TextView>

<Button
android:id="@+id/btnGenCurTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="date" />

</LinearLayout>

 Open whatsapp on button CLICK

Code in MainActivity.java file:

import android.content.Intent;
import android.os.Bundle;

189
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void browser1(View view){


Intent launchIntent =
getPackageManager().getLaunchIntentForPackage("com.whatsapp");
startActivity(launchIntent);
}
}

Code that you need to add in manifest file:

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

Code that you need to add in .xml file:

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="whatsapp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="browser1" />

Note: you have to download whatsapp application from the website: www.whatsapp.com and install it
into your phone – then the output on the screen is:

190
 How to set image in background?

First you need to copy the image file (say image_name.jpg) and paste into drawable folder

Then add the following code into your activity_main.xml file

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/image_name"

android:weightSum="1">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="whatsapp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="browser1" />
</LinearLayout>

 Scientific CALCULATOR

Code in MainActivity.java file:

191
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Bundle;
import android.app.Activity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements OnClickListener {

EditText etNum1;

Button btnsqrt;
Button btncbrt;
Button btnln;
Button btnlog;
Button btnexp;
Button btnsin;
Button btncos;
Button btntan;
Button btnreci;
Button btncosec;
Button btnsec;
Button btncot;
Button btnsquare;
Button btncube;
Button btnfacto;

TextView tvResult;

String oper = "";

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// find the elements

192
etNum1 = (EditText) findViewById(R.id.etNum1);

btnsqrt = (Button) findViewById(R.id.btnsqrt);


btncbrt = (Button) findViewById(R.id.btncbrt);
btnln = (Button) findViewById(R.id.btnln);
btnlog = (Button) findViewById(R.id.btnlog);
btnexp = (Button) findViewById(R.id.btnexp);
btnsin = (Button) findViewById(R.id.btnsin);
btncos = (Button) findViewById(R.id.btncos);
btntan = (Button) findViewById(R.id.btntan);
btnreci = (Button) findViewById(R.id.btnreci);
btncosec = (Button) findViewById(R.id.btncosec);
btnsec = (Button) findViewById(R.id.btnsec);
btncot = (Button) findViewById(R.id.btncot);
btnsquare = (Button) findViewById(R.id.btnsquare);
btncube = (Button) findViewById(R.id.btncube);
btnfacto = (Button) findViewById(R.id.btnfacto);

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

// set a listener
btnsqrt.setOnClickListener((OnClickListener) this);
btncbrt.setOnClickListener(this);
btnln.setOnClickListener(this);
btnlog.setOnClickListener(this);
btnexp.setOnClickListener(this);
btnsin.setOnClickListener(this);
btncos.setOnClickListener(this);
btntan.setOnClickListener(this);
btnreci.setOnClickListener(this);
btncosec.setOnClickListener(this);
btnsec.setOnClickListener(this);
btncot.setOnClickListener(this);
btnsquare.setOnClickListener(this);
btncube.setOnClickListener(this);
btnfacto.setOnClickListener(this);

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

193
double num1 = 0;
double result = 0;

// check if the fields are empty


if (TextUtils.isEmpty(etNum1.getText().toString())) {
return;
}

// read EditText and fill variables with numbers


num1 = Double.parseDouble(etNum1.getText().toString());

// defines the button that has been clicked and performs the corresponding
operation
// write operation into oper, we will use it later for output
switch (v.getId()) {
case R.id.btnsqrt:
oper = "sqrt";
result = Math.sqrt(num1) ;
break;
case R.id.btncbrt:
oper = "cbrt";
result = Math.cbrt(num1);
break;
case R.id.btnln:
oper = "ln";
result = Math.log(num1);
break;
case R.id.btnlog:
oper = "log";
result = Math.log10(num1);
break;
case R.id.btnexp:
oper = "exp";
result = Math.exp(num1);
break;
case R.id.btnsin:
oper = "sin";
result = Math.sin(num1);
break;
case R.id.btncos:
oper = "cos";
result = Math.cos(num1);
break;

194
case R.id.btntan:
oper = "tan";
result = Math.tan(num1);
break;
case R.id.btnreci:
oper = "1/x";
result = 1/num1;
break;
case R.id.btncosec:
oper = "cosec";
result = 1/Math.sin(num1);
break;
case R.id.btnsec:
oper = "sec";
result = 1/ Math.cos(num1);
break;
case R.id.btncot:
oper = "cot";
result = 1/Math.tan(num1);
break;
case R.id.btnsquare:
oper = "square";
result = num1 * num1;
break;
case R.id.btncube:
oper = "cube";
result = num1 * num1 * num1;
break;
case R.id.btnfacto:
oper = "fact";
int i, fact =1;
for(i=1;i<=num1;i++)
fact = fact *i;
result = fact;
break;
default:
break;
}

// form the output line


tvResult.setText( num1 + " " + oper + " = " + result);
}
}

195
code in activity_main.xml file

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


<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout1"
android:layout_marginLeft="10pt"
android:layout_marginRight="10pt"
android:layout_marginTop="3pt">
<EditText
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginRight="5pt"
android:id="@+id/etNum1"
android:layout_width="match_parent"
android:inputType="numberDecimal">
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout2"
android:layout_marginTop="3pt"
android:layout_marginLeft="5pt"
android:layout_marginRight="5pt">

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="sqrt"
android:textSize="8pt"
android:id="@+id/btnsqrt">
</Button>

<Button

196
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="cbrt"
android:textSize="8pt"
android:id="@+id/btncbrt">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="ln"
android:textSize="8pt"
android:id="@+id/btnln">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="log"
android:textSize="8pt"
android:id="@+id/btnlog">
</Button>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout2"
android:layout_marginTop="3pt"
android:layout_marginLeft="5pt"
android:layout_marginRight="5pt">

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="exp"
android:textSize="8pt"
android:id="@+id/btnexp">

197
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="sin"
android:textSize="8pt"
android:id="@+id/btnsin">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="cos"
android:textSize="8pt"
android:id="@+id/btncos">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="tan"
android:textSize="8pt"
android:id="@+id/btntan">
</Button>

</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout2"
android:layout_marginTop="3pt"
android:layout_marginLeft="5pt"
android:layout_marginRight="5pt">

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="1/x"
android:textSize="8pt"

198
android:id="@+id/btnreci">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="cosec"
android:textSize="8pt"
android:id="@+id/btncosec">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="sec"
android:textSize="8pt"
android:id="@+id/btnsec">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="cot"
android:textSize="8pt"
android:id="@+id/btncot">
</Button>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout2"
android:layout_marginTop="3pt"
android:layout_marginLeft="5pt"
android:layout_marginRight="5pt">

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"

199
android:text="square"
android:textSize="8pt"
android:id="@+id/btnsquare">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="cube"
android:textSize="8pt"
android:id="@+id/btncube">
</Button>

<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="factorial"
android:textSize="8pt"
android:id="@+id/btnfacto">
</Button>

</LinearLayout>

 Get Information about model number, API level, android version etc.

Code in MainActivity.java file:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

String ModelNumber, Board, Brand, Display, FingerPrint, ID, TAGS, Type,


AndroidVersion, APILevel, CodeName, INCREMENTAL;

TextView text;

200
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ModelNumber = android.os.Build.MODEL;
Board = android.os.Build.BOARD;
Brand = android.os.Build.BRAND;
Display = android.os.Build.DISPLAY;
FingerPrint = android.os.Build.FINGERPRINT;
ID = android.os.Build.ID;
TAGS = android.os.Build.TAGS;
Type = android.os.Build.TYPE;

AndroidVersion = android.os.Build.VERSION.RELEASE;
APILevel = android.os.Build.VERSION.SDK;
CodeName = android.os.Build.VERSION.CODENAME;
INCREMENTAL = android.os.Build.VERSION.INCREMENTAL;

text = (TextView) findViewById(R.id.textView2);

text.setText(Html.fromHtml("Phone Type" +
"<br/><br/><font color = 'red';>Model Number : </font></font>" +
ModelNumber
+ "<br/><font color = 'red';>Board : </font>" + Board
+ "<br/><font color = 'red';>Brand : </font>" + Brand
+ "<br/><font color = 'red';>Display : </font>" + Display
+ "<br/><font color = 'red';>FingerPrint : </font>" + FingerPrint
+ "<br/><font color = 'red';>ID : </font>" + ID
+ "<br/><font color = 'red';>TAGS : </font>" + TAGS
+ "<br/><font color = 'red';>Type : </font>" + Type

+ "<br/>"

+ "<br/><font color = 'red';>Android Version : </font>" +


AndroidVersion
+ "<br/><font color = 'red';>API Level : </font>" + APILevel
+ "<br/><font color = 'red';>CodeName : </font>" + CodeName
+ "<br/><font color = 'red';>INCREMENTAL : </font>" + INCREMENTAL));
}
}

Code in activity_main.xml file:

201
<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" >

<TextView
android:id="@+id/textView2"
android:textColor="#4169E1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10sp"
android:layout_marginTop="20sp" />

</RelativeLayout>

 How to take a photo and save it in gallery / SD card / image file in android?

Code in MainActivity.java file:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {


protected static final int CAMERA_REQUEST = 1;
ImageView imgView;
Button btnCamera;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

202
setContentView(R.layout.activity_main);
imgView = (ImageView) findViewById(R.id.imageView1);
btnCamera = (Button) findViewById(R.id.btn_camera);
btnCamera.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// ******** code for take image

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
try {

intent.putExtra("return-data", true);
startActivityForResult(intent, CAMERA_REQUEST);

} catch (ActivityNotFoundException e) {
// Do nothing for now
}

}
});
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {


if (requestCode == CAMERA_REQUEST) {

Bundle extras = data.getExtras();


if (extras != null) {
Bitmap photo = extras.getParcelable("data");
// display image in ImageView.
imgView.setImageBitmap(photo);
// saveBitmapToFile("/sdcard/crop/cropped_img.jpg", photo);
}
}

Code in activity_main.xml file:

203
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Button
android:id="@+id/btn_camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Take image" />

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />

</LinearLayout>

 IEMI number

Code in MainActivity.java file:

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity{

TelephonyManager tel;
TextView imei;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

204
imei = (TextView) findViewById(R.id.textView2);
imei.setText(tel.getDeviceId().toString());
}
}

Code in activity_main.ml file:

<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" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:textColor="#4169E1"
android:textSize="18sp"
android:text="IMEI Number" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="15sp"
android:text="IMEI" />

</RelativeLayout>

Code that you need to add in the manifest file

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

 Gallery Creation

Code in MainActivity.java file:

205
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher.ViewFactory;

public class MainActivity extends AppCompatActivity implements ViewFactory {

int imgs[] =
{
R.drawable.image_name,
R.drawable.image_name1,

};

ImageSwitcher imgSwitcher;

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imgSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher1);


imgSwitcher.setFactory(this);
imgSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
imgSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));

Gallery gallery = (Gallery) findViewById(R.id.gallery1);


gallery.setAdapter(new ImageAdapter(this));

gallery.setOnItemClickListener(new OnItemClickListener() {

206
public void onItemClick(AdapterView<?> arg0, View arg1, int
arg2,
long arg3) {
imgSwitcher.setImageResource(imgs[arg2]);
}
});
}

public class ImageAdapter extends BaseAdapter {

private Context ctx;

public ImageAdapter(Context c) {
ctx = c;
}

public int getCount() {

return imgs.length;
}

public Object getItem(int arg0) {

return arg0;
}

public long getItemId(int arg0) {

return arg0;
}

public View getView(int arg0, View arg1, ViewGroup arg2) {

ImageView iView = new ImageView(ctx);


iView.setImageResource(imgs[arg0]);
iView.setScaleType(ImageView.ScaleType.FIT_XY);
iView.setLayoutParams(new Gallery.LayoutParams(200, 150));
return iView;
}
}

public View makeView() {


ImageView iView = new ImageView(this);
iView.setScaleType(ImageView.ScaleType.FIT_CENTER);

207
iView.setLayoutParams(new ImageSwitcher.LayoutParams
(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
iView.setBackgroundColor(0xFF000000);
return iView;
}
}

Code in activity_main.xml file:

<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" >

<Gallery
android:id="@+id/gallery1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />

<ImageSwitcher
android:id="@+id/imageSwitcher1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/gallery1"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp" >
</ImageSwitcher>

</RelativeLayout>

 How to get weather forecast inserting location

Code in MainActivity.java file:

import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

208
TextView cityField, detailsField, currentTemperatureField, humidity_field,
pressure_field, weatherIcon, updatedField;

Typeface weatherFont;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);

weatherFont = Typeface.createFromAsset(getApplicationContext().getAssets(),
"fonts/weathericons-regular-webfont.ttf");

cityField = (TextView)findViewById(R.id.city_field);
updatedField = (TextView)findViewById(R.id.updated_field);
detailsField = (TextView)findViewById(R.id.details_field);
currentTemperatureField =
(TextView)findViewById(R.id.current_temperature_field);
humidity_field = (TextView)findViewById(R.id.humidity_field);
pressure_field = (TextView)findViewById(R.id.pressure_field);
weatherIcon = (TextView)findViewById(R.id.weather_icon);
weatherIcon.setTypeface(weatherFont);

Function.placeIdTask asyncTask =new Function.placeIdTask(new


Function.AsyncResponse() {
public void processFinish(String weather_city, String weather_description,
String weather_temperature, String weather_humidity, String weather_pressure, String
weather_updatedOn, String weather_iconText, String sun_rise) {

cityField.setText(weather_city);
updatedField.setText(weather_updatedOn);
detailsField.setText(weather_description);
currentTemperatureField.setText(weather_temperature);
humidity_field.setText("Humidity: "+weather_humidity);
pressure_field.setText("Pressure: "+weather_pressure);
weatherIcon.setText(Html.fromHtml(weather_iconText));

}
});

asyncTask.execute(

209
"25.223666 ", "-12.3669858"); // asyncTask.execute("Latitude", "Longitude")

}
}

Code in Function.java file:

import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class Function extends Activity {

private static final String OPEN_WEATHER_MAP_URL =

"http://api.openweathermap.org/data/2.5/weather?lat=%s&lon=%s&units=metric";

private static final String OPEN_WEATHER_MAP_API =


"16f28aecfde1858cd9bda7e9444e54e8";

public static String setWeatherIcon(int actualId, long sunrise, long sunset){


int id = actualId / 100;
String icon = "";
if(actualId == 800){
long currentTime = new Date().getTime();
if(currentTime>=sunrise && currentTime<sunset) {
icon = "&#xf00d;";
} else {
icon = "&#xf02e;";
}
} else {
switch(id) {

210
case 2 : icon = "&#xf01e;";
break;
case 3 : icon = "&#xf01c;";
break;
case 7 : icon = "&#xf014;";
break;
case 8 : icon = "&#xf013;";
break;
case 6 : icon = "&#xf01b;";
break;
case 5 : icon = "&#xf019;";
break;
}
}
return icon;
}

public interface AsyncResponse {

void processFinish(String output1, String output2, String output3, String


output4, String output5, String output6, String output7, String output8);
}

public static class placeIdTask extends AsyncTask<String, Void, JSONObject> {

public AsyncResponse delegate = null;//Call back interface

public placeIdTask(AsyncResponse asyncResponse) {


delegate = asyncResponse;//Assigning call back interfacethrough
constructor
}

@Override
protected JSONObject doInBackground(String... params) {

JSONObject jsonWeather = null;


try {
jsonWeather = getWeatherJSON(params[0], params[1]);
} catch (Exception e) {
Log.d("Error", "Cannot process JSON results", e);
}

211
return jsonWeather;
}

@Override
protected void onPostExecute(JSONObject json) {
try {
if(json != null){
JSONObject details =
json.getJSONArray("weather").getJSONObject(0);
JSONObject main = json.getJSONObject("main");
DateFormat df = DateFormat.getDateTimeInstance();
String city = json.getString("name").toUpperCase(Locale.US) + ", "
+ json.getJSONObject("sys").getString("country");
String description =
details.getString("description").toUpperCase(Locale.US);
String temperature = String.format("%.2f",
main.getDouble("temp"))+ "°";
String humidity = main.getString("humidity") + "%";
String pressure = main.getString("pressure") + " hPa";
String updatedOn = df.format(new Date(json.getLong("dt")*1000));
String iconText = setWeatherIcon(details.getInt("id"),
json.getJSONObject("sys").getLong("sunrise") * 1000,
json.getJSONObject("sys").getLong("sunset") * 1000);

delegate.processFinish(city, description, temperature, humidity,


pressure, updatedOn, iconText, ""+ (json.getJSONObject("sys").getLong("sunrise") *
1000));

}
} catch (JSONException e) {
//Log.e(LOG_TAG, "Cannot process JSON results", e);
}

}
}

public static JSONObject getWeatherJSON(String lat, String lon){


try {
URL url = new URL(String.format(OPEN_WEATHER_MAP_URL, lat, lon));

212
HttpURLConnection connection =
(HttpURLConnection)url.openConnection();

connection.addRequestProperty("x-api-key", OPEN_WEATHER_MAP_API);

BufferedReader reader = new BufferedReader(


new InputStreamReader(connection.getInputStream()));

StringBuffer json = new StringBuffer(1024);


String tmp="";
while((tmp=reader.readLine())!=null)
json.append(tmp).append("\n");
reader.close();

JSONObject data = new JSONObject(json.toString());

// This value will be 404 if the request was not


// successful
if(data.getInt("cod") != 200){
return null;
}

return data;
}catch(Exception e){
return null;
}
}

Code in activity_main.xml file:

<?xml version="1.0"?>

<RelativeLayout
android:padding="20dp"
android:background="#3F51B5"
android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:layout_height="wrap_content"

213
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
android:id="@+id/city_field"/>

<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:id="@+id/updated_field"
android:textSize="13sp"
android:layout_below="@+id/city_field"/>

<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:id="@+id/weather_icon"
android:textSize="90sp"
android:layout_centerVertical="true"/>

<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:id="@+id/current_temperature_field"
android:textSize="50sp"
android:layout_alignParentBottom="true"/>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:id="@+id/details_field"

214
android:layout_below="@+id/weather_icon"/>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:id="@+id/humidity_field"
android:layout_below="@+id/details_field"/>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:id="@+id/pressure_field"
android:layout_below="@+id/humidity_field"/>

</RelativeLayout>

Code that you need to write in manifest.xml file:

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

 How to create a Login page

MainActivity.java:

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

215
Button b1,b2;
EditText ed1,ed2;

TextView tx1;
int counter = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

b1=(Button)findViewById(R.id.button);
ed1=(EditText)findViewById(R.id.editText);
ed2=(EditText)findViewById(R.id.editText2);

b2=(Button)findViewById(R.id.button2);
tx1=(TextView)findViewById(R.id.textView3);
tx1.setVisibility(View.GONE);

b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ed1.getText().toString().equals("admin") &&

ed2.getText().toString().equals("admin")) {

Toast.makeText(getApplicationContext(),
"Redirecting...",Toast.LENGTH_SHORT).show();

Intent i = new Intent(MainActivity.this, Display.class);


startActivity(i);
}

else{
Toast.makeText(getApplicationContext(), "Wrong
Credentials",Toast.LENGTH_SHORT).show();

tx1.setVisibility(View.VISIBLE);
tx1.setBackgroundColor(Color.RED);
counter--;
tx1.setText(Integer.toString(counter));

if (counter == 0) {

216
b1.setEnabled(false);
}
}
}
});

b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

Display.java:

import android. app. Activity;


import android.os.Bundle;

217
public class Display extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display);
}
}

activity_main.xml:

<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">

<TextView android:text="Login" android:layout_width="wrap_content"


android:layout_height="wrap_content"
android:id="@+id/textview"
android:textSize="35dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
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:hint="Enter Name"
android:focusable="true"
android:textColorHighlight="#ff7eff15"

218
android:textColorHint="#ffff25e6"
android:layout_marginTop="46dp"
android:layout_below="@+id/imageView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/ic_launcher"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/editText2"
android:layout_below="@+id/editText"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText"
android:textColorHint="#ffff299f"
android:hint="Password" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Attempts Left:"
android:id="@+id/textView2"
android:layout_below="@+id/editText2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textSize="25dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"

219
android:id="@+id/textView3"
android:layout_alignTop="@+id/textView2"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignBottom="@+id/textView2"
android:layout_toEndOf="@+id/textview"
android:textSize="25dp"
android:layout_toRightOf="@+id/textview" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="login"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/textview"
android:layout_toStartOf="@+id/textview"
android:onClick="onClick"

/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel"
android:id="@+id/button2"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/textview"
android:layout_toEndOf="@+id/textview" />

</RelativeLayout>

display.xml:

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"

220
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Our new activity has started"
android:id="@+id/textView" />

</LinearLayout>

String.xml file:

<resources>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>

</resources>

Code in Manifest.xml file:

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


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.manju.myapplication123">

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

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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


</intent-filter>
</activity>

<activity android:name = ".Display"></activity>


</application>
</manifest>

221
 How to create LOGOUT and EXIT IN Android

Display.java:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class Display extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display);
}
public void logout(View view){
Intent i = new Intent(Display.this, MainActivity.class);
startActivity(i);
}

public void exit(View view){


moveTaskToBack(true);
Display.this.finish();

display.xml:

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Display" >

222
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="146dp"
android:onClick="logout"
android:text="logout" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_alignParentTop="true"
android:layout_marginTop="64dp"
android:text="welcome"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_centerHorizontal="true"
android:layout_marginTop="43dp"
android:onClick="exit"
android:text="exit" />
</RelativeLayout>

 How to create weather forecast application

MainActivity.java:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

223
public class MainActivity extends AppCompatActivity implements
WeatherDownloader.WeatherDataDownloadListener {

EditText cityName, cityId, coordinates, zipCode;


TextView cityNameResult, cityIdResult, coordinatesResult, zipCodeResult;
Button cityNameSearch, cityIdSearch, coordinatesSearch, zipCodeSearch;
ProgressBar cityNameProgress, cityIdProgress, coordinatesProgress,
zipCodeProgress;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("Current Weather");

//Bind the views


cityName = (EditText) findViewById(R.id.city_name);
cityId = (EditText) findViewById(R.id.city_id);
coordinates = (EditText) findViewById(R.id.coordinates);
zipCode = (EditText) findViewById(R.id.zip_code);

cityNameResult = (TextView) findViewById(R.id.city_result);


cityIdResult = (TextView) findViewById(R.id.city_id_result);
coordinatesResult = (TextView) findViewById(R.id.coordinates_result);
zipCodeResult = (TextView) findViewById(R.id.zip_code_result);

cityNameSearch = (Button) findViewById(R.id.city_search);


cityIdSearch = (Button) findViewById(R.id.city_id_search);
coordinatesSearch = (Button) findViewById(R.id.coordinates_search);
zipCodeSearch = (Button) findViewById(R.id.zip_code_search);

cityNameProgress = (ProgressBar) findViewById(R.id.city_progress);


cityIdProgress = (ProgressBar) findViewById(R.id.city_id_progress);
coordinatesProgress = (ProgressBar) findViewById(R.id.coordinates_progress);
zipCodeProgress = (ProgressBar) findViewById(R.id.zip_code_progress);

cityNameSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cityNameProgress.setVisibility(View.VISIBLE);
String cityNameQuery = cityName.getText().toString();
if(cityNameQuery.length() > 0) {
WeatherDownloader downloader = new

224
WeatherDownloader(MainActivity.this, WeatherDownloader.Mode.CITYNAME);

downloader.getCurrentWeatherData(getResources().getString(R.string.weather_api_key),
cityNameQuery);
}
}
});

cityIdSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cityIdProgress.setVisibility(View.VISIBLE);
String cityIdQuery = cityId.getText().toString();
if(cityIdQuery.length() > 0) {
WeatherDownloader downloader = new
WeatherDownloader(MainActivity.this, WeatherDownloader.Mode.CITYID);

downloader.getCurrentWeatherData(getResources().getString(R.string.weather_api_key),
cityIdQuery);
}
}
});

coordinatesSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
coordinatesProgress.setVisibility(View.VISIBLE);
String coordinatesQuery = coordinates.getText().toString();
if(coordinatesQuery.length() > 0) {
WeatherDownloader downloader = new
WeatherDownloader(MainActivity.this, WeatherDownloader.Mode.COORDINATES);

downloader.getCurrentWeatherData(getResources().getString(R.string.weather_api_key),
coordinatesQuery);
}
}
});

zipCodeSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
zipCodeProgress.setVisibility(View.VISIBLE);
String zipCodeQuery = zipCode.getText().toString();
if(zipCodeQuery.length() > 0) {

225
WeatherDownloader downloader = new
WeatherDownloader(MainActivity.this, WeatherDownloader.Mode.ZIPCODE);

downloader.getCurrentWeatherData(getResources().getString(R.string.weather_api_key),
zipCodeQuery);
}
}
});

@Override
public void onWeatherDownloadComplete(WeatherData data, WeatherDownloader.Mode
mode) {
if (mode == WeatherDownloader.Mode.CITYNAME) {
cityNameProgress.setVisibility(View.GONE);
cityNameResult.setText(String.format("%.2f",
WeatherUnits.convertToCelsius(data.getMain().getTemp())));
} else if (mode == WeatherDownloader.Mode.CITYID) {
cityIdProgress.setVisibility(View.GONE);
cityIdResult.setText(String.format("%.2f",
WeatherUnits.convertToFahrenheit(data.getMain().getTemp())));
} else if (mode == WeatherDownloader.Mode.COORDINATES) {
coordinatesProgress.setVisibility(View.GONE);
coordinatesResult.setText(data.getMain().getTemp());
} else if (mode == WeatherDownloader.Mode.ZIPCODE) {
zipCodeProgress.setVisibility(View.GONE);
zipCodeResult.setText(String.format("%.2f",
WeatherUnits.convertToFahrenheit(data.getMain().getTemp())));
}
}

@Override
public void onWeatherDownloadFailed(Exception e) {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}

Clouds.java:

public class Clouds {


private String all;

226
public String getAll () {
return all;
}

public void setAll (String all) {


this.all = all;
}

@Override
public String toString() {
return "Clouds[all = "+all+"]";
}
}

Coord.java:

public class Coord {


private String lon;

private String lat;

public String getLon () {


return lon;
}

public void setLon (String lon) {


this.lon = lon;
}

public String getLat () {


return lat;
}

public void setLat (String lat) {


this.lat = lat;
}

@Override
public String toString() {
return "Coord [lon = "+lon+", lat = "+lat+"]";

227
}
}

JsonUtil.java:

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JsonUtil {


public static Coord getCoordObjectFromJson(String json) throws JSONException {
JSONObject jsonObject = new JSONObject(json);
JSONObject coordJson = jsonObject.getJSONObject("coord");
if(coordJson != null) {
Coord coord = new Coord();
coord.setLon(coordJson.getString("lon"));
coord.setLat(coordJson.getString("lat"));
return coord;
} else {
return null;
}
}

public static Sys getSysObjectFromJson(String json) throws JSONException {


JSONObject jsonObject = new JSONObject(json);
JSONObject sysJson = jsonObject.getJSONObject("sys");
if(sysJson != null) {
Sys sys = new Sys();
sys.setId(sysJson.getString("id"));
sys.setType(sysJson.getString("type"));
sys.setMessage(sysJson.getString("message"));
sys.setCountry(sysJson.getString("country"));
sys.setSunrise(sysJson.getString("sunrise"));
sys.setSunset(sysJson.getString("sunset"));
return sys;
} else {
return null;
}
}

public static Weather[] getWeatherObjectFromJson(String json) throws JSONException

228
{
JSONObject jsonObject = new JSONObject(json);
JSONArray weatherJsonArray = jsonObject.getJSONArray("weather");
if(weatherJsonArray != null) {
Weather[] weatherArray = new Weather[weatherJsonArray.length()];
for (int i = 0; i < weatherJsonArray.length(); i++) {
Weather weather = new Weather();
JSONObject weatherJsonObject = weatherJsonArray.getJSONObject(i);
weather.setId(weatherJsonObject.getString("id"));
weather.setDescription(weatherJsonObject.getString("description"));
weather.setIcon(weatherJsonObject.getString("icon"));
weather.setMain(weatherJsonObject.getString("main"));
weatherArray[i] = weather;
}
return weatherArray;
} else {
return null;
}
}

public static Main getMainObjectFromJson(String json) throws JSONException {


JSONObject jsonObject = new JSONObject(json);
JSONObject mainJsonObject = jsonObject.getJSONObject("main");
if(mainJsonObject != null) {
Main main = new Main();
main.setHumidity(mainJsonObject.getString("humidity"));
main.setPressure(mainJsonObject.getString("pressure"));
main.setTemp(mainJsonObject.getString("temp"));
main.setTemp_max(mainJsonObject.getString("temp_max"));
main.setTemp_min(mainJsonObject.getString("temp_min"));
return main;
} else {
return null;
}
}

public static Wind getWindObjectFromJson(String json) throws JSONException {


JSONObject jsonObject = new JSONObject(json);
JSONObject windJson = jsonObject.getJSONObject("wind");
if(windJson != null) {
Wind wind = new Wind();
wind.setDeg(windJson.getString("deg"));
wind.setSpeed(windJson.getString("speed"));
return wind;

229
} else {
return null;
}
}

public static Clouds getCloudsObjectFromJson(String json) throws JSONException {


JSONObject jsonObject = new JSONObject(json);
JSONObject cloudsJson = jsonObject.getJSONObject("clouds");
if(cloudsJson != null) {
Clouds clouds = new Clouds();
clouds.setAll(cloudsJson.getString("all"));
return clouds;
} else {
return null;
}
}
}

Main.java:

public class Main {


private String humidity;

private String pressure;

private String temp_max;

private String temp_min;

private String temp;

public String getHumidity () {


return humidity;
}

public void setHumidity (String humidity) {


this.humidity = humidity;
}

public String getPressure () {


return pressure;
}

230
public void setPressure (String pressure) {
this.pressure = pressure;
}

public String getTemp_max () {


return temp_max;
}

public void setTemp_max (String temp_max) {


this.temp_max = temp_max;
}

public String getTemp_min () {


return temp_min;
}

public void setTemp_min (String temp_min) {


this.temp_min = temp_min;
}

public String getTemp () {


return temp;
}

public void setTemp (String temp) {


this.temp = temp;
}

@Override
public String toString() {
return "Main [humidity = "+humidity+", pressure = "+pressure+", temp_max =
"+temp_max+", temp_min = "+temp_min+", temp = "+temp+"]";
}
}

Rain.java:

public class Rain {

Sys.java:

231
public class Sys {
private String message;

private String id;

private String sunset;

private String sunrise;

private String type;

private String country;

public String getMessage () {


return message;
}

public void setMessage (String message) {


this.message = message;
}

public String getId () {


return id;
}

public void setId (String id) {


this.id = id;
}

public String getSunset () {


return sunset;
}

public void setSunset (String sunset) {


this.sunset = sunset;
}

public String getSunrise () {


return sunrise;
}

public void setSunrise (String sunrise) {

232
this.sunrise = sunrise;
}

public String getType () {


return type;
}

public void setType (String type) {


this.type = type;
}

public String getCountry () {


return country;
}

public void setCountry (String country) {


this.country = country;
}

@Override
public String toString() {
return "Sys [message = "+message+", id = "+id+", sunset = "+sunset+", sunrise
= "+sunrise+", type = "+type+", country = "+country+"]";
}
}

Weather.java:

public class Weather {


private String id;

private String icon;

private String description;

private String main;

public String getId () {


return id;
}

public void setId (String id) {

233
this.id = id;
}

public String getIcon () {


return icon;
}

public void setIcon (String icon) {


this.icon = icon;
}

public String getDescription () {


return description;
}

public void setDescription (String description) {


this.description = description;
}

public String getMain () {


return main;
}

public void setMain (String main) {


this.main = main;
}

@Override
public String toString() {
return "Weather [id = "+id+", icon = "+icon+", description = "+description+",
main = "+main+"]";
}
}

WeatherData.java:

import java.util.Arrays;

public class WeatherData {


private String id;

private String dt;

234
private Clouds clouds;

private Coord coord;

private Wind wind;

private String cod;

private String visibility;

private Sys sys;

private String name;

private String base;

private Weather[] weather;

//private Rain rain;

private Main main;

public String getId () {


return id;
}

public void setId (String id) {


this.id = id;
}

public String getDt () {


return dt;
}

public void setDt (String dt) {


this.dt = dt;
}

public Clouds getClouds () {


return clouds;
}

public void setClouds (Clouds clouds) {

235
this.clouds = clouds;
}

public Coord getCoord () {


return coord;
}

public void setCoord (Coord coord) {


this.coord = coord;
}

public Wind getWind () {


return wind;
}

public void setWind (Wind wind) {


this.wind = wind;
}

public String getCod () {


return cod;
}

public void setCod (String cod) {


this.cod = cod;
}

public String getVisibility () {


return visibility;
}

public void setVisibility (String visibility) {


this.visibility = visibility;
}

public Sys getSys () {


return sys;
}

public void setSys (Sys sys) {


this.sys = sys;
}

public String getName () {

236
return name;
}

public void setName (String name) {


this.name = name;
}

public String getBase () {


return base;
}

public void setBase (String base) {


this.base = base;
}

public Weather[] getWeather () {


return weather;
}

public void setWeather (Weather[] weather) {


this.weather = weather;
}

/*public Rain getRain () {


return rain;
}

public void setRain (Rain rain) {


this.rain = rain;
}*/

public Main getMain () {


return main;
}

public void setMain (Main main) {


this.main = main;
}

@Override
public String toString() {
return "WeatherData [id = "+id+", dt = "+dt+", clouds = "+clouds+", coord =
"+coord+", wind = "+wind+", cod = "+cod+", visibility = "+visibility+", sys = "+sys+",
name = "+name+", base = "+base+", weather = "+ Arrays.toString(weather) +", main =

237
"+main+"]";
}
}

WeatherDataBuilder.java:

import android.util.Log;

import org.json.JSONException;
import org.json.JSONObject;

public class WeatherDataBuilder {


private static final String LOG_TAG = "WeatherDownloader";
public static WeatherData buildWeatherData(String response) {
JSONObject jsonObject;
try {
jsonObject = new JSONObject(response);
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
return null;
}

WeatherData weatherData = new WeatherData();

Clouds cloudsData = null;


try {
cloudsData = JsonUtil.getCloudsObjectFromJson(response);
weatherData.setClouds(cloudsData);
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
weatherData.setClouds(cloudsData);
}

Coord coordData = null;


try {
coordData = JsonUtil.getCoordObjectFromJson(response);
weatherData.setCoord(coordData);
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
weatherData.setCoord(coordData);
}

238
Main mainData = null;
try {
mainData = JsonUtil.getMainObjectFromJson(response);
weatherData.setMain(mainData);
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
weatherData.setMain(mainData);
}

Sys sysData = null;


try {
sysData = JsonUtil.getSysObjectFromJson(response);
weatherData.setSys(sysData);
} catch (JSONException e) {
weatherData.setSys(sysData);
Log.e(LOG_TAG, e.getMessage());
}

Weather[] weatherObjectData = null;


try {
weatherObjectData = JsonUtil.getWeatherObjectFromJson(response);
weatherData.setWeather(weatherObjectData);
} catch (JSONException e) {
weatherData.setWeather(weatherObjectData);
Log.e(LOG_TAG, e.getMessage());
}

Wind windData = null;


try {
windData = JsonUtil.getWindObjectFromJson(response);
weatherData.setWind(windData);
} catch (JSONException e) {
weatherData.setWind(windData);
Log.e(LOG_TAG, e.getMessage());
}

try {
weatherData.setBase(jsonObject.getString("base"));
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());

239
weatherData.setBase(null);
}
try {
weatherData.setVisibility(jsonObject.getString("visibility"));
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
weatherData.setVisibility(null);
}
try {
weatherData.setDt(jsonObject.getString("dt"));
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
weatherData.setDt(null);

}
try {
weatherData.setId(jsonObject.getString("id"));
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
weatherData.setId(null);
}
try {
weatherData.setName(jsonObject.getString("name"));
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
weatherData.setName(null);
}
try {
weatherData.setCod(jsonObject.getString("cod"));
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage());
weatherData.setCod(null);
}

return weatherData;
}
}

WeatherDownloader.java:

import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;

240
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class WeatherDownloader {


public static final String LOG_TAG = "WeatherDownloader";
private WeatherDataDownloadListener downloadListener;
private Mode mode;

private final String BASE_URL = "api.openweathermap.org";


private final String DATA_PATH = "data";
private final String VERSION_PATH = "2.5";
private final String WEATHER_PATH = "weather";

public WeatherDownloader(WeatherDataDownloadListener downloadListener, Mode mode)


{
this.downloadListener = downloadListener;
this.mode = mode;
}

public void getCurrentWeatherData(String apiKey, String query) {


if(apiKey != null) {
try {
String url = buildUrl(apiKey, mode, query);
new DownloadCurrentData().execute(url);
} catch (Exception e) {
Log.e(LOG_TAG, e.getMessage());
}
} else {
Log.e(LOG_TAG, "ApiKey cannot be null");
}
}

private String buildUrl(String apiKey, Mode mode, String query) {


Uri.Builder builder = new Uri.Builder();
builder.scheme("http")
.authority(BASE_URL)

241
.appendPath(DATA_PATH)
.appendPath(VERSION_PATH)
.appendPath(WEATHER_PATH)
.appendQueryParameter("appid", apiKey);
switch (mode) {
case CITYNAME:
builder.appendQueryParameter("q", query);
return builder.build().toString();
case ZIPCODE:
builder.appendQueryParameter("zip", query);
return builder.build().toString();
case COORDINATES:
String[] coord = query.split(":");
builder.appendQueryParameter("lat", coord[0]);
builder.appendQueryParameter("lon", coord[1]);
return builder.build().toString();
case CITYID:
builder.appendQueryParameter("id", query);
return builder.build().toString();
default:
break;
}
return null;
}

public interface WeatherDataDownloadListener {


void onWeatherDownloadComplete(WeatherData data, Mode mode);
void onWeatherDownloadFailed(Exception e);
}

private class DownloadCurrentData extends AsyncTask<String, Void, String> {


@Override
protected String doInBackground(String... params) {
InputStream inputStream = null;
URL url;
HttpURLConnection httpURLConnection = null;
try {
url = new URL(params[0]);
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setConnectTimeout(15000); //15 sec
inputStream = new
BufferedInputStream(httpURLConnection.getInputStream());
return convertInputStreamToString(inputStream);

242
} catch (IOException e) {
Log.e(LOG_TAG, e.getMessage());
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (httpURLConnection != null) {
httpURLConnection.disconnect();
}
} catch (IOException e) {
Log.e(LOG_TAG, e.getMessage());
}
}
return null;
}

@Override
protected void onPostExecute(String response) {
if(response == null){
Log.e(LOG_TAG, "Response is null");
downloadListener.onWeatherDownloadComplete(null, mode);
} else {
try {

downloadListener.onWeatherDownloadComplete(WeatherDataBuilder.buildWeatherData(respons
e), mode);
} catch (Exception e) {
Log.e(LOG_TAG, "Invalid data");
downloadListener.onWeatherDownloadFailed(e);
}
}
}

private String convertInputStreamToString(InputStream inputStream) throws


IOException{
BufferedReader bufferedReader = new BufferedReader(new
InputStreamReader(inputStream));
String line;
String result = "";
while((line = bufferedReader.readLine()) != null) {
result += line;
}
inputStream.close();

243
return result;
}
}

public enum Mode {


ZIPCODE,
COORDINATES,
CITYID,
CITYNAME
}
}

WeatherUnits.java:

public class WeatherUnits {


public static Double convertToCelsius(String kelvin) throws NumberFormatException{
double inKelvin;
try {
inKelvin = Double.parseDouble(kelvin);
} catch (NumberFormatException e) {
throw e;
}
return inKelvin - 273.15;
}
public static Double convertToFahrenheit(String kelvin) throws
NumberFormatException{
double inKelvin;
try {
inKelvin = Double.parseDouble(kelvin);
} catch (NumberFormatException e) {
throw e;
}
return (inKelvin - 273.15)* 1.8000 + 32.00;
}
}

Wind.java:

public class Wind {


private String speed;

244
private String deg;

public String getSpeed () {


return speed;
}

public void setSpeed (String speed) {


this.speed = speed;
}

public String getDeg () {


return deg;
}

public void setDeg (String deg) {


this.deg = deg;
}

@Override
public String toString() {
return "Wind [speed = "+speed+", deg = "+deg+"]";
}
}

activity_main.xml:

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

<LinearLayout tools:context=".MainActivity"
android:orientation="vertical"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent">

245
<TextView android:layout_height="wrap_content"
android:layout_width="0dp"
android:text="Search by name"
android:layout_weight="1"/>

<EditText android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:inputType="textAutoCorrect"
android:hint="city name"
android:id="@+id/city_name"/>

</LinearLayout>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent">

<TextView android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/city_result"/>

<ProgressBar android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/city_progress"
android:indeterminate="true"
android:visibility="gone"/>

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Get Current Weather"
android:id="@+id/city_search"/>

</LinearLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Celsius" />

246
<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent">

<TextView android:layout_height="wrap_content"
android:layout_width="0dp"
android:text="Search by zip code"
android:layout_weight="1"/>

<EditText android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:inputType="number"
android:hint="zip code"
android:id="@+id/zip_code"/>

</LinearLayout>

<LinearLayout
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent">

<TextView android:layout_height="wrap_content"
android:layout_width="0dp"

android:layout_weight="1"
android:id="@+id/zip_code_result"/>

<ProgressBar android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/zip_code_progress"
android:indeterminate="true"
android:visibility="gone"/>

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Get Current Weather"
android:id="@+id/zip_code_search"
android:layout_gravity="end"/>

</LinearLayout>

247
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Fahrenheit" />

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent">

<TextView android:layout_height="wrap_content"
android:layout_width="0dp"
android:text="Search by coordinates"
android:layout_weight="1"/>

<EditText android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:inputType="text"
android:hint="lat:lon"
android:id="@+id/coordinates"/>

</LinearLayout>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent">

<TextView android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/coordinates_result"/>

<ProgressBar android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/coordinates_progress"
android:indeterminate="true"
android:visibility="gone"/>

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content"

248
android:text="Get Current Weather"
android:id="@+id/coordinates_search"
android:layout_gravity="end"/>

</LinearLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Kelvin" />

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent">

<TextView android:layout_height="wrap_content"
android:layout_width="0dp"
android:text="Search by City ID"
android:layout_weight="1"/>

<EditText android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:inputType="text"
android:hint="city id"
android:id="@+id/city_id"/>

</LinearLayout>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent">

<TextView android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/city_id_result"/>

<ProgressBar android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/city_id_progress"
android:indeterminate="true"

249
android:visibility="gone"/>

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Get Current Weather"
android:id="@+id/city_id_search"
android:layout_gravity="end"/>

</LinearLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Fahrenheit" />

</LinearLayout>

Create a resource file in values i.e., create key.xml and add the following code:

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


<resources>

<string name="weather_api_key">16f28aecfde1858cd9bda7e9444e54e8</string>

</resources>

In manifest file, you need to add the following permission code:

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

 How to create a compass application

Main activity.java:

import android.content.Context;
import android.hardware.GeomagneticField;
import android.hardware.Sensor;
import android.hardware.SensorEvent;

250
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements SensorEventListener{

public static final String NA = "N/A";


public static final String FIXED = "FIXED";
// location min time
private static final int LOCATION_MIN_TIME = 30 * 1000;
// location min distance
private static final int LOCATION_MIN_DISTANCE = 10;
// Gravity for accelerometer data
private float[] gravity = new float[3];
// magnetic data
private float[] geomagnetic = new float[3];
// Rotation data
private float[] rotation = new float[9];
// orientation (azimuth, pitch, roll)
private float[] orientation = new float[3];
// smoothed values
private float[] smoothed = new float[3];
// sensor manager
private SensorManager sensorManager;
// sensor gravity
private Sensor sensorGravity;
private Sensor sensorMagnetic;
private LocationManager locationManager;
private Location currentLocation;
private GeomagneticField geomagneticField;
private double bearing = 0;
private TextView textDirection, textLat, textLong;
private CompassView compassView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textDirection = (TextView) findViewById(R.id.text);

251
compassView = (CompassView) findViewById(R.id.compass);
// keep screen light on (wake lock light)
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

@Override
protected void onStart() {
super.onStart();
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensorGravity = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorMagnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

// listen to these sensors


sensorManager.registerListener(this, sensorGravity,
SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensorMagnetic,
SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
public void onSensorChanged(SensorEvent event) {
boolean accelOrMagnetic = false;

// get accelerometer data


if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
// we need to use a low pass filter to make data smoothed
smoothed = LowPassFilter.filter(event.values, gravity);
gravity[0] = smoothed[0];
gravity[1] = smoothed[1];
gravity[2] = smoothed[2];
accelOrMagnetic = true;

} else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {


smoothed = LowPassFilter.filter(event.values, geomagnetic);
geomagnetic[0] = smoothed[0];
geomagnetic[1] = smoothed[1];
geomagnetic[2] = smoothed[2];
accelOrMagnetic = true;

// get rotation matrix to get gravity and magnetic data

252
SensorManager.getRotationMatrix(rotation, null, gravity, geomagnetic);
// get bearing to target
SensorManager.getOrientation(rotation, orientation);
// east degrees of true North
bearing = orientation[0];
// convert from radians to degrees
bearing = Math.toDegrees(bearing);

// fix difference between true North and magnetical North


if (geomagneticField != null) {
bearing += geomagneticField.getDeclination();
}

// bearing must be in 0-360


if (bearing < 0) {
bearing += 360;
}

// update compass view


compassView.setBearing((float) bearing);

if (accelOrMagnetic) {
compassView.postInvalidate();
}

updateTextDirection(bearing); // display text direction on screen


}

private void updateTextDirection(double bearing) {


int range = (int) (bearing / (360f / 16f));
String dirTxt = "";

if (range == 15 || range == 0)
dirTxt = "N";
if (range == 1 || range == 2)
dirTxt = "NE";
if (range == 3 || range == 4)
dirTxt = "E";
if (range == 5 || range == 6)
dirTxt = "SE";
if (range == 7 || range == 8)
dirTxt = "S";
if (range == 9 || range == 10)
dirTxt = "SW";

253
if (range == 11 || range == 12)
dirTxt = "W";
if (range == 13 || range == 14)
dirTxt = "NW";

textDirection.setText("" + ((int) bearing) + ((char) 176) + " "


+ dirTxt); // char 176 ) = degrees ...
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD
&& accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
// manage fact that compass data are unreliable ...
// toast ? display on screen ?
}
}
}

CompassView.java:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class CompassView extends View {

private static final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);


private int width = 0;
private int height = 0;
private Matrix matrix; // to manage rotation of the compass view
private Bitmap bitmap;
private float bearing; // rotation angle to North

public CompassView(Context context) {


super(context);
initialize();
}

254
public CompassView(Context context, AttributeSet attr) {
super(context, attr);
initialize();
}

private void initialize() {


matrix = new Matrix();
// create bitmap for compass icon
bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.compass_icon);
}

public void setBearing(float b) {


bearing = b;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = MeasureSpec.getSize(widthMeasureSpec);
height = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(width, height);
}

@Override
protected void onDraw(Canvas canvas) {
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
int canvasWidth = canvas.getWidth();
int canvasHeight = canvas.getHeight();

if (bitmapWidth > canvasWidth || bitmapHeight > canvasHeight) {


// resize bitmap to fit in canvas
bitmap = Bitmap.createScaledBitmap(bitmap,
(int) (bitmapWidth * 0.85), (int) (bitmapHeight * 0.85), true);
}

// center
int bitmapX = bitmap.getWidth() / 2;
int bitmapY = bitmap.getHeight() / 2;
int parentX = width / 2;
int parentY = height / 2;
int centerX = parentX - bitmapX;

255
int centerY = parentY - bitmapY;

// calculate rotation angle


int rotation = (int) (360 - bearing);

// reset matrix
matrix.reset();
matrix.setRotate(rotation, bitmapX, bitmapY);
// center bitmap on canvas
matrix.postTranslate(centerX, centerY);
// draw bitmap
canvas.drawBitmap(bitmap, matrix, paint);
}

LowPassFilter.java:

public class LowPassFilter {


private static final float ALPHA =0.2f;
private LowPassFilter(){
}

public static float[]filter(float[]input, float[]output){


if (output==null)
return input;
for(int i=0; i<input.length;i++){
output[i] = output[i] + ALPHA + (input[i]-output[i]);

return output;

activity_main.xml:

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

256
android:layout_height="match_parent"
android:background="@drawable/background"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="manju.example.com.myapplicationcompass.MainActivity" >

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" >

<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="@dimen/dirSize" />
</RelativeLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:orientation="horizontal" >

</LinearLayout>

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<manju.example.com.myapplicationcompass.CompassView
android:id="@+id/compass"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true" />
</RelativeLayout>

</LinearLayout>

257
In manifest file – the following permissions should be added

<uses-feature
android:name ="android.hardware.sensor.accelerometer"
android:required ="true"/>
<uses-feature
android:name ="android.hardware.sensor.compass"
android:required ="true"/>

dimens.xml (in values folder):

<dimen name="dirSize">32dp</dimen>

 Download (via internet) on button click

Code in MainActivity.java:

import android.app.DownloadManager;
import android.app.DownloadManager.Query;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

private long enqueue;


private DownloadManager dm;

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

258
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
long downloadId = intent.getLongExtra(
DownloadManager.EXTRA_DOWNLOAD_ID, 0);
Query query = new Query();
query.setFilterById(enqueue);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c
.getColumnIndex(DownloadManager.COLUMN_STATUS);
}
}
}
};

registerReceiver(receiver, new IntentFilter(


DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}

public void onClick(View view) {


dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Request request = new Request(
Uri.parse("http://programmerguru.com/android-tutorial/wp-
content/uploads/2014/01/jai_ho.mp3"));
enqueue = dm.enqueue(request);

public void showDownload(View view) {


Intent i = new Intent();
i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
startActivity(i);
}
}

In manifest file – you need to add the following permission:

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

259
activity_main.xml:

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<Button android:text="Start Download" android:id="@+id/button1"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:onClick="onClick"
android:layout_gravity="center_horizontal"></Button>
<Button android:text="View Downloads" android:id="@+id/button2"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:onClick="showDownload"
android:layout_gravity="center_horizontal"></Button>
<ImageView android:layout_height="195dp"
android:src="@mipmap/ic_launcher"
android:layout_width="match_parent"></ImageView>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next"
android:id="@+id/button"
android:layout_gravity="center_horizontal" />
</LinearLayout>

 Tap to share something you wish

MainActivity.java:

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;

260
public class MainActivity extends AppCompatActivity {
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView) findViewById(R.id.imageView1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true; }
public void open(View view){
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Hello, How r u ");
startActivity(Intent.createChooser(shareIntent, "Share your thoughts"));
}
}

activity_main.xml:

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="98dp"
android:layout_marginTop="139dp"
android:onClick="open"
android:src="@drawable/ic_launcher" />

261
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="48dp"
android:text="@string/tap"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

String.xml:

<resources>
<string name="hello_world">Hello world!</string>
<string name="tap">Tap the button to share something</string>

</resources>

In manifest file – you need to add the following permission:

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

 Start, stop and play the Audio

Main Activity.java:

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.View;
import java.io.File;
import java.io.IOException;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;

262
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


private MediaRecorder myAudioRecorder;
private String outputFile = null;
private Button start,stop,play;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = (Button)findViewById(R.id.button1);
stop = (Button)findViewById(R.id.button2);
play = (Button)findViewById(R.id.button3);
stop.setEnabled(false);
play.setEnabled(false);
outputFile = Environment.getExternalStorageDirectory().
getAbsolutePath() + "/myrecording.3gp";;
myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
}
public void start(View view){
try {
myAudioRecorder.prepare();
myAudioRecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
start.setEnabled(false);
stop.setEnabled(true);
Toast.makeText(getApplicationContext(),
"Recording started", Toast.LENGTH_LONG).show();
}

263
public void stop(View view){
myAudioRecorder.stop();
myAudioRecorder.release();
myAudioRecorder = null;
stop.setEnabled(false);
play.setEnabled(true);
Toast.makeText(getApplicationContext(),
"Audio recorded successfully",
Toast.LENGTH_LONG).show(); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true; }
public void play(View view) throws IllegalArgumentException,
SecurityException, IllegalStateException, IOException{
MediaPlayer m = new MediaPlayer();
m.setDataSource(outputFile);
m.prepare();
m.start();
Toast.makeText(getApplicationContext(), "Playing audio",
Toast.LENGTH_LONG).show();
}
}

activity_main.xml:

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"

264
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="32dp"
android:text="@string/Recording"
android:textAppearance="?android:attr/textAppearanceMedium" />

<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="37dp"
android:scaleType="fitXY"
android:src="@android:drawable/presence_audio_online" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageView1"
android:layout_marginTop="67dp"
android:layout_toLeftOf="@+id/imageView1"
android:onClick="start"
android:text="@string/start" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_alignRight="@+id/textView1"
android:layout_marginRight="40dp"
android:onClick="stop"
android:text="@string/stop" />
<Button
android:id="@+id/button3"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true"
android:onClick="play"
android:text="@string/play" />
</RelativeLayout>

265
Permissions in manifest file:

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

String.xml:

<resources>
<string name="Recording">Android Audio Recording Application</string>
<string name="start">start</string>
<string name="stop">stop</string>
<string name="play">play</string>

</resources>

 Google Map

First you need to update Google play services

After Gradle build, open Google_maps_api.xml in layout folder and note Finger print and package
name i.e.,

Google_maps_api.xml

<!--
TODO: Before you run your application, you need a Google Maps API key.

266
To get one, follow this link, follow the directions and press "Create" at the end:

https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyTy
pe=CLIENT_SIDE_ANDROID&r=A0:4D:F6:41:65:95:F3:59:F7:E1:03:24:44:56:26:87:C8:ED:37:6C%3
Bcom.example.manju.myapplication

You can also add your credentials to an existing key, using this line:

A0:4D:F6:41:65:95:F3:59:F7:E1:03:24:44:56:26:87:C8:ED:37:6C;com.example.manju.myapplic
ation

Alternatively, follow the directions here:


https://developers.google.com/maps/documentation/android/start#get-key

Once you have your key (it starts with "AIza"), replace the "google_maps_key"
string in this file.
-->

And after noting finger print (A0:4D:F6:41:65:95:F3:59:F7:E1:03:24:44:56:26:87:C8:ED:37:6C) and


package name (com.example.manju.myapplication)— Go to Google Developer Console:

https://code.google.com/apis/console/?pli=1

Then go to CREATE PROJECT → New Project (enter project name) → create → Under API Manager → go to
Credentials → APIs Credentials → API key → Android key → Add package name and finger print → fill package name
and finger print → create → Note down your API key

After noting down the API key — you need to enter it in the Manifest.xml file as follows:

<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyDWOTqYHHYlrziUPoF4IshFKNxKxlo91PM" />

And you need to add the following permissions to your manifest file:

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


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

267
SCROLL VIEW

<ScrollView

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

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<Button

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 1" />

<Button

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 2"

/>

268
<Button

android:id="@+id/button3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 3"

/>

<Button

android:id="@+id/button4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 4"

/>

<Button

android:id="@+id/button5"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 5"

/>

269
<Button

android:id="@+id/button6"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 6"

/>

<Button

android:id="@+id/button7"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 7"

/>

<Button

android:id="@+id/button8"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 8"

/>

270
<Button

android:id="@+id/button9"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 9"

/>

<Button

android:id="@+id/button10"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:layout_marginLeft="20dp"

android:text="Button 10"

/>

</LinearLayout>

</ScrollView>

 WEB VIEW

Code in MainActivity.java:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

271
import android.webkit.WebSettings;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {


private WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.activity_main_webview);
// Enable Javascript
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.loadUrl("http://google.com/");

}
}

activity_main.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
tools:ignore="MergeRootFrame">

<WebView
android:id="@+id/activity_main_webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>

Permission you need to add to your manifest.xml file:

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

 HOW TO CREATE A SIMPLE GAME

272
MainActivity.java:

import android.content.Intent;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

public class MainActivity extends AppCompatActivity {

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

public void play(View v)

Intent i=new Intent(this,Game.class);

startActivity(i);

public void highscore(View v)

Intent i=new Intent(this,Highscore.class);

startActivity(i);

273
public void setting(View v)

Intent i=new Intent(this,Setting.class);

startActivity(i);

public void exit(View v)

System.exit(0);

Game.java:

import android.annotation.SuppressLint;

import android.app.Activity;

import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Paint.Align;

import android.media.MediaPlayer;

import android.os.Bundle;

274
import android.telephony.PhoneStateListener;

import android.telephony.TelephonyManager;

import android.view.Display;

import android.view.MotionEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.Window;

import android.view.WindowManager;

public class Game extends Activity {

MediaPlayer mp1,jump,takecoin;

gameloop gameLoopThread;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//phone state

TelephonyManager TelephonyMgr = (TelephonyManager)


getSystemService(Context.TELEPHONY_SERVICE);

TelephonyMgr.listen(new TeleListener(),PhoneStateListener.LISTEN_CALL_STATE);

//for no title

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(new GameView(this));

public class GameView extends SurfaceView{

Bitmap bmp,pause;

275
Bitmap background,kinfe,note1,powerimg,note2;

Bitmap run1;

Bitmap run2;

Bitmap run3;

Bitmap coin;

Bitmap exit;

private SurfaceHolder holder;

private int x = 0,y=0,z=0,delay=0,getx,gety,sound=1;

int show=0,sx,sy;

int cspeed=0,kspeed=0,gameover=0;

int score=0,health=100,reset=0;

int pausecount=0,volume,power=0,powerrun=0,shieldrun=0;

@SuppressWarnings("deprecation")

@SuppressLint("NewApi")

public GameView(Context context)

super(context);

gameLoopThread = new gameloop(this);

holder = getHolder();

holder.addCallback(new SurfaceHolder.Callback() {

@SuppressWarnings("deprecation")

@Override

276
public void surfaceDestroyed(SurfaceHolder holder)

//for stoping the game

gameLoopThread.setRunning(false);

gameLoopThread.getThreadGroup().interrupt();

@SuppressLint("WrongCall")

@Override

public void surfaceCreated(SurfaceHolder holder)

gameLoopThread.setRunning(true);

gameLoopThread.start();

@Override

public void surfaceChanged(SurfaceHolder holder, int format,int width,


int height)

});

//getting the screen size

Display display = getWindowManager().getDefaultDisplay();

sx = display.getWidth();

sy = display.getHeight();;

277
cspeed=sx/2;

kspeed=sx/2;

powerrun=(3*sx/4);

shieldrun=sx/8;

background = BitmapFactory.decodeResource(getResources(),
R.drawable.back);

run1=BitmapFactory.decodeResource(getResources(), R.drawable.run1);

run2=BitmapFactory.decodeResource(getResources(), R.drawable.run2);

run3=BitmapFactory.decodeResource(getResources(), R.drawable.run3);

coin=BitmapFactory.decodeResource(getResources(), R.drawable.coin);

exit=BitmapFactory.decodeResource(getResources(), R.drawable.exit);

kinfe=BitmapFactory.decodeResource(getResources(), R.drawable.kinfe);

note1=BitmapFactory.decodeResource(getResources(), R.drawable.note1);

pause=BitmapFactory.decodeResource(getResources(), R.drawable.pause);

powerimg=BitmapFactory.decodeResource(getResources(), R.drawable.power);

note2=BitmapFactory.decodeResource(getResources(), R.drawable.note2);

exit=Bitmap.createScaledBitmap(exit, 25,25, true);

pause=Bitmap.createScaledBitmap(pause, 25,25, true);

powerimg=Bitmap.createScaledBitmap(powerimg, 25,25, true);

note2=Bitmap.createScaledBitmap(note2, sx,sy, true);

run1=Bitmap.createScaledBitmap(run1, sx/9,sy/7, true);

run2=Bitmap.createScaledBitmap(run2, sx/9,sy/7, true);

run3=Bitmap.createScaledBitmap(run3, sx/9,sy/7, true);

coin=Bitmap.createScaledBitmap(coin, sx/16,sy/24, true);

background=Bitmap.createScaledBitmap(background, 2*sx,sy, true);

//health dec

278
note1=Bitmap.createScaledBitmap(note1, sx,sy, true);

mp1=MediaPlayer.create(Game.this,R.raw.game);

jump=MediaPlayer.create(Game.this,R.raw.jump);

takecoin=MediaPlayer.create(Game.this,R.raw.cointake);

// on touch method

@Override

public boolean onTouchEvent(MotionEvent event) {

if(event.getAction()==MotionEvent.ACTION_DOWN)

show=1;

getx=(int) event.getX();

gety=(int) event.getY();

//exit

if(getx<25&&gety<25)

//high score

SharedPreferences pref =
getApplicationContext().getSharedPreferences("higher", MODE_PRIVATE);

Editor editor = pref.edit();

editor.putInt("score", score);

editor.commit();

279
System.exit(0);

// restart game

if(getx>91&&gety<25)

if(health<=0)

gameLoopThread.setPause(0);

health=100;

score=0;

//pause game

if((getx>(sx-25)&&gety<25&&pausecount==0))

gameLoopThread.setPause(1);

mp1.stop();

pausecount=1;

else if(getx>(sx-25)&&gety<25&&pausecount==1)

gameLoopThread.setPause(0);

mp1.start();

pausecount=0;

280
}

return true;

@SuppressLint("WrongCall")

@Override

protected void onDraw(Canvas canvas)

//volume

SharedPreferences pref =
getApplicationContext().getSharedPreferences("higher", MODE_PRIVATE);

Editor editor = pref.edit();

volume=pref.getInt("vloume", 0);

if(volume==0)

sound=0;

canvas.drawColor(Color.BLACK);

//background moving

z=z-10;

if(z==-sx)

281
{

z=0;

canvas.drawBitmap(background, z, 0, null);

else

canvas.drawBitmap(background, z, 0, null);

//running player

x+=5;

if(x==20)

x=5;

if(show==0)

if(x%2==0)

canvas.drawBitmap(run3, sx/16, 15*sy/18, null);

else

282
canvas.drawBitmap(run1, sx/16, 15*sy/18, null);

//kinfe hit

if(kspeed==20)

kspeed=sx;

health-=25;

canvas.drawBitmap(note1, 0, 0, null);

//power take

if(powerrun==30)

powerrun=3*sx;

health+=25;

canvas.drawBitmap(note2, 0, 0, null);

//power

powerrun=powerrun-10;

canvas.drawBitmap(powerimg, powerrun, 15*sy/18, null);

if(powerrun<0)

283
powerrun=3*sx/4;

//kinfe

kspeed=kspeed-20;

canvas.drawBitmap(kinfe, kspeed, 15*sy/18, null);

if(kspeed<0)

kspeed=sx;

// for jump

if(show==1)

if(sound==1)

jump.start();

canvas.drawBitmap(run2, sx/16, 3*sy/4, null);

//score

if(cspeed<=sx/8&&cspeed>=sx/16)

if(sound==1)

takecoin.start();

284
}

cspeed=sx/2;

score+=10;

// jump-hold

delay+=1;

if(delay==3)

show=0;

delay=0;

//for coins

cspeed=cspeed-5;

if(cspeed==-sx/2)

cspeed=sx/2;

canvas.drawBitmap(coin, cspeed, 3*sy/4, null);

else

285
canvas.drawBitmap(coin, cspeed, 3*sy/4, null);

//score

Paint paint = new Paint();

paint.setColor(Color.BLUE);

paint.setAntiAlias(true);

paint.setFakeBoldText(true);

paint.setTextSize(15);

paint.setTextAlign(Align.LEFT);

canvas.drawText("Score :"+score, 3*sx/4, 20, paint);

//exit

canvas.drawBitmap(exit, 0, 0, null);

if(sound==1)

mp1.start();

mp1.setLooping(true);

else

mp1.stop();

//health

Paint myPaint = new Paint();

myPaint.setColor(Color.RED);

myPaint.setStrokeWidth(10);

myPaint.setAntiAlias(true);

286
myPaint.setFakeBoldText(true);

canvas.drawText("Health :"+health, 0, (sy/8)-5, myPaint);

canvas.drawRect(0, sy/8, health, sy/8+10, myPaint);

//game over

if(health<=0)

gameover=1;

mp1.stop();

//high score

editor.putInt("score", score);

editor.commit();

canvas.drawText("GAMEOVER OVER", sx/2, sy/2, myPaint);

canvas.drawText("YOUR SCORE : "+score, sx/2, sy/4, myPaint);

canvas.drawText("Restart", 91, 25, myPaint);

gameLoopThread.setPause(1);

canvas.drawBitmap(background, sx, sy, null);

// restart

if(reset==1)

gameLoopThread.setPause(0);

health=100;

score=0;

287
}

canvas.drawBitmap(pause, (sx-25), 0, null);

//phone state

public class TeleListener extends PhoneStateListener

public void onCallStateChanged(int state,String incomingNumber)

if(state==TelephonyManager.CALL_STATE_RINGING)

mp1.stop();

System.exit(0);

gameloop.java:

import android.annotation.SuppressLint;

import android.graphics.Canvas;

288
public class gameloop extends Thread {

private Game.GameView view;

static final long FPS = 10;

private boolean running = false;

boolean isPaused;

public gameloop(Game.GameView view) {

this.view = view;

public void setRunning(boolean run) {

running = run;

public void setPause(int i)

synchronized (view.getHolder())

if(i==0)

isPaused=false;

if(i==1)

289
isPaused = true;

@SuppressLint("WrongCall")

@Override

public void run() {

long ticksPS = 100;

long startTime = 0;

long sleepTime;

while (running) {

//pause and resume

if (isPaused)

try

this.sleep(50);

catch (InterruptedException e)

e.printStackTrace();

290
else

Canvas c = null;

startTime = System.currentTimeMillis();

try {

c = view.getHolder().lockCanvas();

synchronized (view.getHolder())

view.onDraw(c);

finally

if (c != null)

view.getHolder().unlockCanvasAndPost(c);

sleepTime = ticksPS-(System.currentTimeMillis() - startTime);

try {

if (sleepTime > 0)

291
sleep(sleepTime);

else

sleep(10);

catch (Exception e) {}

Highscore.java:

import android.R.string;

import android.os.Bundle;

import android.app.Activity;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.view.Menu;

import android.widget.TextView;

public class Highscore extends Activity {

TextView t1;

int score,hscore;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

292
setContentView(R.layout.activity_highscore);

SharedPreferences pref =
getApplicationContext().getSharedPreferences("higher", MODE_PRIVATE);

Editor editor = pref.edit();

score=pref.getInt("score", 0);

hscore=pref.getInt("hscore", 0);

if(score>hscore)

editor.putInt("hscore", score);

editor.commit();

hscore=pref.getInt("hscore", 0);

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

t1.setText("Highscore :"+hscore);

Setting.java:

import android.os.Bundle;

import android.app.Activity;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.view.Menu;

293
import android.view.View;

import android.widget.CheckBox;

import android.widget.Toast;

public class Setting extends Activity {

CheckBox ch1;

int volume;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_setting);

ch1=(CheckBox) findViewById(R.id.checkBox1);

SharedPreferences pref =
getApplicationContext().getSharedPreferences("higher", MODE_PRIVATE);

Editor editor = pref.edit();

volume=pref.getInt("vloume", 0);

if(volume==1)

ch1.setChecked(true);

public void volume(View v) {

ch1 = (CheckBox)v;

SharedPreferences pref =
getApplicationContext().getSharedPreferences("higher", MODE_PRIVATE);

294
Editor editor = pref.edit();

if(ch1.isChecked())

editor.putInt("vloume", 1);

editor.commit();

Toast.makeText(this,"volume on", Toast.LENGTH_LONG).show();

else

editor.putInt("vloume", 0);

editor.commit();

@Override

public boolean onCreateOptionsMenu(Menu menu) {

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

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

return true;

LAYOUT FILES:

activity_main.xml:

<?xml version="1.0"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

295
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:background="@drawable/back"><Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/button2"
android:layout_below="@+id/button4" android:layout_centerHorizontal="true"
android:layout_marginTop="23dp" android:onClick="setting"
android:text="@string/set"/><Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/button3"
android:layout_below="@+id/button2" android:layout_centerHorizontal="true"
android:layout_marginTop="16dp" android:onClick="exit"
android:text="@string/ex"/><Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/button4"
android:layout_below="@+id/button1" android:layout_centerHorizontal="true"
android:layout_marginTop="19dp" android:onClick="highscore"
android:text="@string/score"/><Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/button1"
android:layout_marginTop="43dp" android:onClick="play" android:text="@string/play"
android:layout_alignLeft="@+id/button4"
android:layout_alignParentTop="true"/></RelativeLayout>

activity_game.xml:

<?xml version="1.0"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Game">
</RelativeLayout>

activity_highscore.xml:

<?xml version="1.0"?>
<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"

296
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Highscore"
android:background="@drawable/back"><TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/textView1"
android:layout_alignParentLeft="true" android:layout_alignParentTop="true"
android:layout_marginLeft="20dp" android:layout_marginTop="55dp"
android:text="@string/hs"
android:textAppearance="?android:attr/textAppearanceLarge"/></RelativeLayout>

activity_setting.xml:

<?xml version="1.0"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Setting"
android:background="@drawable/back"><CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/checkBox1"
android:layout_alignParentLeft="true" android:layout_alignParentTop="true"
android:layout_marginTop="45dp" android:text="@string/vol"
android:onClick="volume"/></RelativeLayout>

Menu

highscore.xml main.xml menu_main.xml setting.xml about.xml game.xml

drawable folder

297
raw folder:

game.mp3 cointake.mp3 jump.mp3

strings.xml:

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


<resources>

<string name="hello_world">Hello world!</string><string


name="title_activity_about">MainActivity</string><string
name="title_activity_game">Game</string><string name="play">Play
Now...</string><string name="set">Setting</string><string
name="ex">Exit</string><string name="title_activity_setting">Setting</string><string
name="vol">Volume</string><string name="test">test</string><string
name="title_activity_highscore">Highscore</string><string name="hs">Highscore
:</string><string name="score">HighScore</string></resources>

Code in manifest.xml file:

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


<manifest package="manju.example.com.game"
xmlns:android="http://schemas.android.com/apk/res/android"><uses-permission
android:name="android.permission.READ_PHONE_STATE"/><application
android:theme="@style/AppTheme" android:supportsRtl="true"

298
android:label="@string/app_name" android:icon="@mipmap/ic_launcher"
android:allowBackup="true"><activity android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar" android:label="@string/app_name"><intent-
filter><action android:name="android.intent.action.MAIN"/><category
android:name="android.intent.category.LAUNCHER"/></intent-filter></activity><activity
android:name="manju.example.com.game.Game" android:label="@string/title_activity_game"
android:screenOrientation="landscape"> </activity><activity
android:name="manju.example.com.game.Setting"
android:label="@string/title_activity_setting" android:screenOrientation="portrait">
</activity><activity android:name="manju.example.com.game.Highscore"
android:label="@string/title_activity_highscore"> </activity></application></manifest>

After installing android studio into your system (say computer or laptop) —and after installation,
when you open the android studio to create some project / application – you usually observe an
error stating that: junit cannot be resolved. In order to solve this error, you need to go to C drive → and
under C drive – you need to go to users → and under users – you need to go to manju folder → and
under manju folder – you need to go to AndroidStudioProjects→ and under AndroidStudioProjects → you
need to open Application folder → and you need to go to app folder → and under app folder → you need
to open libs folder → and in libs folder – you need to place junit (executable jar file

junit.jar

– which can be downloaded on internet). And you need to open android studio → and you need to go to
file → project structure → app → dependencies (if you click on it) – a window:

299
Choose library dependency will be opened and in that window you need to choose m junit:junit:4.12 and
press ok and that window will be disappeared and gradle build starts and your problem will be resolved.

 Battery temperature

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

TemperatureReceiver receiver=new TemperatureReceiver(this);


TextView tempDisplay=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tempDisplay=(TextView) findViewById(R.id.tempDisplay);

IntentFilter localIntentFilter = new IntentFilter();


localIntentFilter.addAction("android.intent.action.BATTERY_CHANGED");
registerReceiver(receiver, localIntentFilter);
}

TemperatureReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class TemperatureReceiver extends BroadcastReceiver{

300
MainActivity activity=null;
public TemperatureReceiver(MainActivity mainActivity) {
activity=mainActivity;
}
@Override
public void onReceive(Context arg0, Intent arg1) {
activity.tempDisplay.setText(arg1.getIntExtra("temperature", 0)/10.0D+" ");
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Temperature " android:layout_alignParentLeft="true"
android:id="@+id/textView1"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="0" android:id="@+id/tempDisplay" android:layout_centerHorizontal="true"
android:layout_alignBottom="@+id/textView1"/>

</RelativeLayout>

 Web Search engine

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Menu;

301
import android.view.MenuItem;

import android.app.SearchManager;
import android.content.Intent;

import android.view.View.OnClickListener;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//attach an instance of HandleClick to the Button
findViewById(R.id.imageView1).setOnClickListener(new HandleClick());
}
private class HandleClick implements OnClickListener{
public void onClick(View arg0) {
String searchFor=((EditText)
findViewById(R.id.editText1)).getText().toString();
Intent viewSearch = new Intent(Intent.ACTION_WEB_SEARCH);
viewSearch.putExtra(SearchManager.QUERY, searchFor);
startActivity(viewSearch);
}
}
}

activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="fill_parent"


android:textSize="20dp" android:text="@string/prompt"/>

<EditText android:layout_height="wrap_content" android:layout_width="fill_parent"


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

<requestFocus/>

302
</EditText>

<ImageView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/imageView1"
android:src="@drawable/magglass" android:background="@drawable/button_background"/>

</LinearLayout>

Drawable folder

button_background.xml

Android manifest.xml

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

 Display of WEBSITE link on layout file

Code in layout file:

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:textStyle="bold" android:text="http://androidSRC.net/" android:autoLink="web"
android:layout_marginBottom="20dp" android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"/>

Android manifest.xml

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

 SIM Number display

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

303
import android.view.View;
import android.content.Intent;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onButtonClick(View v) {


if (v.getId() == R.id.Bdisplay)

{
Intent i = new Intent(MainActivity.this, Sendmsg.class);
startActivity(i);
}

}
}

Sendmsg.java

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.telephony.TelephonyManager;
import android.widget.TextView;
import android.widget.Toast;

public class Sendmsg extends Activity {

SharedPreferences sp=null;
SharedPreferences.Editor edit;
TelephonyManager telemananger=null;
TelephonyManager telemanager2=null;
String anothervar=null;
String var=null;
@Override

304
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sendms);
telemananger = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
anothervar = telemananger.getSimSerialNumber();

sp=getSharedPreferences("share1",Activity.MODE_APPEND);
edit=sp.edit();

var=sp.getString("sim_no",null);
if(var==null)
{

sp.edit().putString("sim_no",anothervar).commit();
var=sp.getString("sim_no",null);
TextView tv=(TextView)findViewById(R.id.textView2);
tv.setText(String.valueOf(anothervar));
}
else
Toast.makeText(this, "hi..", Toast.LENGTH_LONG).show();
TextView tv=(TextView)findViewById(R.id.textView4);
tv.setText(String.valueOf("this is the value of shared prefernces.......
="+var));

Comp.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class Comp extends BroadcastReceiver {


@Override
public void onReceive(Context c, Intent i)
{

Intent a=new Intent(c,Sendmsg.class);


a.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
c.startActivity(a);
}

305
}

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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1"
android:id="@+id/Bdisplay"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="onButtonClick" />

</RelativeLayout>

sendms.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sim Number:" />

<TextView

306
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Sim Number:"
android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />

</LinearLayout>

Android manifest.xml

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

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

<activity android:name=".Sendmsg"/>

<receiver android:name=".Comp"/>

 Popup window

MainActivity.java

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;

307
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupWindow;

public class MainActivity extends AppCompatActivity {


Button btnClosePopup;
Button btnCreatePopup;

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnCreatePopup = (Button) findViewById(R.id.button1);
btnCreatePopup.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
initiatePopupWindow();
}
});

private PopupWindow pwindo;

private void initiatePopupWindow() {


try {
// We need to get the instance of the LayoutInflater
LayoutInflater inflater = (LayoutInflater) MainActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.screen_popup,
(ViewGroup) findViewById(R.id.popup_element));
pwindo = new PopupWindow(layout, 300, 370, true);
pwindo.showAtLocation(layout, Gravity.CENTER, 0, 0);

btnClosePopup = (Button) layout.findViewById(R.id.btn_close_popup);


btnClosePopup.setOnClickListener(cancel_button_click_listener);

} catch (Exception e) {

308
e.printStackTrace();
}
}

private OnClickListener cancel_button_click_listener = new OnClickListener() {


public void onClick(View v) {
pwindo.dismiss();

}
};

activity_main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="1">

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />

</LinearLayout>

screen_popup.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/popup_element"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#444444"

309
android:orientation="vertical"
android:padding="10sp" >

<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"></TableLayout>

<Button
android:layout_marginTop="50dp"
android:id="@+id/btn_close_popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Close" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1"
android:id="@+id/Bdisplay"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="onButtonClick"
android:layout_gravity="center_horizontal" />

</LinearLayout>

 LIST VIEW

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

310
setContentView(R.layout.activity_main);
ListView list = (ListView) findViewById(R.id.list1);
String[] days = { "Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday","Sunday", "Monday", "Tuesday",
"Wednesday",
"Thursday", "Friday", "Saturday"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, days);
list.setAdapter(adapter);
}
}

activity_main.xml

<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" >
<ListView
android:id="@+id/list1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</RelativeLayout>

 AGE CALCULATOR

MainActivity.java

import java.util.Calendar;
import java.util.Timer;
import android.os.Bundle;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

311
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{


private Button btnStart;
static final int DATE_START_DIALOG_ID = 0;
private int startYear=1970;
private int startMonth=6;
private int startDay=15;
private AgeCalculation age = null;
private TextView currentDate;
private TextView birthDate;
private TextView result;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
age=new AgeCalculation();
currentDate=(TextView) findViewById(R.id.textView1);
currentDate.setText("Current Date(DD/MM/YY) : "+age.getCurrentDate());
birthDate=(TextView) findViewById(R.id.textView2);
result=(TextView) findViewById(R.id.textView3);
btnStart=(Button) findViewById(R.id.button1);
btnStart.setOnClickListener(this);

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_START_DIALOG_ID:
return new DatePickerDialog(this,
mDateSetListener,
startYear, startMonth, startDay);
}
return null;
}

private DatePickerDialog.OnDateSetListener mDateSetListener


= new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
startYear=selectedYear;
startMonth=selectedMonth;
startDay=selectedDay;

312
age.setDateOfBirth(startYear, startMonth, startDay);
birthDate.setText("Date of Birth(DD/MM/YY):
"+selectedDay+":"+(startMonth+1)+":"+startYear);
calculateAge();
}
};
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
showDialog(DATE_START_DIALOG_ID);
break;

default:
break;
}
}
private void calculateAge()
{
age.calcualteYear();
age.calcualteMonth();
age.calcualteDay();
Toast.makeText(getBaseContext(), "click the resulted
button"+age.getResult() , Toast.LENGTH_SHORT).show();
result.setText("AGE (DD/MM/YY) :"+age.getResult());
}
}

AgeCalculation.java

import java.util.Calendar;
import java.util.Date;

public class AgeCalculation {


private int startYear;
private int startMonth;
private int startDay;
private int endYear;
private int endMonth;
private int endDay;
private int resYear;
private int resMonth;

313
private int resDay;
private Calendar start;
private Calendar end;
public String getCurrentDate()
{
end=Calendar.getInstance();
endYear=end.get(Calendar.YEAR);
endMonth=end.get(Calendar.MONTH);
endMonth++;
endDay=end.get(Calendar.DAY_OF_MONTH);
return endDay+":"+endMonth+":"+endYear;
}
public void setDateOfBirth(int sYear, int sMonth, int sDay)
{
startYear=sYear;
startMonth=sMonth;
startMonth++;
startDay=sDay;

}
public void calcualteYear()
{
resYear=endYear-startYear;

public void calcualteMonth()


{
if(endMonth>=startMonth)
{
resMonth= endMonth-startMonth;
}
else
{
resMonth=endMonth-startMonth;
resMonth=12+resMonth;
resYear--;
}

}
public void calcualteDay()
{

if(endDay>=startDay)

314
{
resDay= endDay-startDay;
}
else
{
resDay=endDay-startDay;
resDay=30+resDay;
if(resMonth==0)
{
resMonth=11;
resYear--;
}
else
{
resMonth--;
}

}
}

public String getResult()


{
return resDay+":"+resMonth+":"+resYear;
}
public long getSeconde()
{
start=Calendar.getInstance();
start.set(Calendar.YEAR, startYear);
start.set(Calendar.MONTH, startMonth);
start.set(Calendar.DAY_OF_MONTH, startDay);
start.set(Calendar.HOUR, 12);
start.set(Calendar.MINUTE, 30);
start.set(Calendar.SECOND, 30);
start.set(Calendar.MILLISECOND, 30);
long now=end.getTimeInMillis();
long old=start.getTimeInMillis();
long diff=old-now;
return diff/1000;
}
}

activity_main.xml

315
<?xml version="1.0"?>

<RelativeLayout android:layout_height="match_parent"
android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Date Of Birth" android:layout_alignParentTop="true"
android:layout_alignParentRight="true" android:layout_alignParentLeft="true"
android:id="@+id/button1"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Current Date" android:layout_alignParentLeft="true"
android:id="@+id/textView1" android:layout_marginTop="23dp"
android:layout_below="@+id/button1"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Birth Date" android:layout_alignParentLeft="true"
android:id="@+id/textView2" android:layout_marginTop="18dp"
android:layout_below="@+id/textView1"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Result" android:layout_alignParentLeft="true"
android:id="@+id/textView3" android:layout_marginTop="16dp"
android:layout_below="@+id/textView2"/>

</RelativeLayout>

 Send sms

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

316
import android.widget.Toast;
import android.view.View;
import android.view.Menu;

public class MainActivity extends AppCompatActivity {

Button btnSend;
EditText txtPhoneNo;
EditText txtSMS;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);

btnSend=(Button) findViewById(R.id.buttonSend);
txtPhoneNo=(EditText) findViewById(R.id.editTextPhoneNo);
txtSMS=(EditText) findViewById(R.id.editTextSMS);

btnSend.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String phoneNo=txtPhoneNo.getText().toString();
String SMS=txtSMS.getText().toString();

try {
SmsManager smsManager=SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo, null, SMS, null, null);
Toast.makeText(getApplicationContext(),"SMS
Sent!...",Toast.LENGTH_LONG).show();

} catch (Exception e) {
Toast.makeText(getApplicationContext(), "SMS faild, please try
again later!",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
});

317
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

activity_main.xml

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

<LinearLayout
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/linearLayout1"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/textViewPhoneNo"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Enter Phone Number : "/>

<EditText android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/editTextPhoneNo"
android:phoneNumber="true"> </EditText>

<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/textViewSMS"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Enter SMS Message : "/>

<EditText
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/editTextSMS"

318
android:gravity="top"
android:lines="5"
android:inputType="textMultiLine"/>

<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/buttonSend"
android:text="Send"/>

</LinearLayout>

Android manifest.xml

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

 Flash light (torch)

MainActivity.java

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;

public class MainActivity extends AppCompatActivity {

private ImageButton btnSwitch;

private Camera camera;


private boolean isFlashOn;
private boolean hasFlash;

319
private Parameters params;
private MediaPlayer mp;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);

// flash switch button


btnSwitch = (ImageButton) findViewById(R.id.btnSwitch);

/*
* First check if device is supporting flashlight or not
*/
hasFlash = getApplicationContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

if (!hasFlash) {
// device doesn't support flash
// Show alert message and close the application
AlertDialog alert = new AlertDialog.Builder(MainActivity.this)
.create();
alert.setTitle("Error");
alert.setMessage("Sorry, your device doesn't support flash light!");
alert.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// closing the application
finish();
}
});
alert.show();
return;
}

// get the camera


getCamera();

// displaying button image


toggleButtonImage();

/*
* Switch button click event to toggle flash on/off
*/
btnSwitch.setOnClickListener(new View.OnClickListener() {

320
@Override
public void onClick(View v) {
if (isFlashOn) {
// turn off flash
turnOffFlash();
} else {
// turn on flash
turnOnFlash();
}
}
});
}

/*
* Get the camera
*/
private void getCamera() {
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
} catch (RuntimeException e) {
Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
}
}
}

/*
* Turning On flash
*/
private void turnOnFlash() {
if (!isFlashOn) {
if (camera == null || params == null) {
return;
}
// play sound
playSound();

params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;

321
// changing button/switch image
toggleButtonImage();
}

/*
* Turning Off flash
*/
private void turnOffFlash() {
if (isFlashOn) {
if (camera == null || params == null) {
return;
}
// play sound
playSound();

params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
isFlashOn = false;

// changing button/switch image


toggleButtonImage();
}
}

/*
* Playing sound will play button toggle sound on flash on / off
*/
private void playSound() {
if (isFlashOn) {
mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_off);
} else {
mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_on);
}
mp.setOnCompletionListener(new OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();

322
}
});
mp.start();
}

/*
* Toggle switch button images changing image states to on / off
*/
private void toggleButtonImage() {
if (isFlashOn) {
btnSwitch.setImageResource(R.drawable.btn_switch_on);
} else {
btnSwitch.setImageResource(R.drawable.btn_switch_off);
}
}

@Override
protected void onDestroy() {
super.onDestroy();
}

@Override
protected void onPause() {
super.onPause();

// on pause turn off the flash


turnOffFlash();
}

@Override
protected void onRestart() {
super.onRestart();
}

@Override
protected void onResume() {
super.onResume();

// on resume turn on the flash


if (hasFlash)
turnOnFlash();
}

@Override

323
protected void onStart() {
super.onStart();

// on starting the app get the camera params


getCamera();
}

@Override
protected void onStop() {
super.onStop();

// on stop release the camera


if (camera != null) {
camera.release();
camera = null;
}
}

activity_main.xml

<?xml version="1.0"?>

<LinearLayout tools:context=".MainActivity" android:orientation="vertical"


android:gravity="center" android:background="@android:color/darker_gray"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<ImageButton android:background="@null" android:layout_height="wrap_content"


android:layout_width="wrap_content" android:src="@drawable/btn_switch_on"
android:contentDescription="@null" android:id="@+id/btnSwitch"/>

</LinearLayout>

Android manifest.xml

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

<uses-feature android:name="android.hardware.camera"/>

324
Drawable folder

Raw folder

light_switch_on.mp3 light_switch_off.mp3

 Bluetooth activation

MainActivity.java

import android.os.Bundle;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

public class MainActivity extends AppCompatActivity {

BluetoothAdapter bt = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initialize bluetooth adapter object
bt = BluetoothAdapter.getDefaultAdapter();

325
}

//this method will call when we click on button


public void action(View v) {
//if bluetooth not found
if (bt == null) {
Toast.makeText(this, "No bluetooth found.." + bt,
Toast.LENGTH_LONG).show();
} else {
if (!bt.isEnabled()) {
/*****first method to enable bluetooth*****/
//enable bluetooth without pop-up any dialog box
bt.enable();
/*****Second method to enable bluetooth*****/
//Pop-up dialog box to confirm to enable bluetooth
/*Intent i=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(i); */
//Display blutooth device value on Toast
Toast.makeText(this, "bluetooth found.." + bt,
Toast.LENGTH_LONG).show();
} else {
//disable bluetooth
bt.disable();
}
}
}
}

activity_main.xml

<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:background="#024" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="action"
android:text="Enable and disable bluetooth"

326
android:textSize="18sp" />
</RelativeLayout>

Android manifest.xml

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

 Wifi activation

MainActivity.java

import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

WifiManager wm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//this method will call on button click
public void wwf(View v)
{
Button b1=(Button)findViewById(R.id.button1);
//get Wifi service
wm=(WifiManager)getSystemService(WIFI_SERVICE);
//Check Wifi is on or off
if(wm.isWifiEnabled())
{
b1.setText("Wifi OFF");
//enable or disable Wifi
//for enable pass true value
//for disable pass false value
wm.setWifiEnabled(false);
}
else

327
{
b1.setText("Wifi ON");
wm.setWifiEnabled(true);
}
}

activity_main.xml

<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:background="#b21">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="wwf"
android:text="Wifi OFF"
android:textSize="30sp" />
</RelativeLayout>

Android manifest.xml

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

 Login form using sqlite database

Main activity.java

import android.os.Bundle;
import android.view.View;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {

328
Intent i=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void login_sigin(View v)


{
switch(v.getId())
{
case R.id.log_in:
i=new Intent(this,Login.class);
startActivityForResult(i, 500);
overridePendingTransition(R.anim.slide_in_right,
R.anim.slide_out_left);
break;
case R.id.sign_in:
i=new Intent(this,Signin.class);
startActivityForResult(i, 500);
overridePendingTransition(R.anim.slide_in_right,
R.anim.slide_out_left);;
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}
}

Login.java

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

329
public class Login extends Activity{
Intent i=null;
ImageView im=null;
EditText tv1,tv4;
boolean flag=false;
SQLiteDatabase db=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
im=(ImageView)findViewById(R.id.show_hide2);
tv1=(EditText)findViewById(R.id.phone2);
tv4=(EditText)findViewById(R.id.password2);
db=openOrCreateDatabase("mydb", MODE_PRIVATE, null);
// db.execSQL("create table if not exists login(name varchar,mobile_no
varchar,email_id varchar,password varchar,flag varchar)");

im.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {

if(flag==false)
{
im.setImageResource(R.drawable.hide);
tv4.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
flag=true;
}
else
{
im.setImageResource(R.drawable.show);
tv4.setInputType(129);
flag=false;

}
}
});
}

public void action(View v)


{
switch(v.getId())
{
case R.id.signin2:

330
i=new Intent(this,Signin.class);
startActivityForResult(i, 500);
overridePendingTransition(R.anim.slide_in_top,
R.anim.slide_out_bottom);
finish();
break;
case R.id.start:
String mobile_no=tv1.getText().toString();
String password=tv4.getText().toString();
if(mobile_no==null||mobile_no==""||mobile_no.length()<10)
{
show("Please Enter Correct mobile number.");
}
else if(password==null||password==""||password.length()<6)
{
show("Please Enter Correct Password.");
}
else
{
Cursor c=db.rawQuery("select * from login where
mobile_no='"+mobile_no+"' and password='"+password+"'",null);
c.moveToFirst();
if(c.getCount()>0)
{
i=new Intent(this,Welcome.class);
startActivityForResult(i,500);
overridePendingTransition(R.anim.slide_in_right,
R.anim.slide_out_left);
db.close();
finish();
}
else
show("Wrong Password or Mobile number.");

}
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}

public void show(String str)

331
{
Toast.makeText(this, str, Toast.LENGTH_LONG).show();
}

Signin.java

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class Signin extends Activity{


Intent i=null;
ImageView im=null;
EditText tv1,tv2,tv3,tv4;
boolean flag=false;
SQLiteDatabase db=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.signin);
im=(ImageView)findViewById(R.id.show_hide);
tv1=(EditText)findViewById(R.id.name);
tv2=(EditText)findViewById(R.id.email_id);
tv3=(EditText)findViewById(R.id.phone);
tv4=(EditText)findViewById(R.id.password);
db=openOrCreateDatabase("mydb", MODE_PRIVATE, null);
db.execSQL("create table if not exists login(name varchar,mobile_no
varchar,email_id varchar,password varchar,flag varchar)");

im.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {

if(flag==false)
{

332
im.setImageResource(R.drawable.hide);
tv4.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
flag=true;
}
else
{
im.setImageResource(R.drawable.show);
tv4.setInputType(129);
flag=false;

}
}
});
}

public void action(View v)


{
switch(v.getId())
{
case R.id.login:
i=new Intent(this,Login.class);
startActivityForResult(i, 500);
overridePendingTransition(R.anim.slide_in_top,
R.anim.slide_out_bottom);
finish();
break;
case R.id.signin:
String name=tv1.getText().toString();
String email_id=tv2.getText().toString();
String mobile_no=tv3.getText().toString();
String password=tv4.getText().toString();
if(name==null||name==""||name.length()<3)
{
show("Please Enter Correct Name.");
}
else if(mobile_no==null||mobile_no==""||mobile_no.length()<10)
{
show("Please Enter Correct mobile number.");
}
else if(email_id==null||email_id==""||email_id.length()<10)
{
show("Please Enter Correct Email id.");
}
else if(password==null||password==""||password.length()<6)

333
{
show("Please Enter Strong Password.");
}
else
{
db.execSQL("insert into login
values('"+name+"','"+mobile_no+"','"+email_id+"','"+password+"','nothing')");
i=new Intent(this,Welcome.class);
startActivityForResult(i, 500);
overridePendingTransition(R.anim.slide_in_right,
R.anim.slide_out_left);
db.close();
finish();
}
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}

public void show(String str)


{
Toast.makeText(this, str, Toast.LENGTH_LONG).show();
}
}

Welcome.java

import android.app.Activity;
import android.os.Bundle;

public class Welcome extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
}
}

334
activity_main.xml

<?xml version="1.0"?>

<RelativeLayout android:background="#999999"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentBottom="true">

<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:onClick="login_sigin"
android:text="Sign In"
android:textSize="20sp"
android:layout_weight="1"
android:id="@+id/sign_in"/>

<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:onClick="login_sigin"
android:text="Log In"
android:textSize="20sp"
android:layout_weight="1"
android:id="@+id/log_in"/>

</LinearLayout>

<TextView android:background="#CCCCCC"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text=" Welcome "
android:textSize="25sp"
android:id="@+id/text"
android:textColor="#333333"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center"

335
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentLeft="true"/>

</RelativeLayout>

login.xml

<?xml version="1.0"?>

<RelativeLayout android:background="#999999" android:layout_height="fill_parent"


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

<RelativeLayout
android:background="@android:drawable/edit_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:gravity="center_vertical"
android:baselineAligned="false"
android:addStatesFromChildren="true"
android:layout_centerVertical="true"
android:layout_alignRight="@+id/phone2"
android:layout_alignLeft="@+id/phone2"
android:id="@+id/rl">

<ImageView
android:background="@drawable/show"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/show_hide2"
android:layout_marginTop="4dp"
android:layout_alignParentTop="true"
android:layout_alignBottom="@+id/rl"
android:layout_alignParentRight="true"
style="@android:style/Widget.Button.Inset"/>

<EditText
android:background="@null"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/password2"

336
android:layout_alignParentTop="true"
android:layout_alignBottom="@+id/rl"
android:singleLine="true"
android:maxLines="1"
android:inputType="textPassword"
android:hint="Password"
android:focusableInTouchMode="true"
android:focusable="true"
android:maxLength="40"
android:ems="10"
android:layout_toLeftOf="@+id/show_hide2"
android:layout_alignParentLeft="true"/>

</RelativeLayout>

<EditText android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/phone2"
android:inputType="phone"
android:hint="Mobile No."
android:maxLength="10"
android:ems="10"
android:layout_centerHorizontal="true"
android:layout_above="@+id/rl">

<requestFocus/>

</EditText>

<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/signin2"
android:layout_alignParentTop="true" android:layout_alignParentRight="true"
android:layout_alignParentLeft="true" android:textSize="20sp" android:onClick="action"
android:text="Sign in"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:layout_alignRight="@+id/rl" android:layout_alignLeft="@+id/rl"
android:id="@+id/start" android:layout_marginTop="10dp" android:textSize="20sp"
android:onClick="action" android:text="Continue.." android:layout_below="@+id/rl"/>

</RelativeLayout>

337
signin.xml

<?xml version="1.0"?>

<RelativeLayout android:background="#999999" android:layout_height="fill_parent"


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

<EditText android:layout_height="wrap_content" android:layout_width="wrap_content"


android:inputType="textEmailAddress" android:maxLength="40" android:hint="Email id"
android:ems="10" android:layout_centerVertical="true"
android:layout_alignLeft="@+id/phone" android:id="@+id/email_id"> </EditText>

<EditText android:layout_height="wrap_content" android:layout_width="wrap_content"


android:inputType="number" android:maxLength="10" android:hint="Mobile No."
android:ems="10" android:id="@+id/phone" android:layout_centerHorizontal="true"
android:layout_above="@+id/email_id"/>

<EditText android:layout_height="wrap_content" android:layout_width="wrap_content"


android:inputType="textPersonName" android:maxLength="30" android:hint="Name"
android:ems="10" android:id="@+id/name" android:layout_centerHorizontal="true"
android:layout_above="@+id/phone">

<requestFocus/>

</EditText>

<RelativeLayout android:background="@android:drawable/edit_text"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_alignLeft="@+id/email_id" android:id="@+id/rl"
android:gravity="center_vertical" android:baselineAligned="false"
android:addStatesFromChildren="true" android:layout_below="@+id/email_id"
android:layout_alignRight="@+id/email_id">

<ImageView android:background="@drawable/show"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:id="@+id/show_hide" android:layout_marginTop="4dp"
android:layout_alignParentTop="true" android:layout_alignBottom="@+id/rl"
android:layout_alignParentRight="true" style="@android:style/Widget.Button.Inset"/>

338
<EditText android:background="@null" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:inputType="textPassword"
android:maxLength="40" android:hint="Password" android:ems="10"
android:id="@+id/password" android:layout_alignParentTop="true"
android:layout_alignBottom="@+id/rl" android:singleLine="true" android:maxLines="1"
android:focusableInTouchMode="true" android:focusable="true"
android:layout_toLeftOf="@+id/show_hide" android:layout_alignParentLeft="true"/>

</RelativeLayout>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:id="@+id/login" android:layout_alignParentTop="true"
android:layout_alignParentRight="true" android:layout_alignParentLeft="true"
android:textSize="20sp" android:onClick="action" android:text="Log in"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:layout_alignLeft="@+id/rl" android:id="@+id/signin"
android:layout_below="@+id/rl" android:layout_alignRight="@+id/rl"
android:layout_marginTop="10dp" android:textSize="20sp" android:onClick="action"
android:text="Continue.."/>

</RelativeLayout>

Welcome.xml

<?xml version="1.0"?>

<RelativeLayout android:background="#999999" android:layout_height="fill_parent"


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

<ImageButton android:layout_height="50dp" android:layout_width="50dp"


android:src="@drawable/ic_launcher" android:layout_alignParentTop="true"
android:layout_alignParentLeft="true" android:id="@+id/w_image"/>

<TextView android:background="#444444" android:layout_height="wrap_content"


android:layout_width="wrap_content" android:layout_alignParentTop="true"
android:id="@+id/w_welcome" android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center" android:text="Welcome Mohsin"
android:layout_toRightOf="@+id/w_image" android:layout_alignParentRight="true"
android:layout_alignBottom="@+id/w_image"/>

</RelativeLayout>

339
Drawable FOLDER

anim FOLDER

slide_in_left.xml slide_in_right.xml slide_in_top.xml slide_out_bottom.xml slide_out_left.xml

slide_out_right.xml slide_out_top.xml slide_in_bottom.xml

Android manifest.xml

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


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.manju.myapplication">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

340
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name="com.example.manju.myapplication.Login"/>

<activity android:name="com.example.manju.myapplication.Signin"/>

<activity android:name="com.example.manju.myapplication.Welcome"/>

</application>

</manifest>

 Google map directions

MainActivity.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.json.JSONObject;

import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;

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

341
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;

public class MainActivity extends FragmentActivity {

GoogleMap map;
RadioButton rbDriving;
RadioButton rbBiCycling;
RadioButton rbWalking;
RadioGroup rgModes;
ArrayList<LatLng> markerPoints;
int mMode=0;
final int MODE_DRIVING=0;
final int MODE_BICYCLING=1;
final int MODE_WALKING=2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Getting reference to rb_driving


rbDriving = (RadioButton) findViewById(R.id.rb_driving);

// Getting reference to rb_bicylcing


rbBiCycling = (RadioButton) findViewById(R.id.rb_bicycling);

// Getting reference to rb_walking


rbWalking = (RadioButton) findViewById(R.id.rb_walking);

// Getting Reference to rg_modes


rgModes = (RadioGroup) findViewById(R.id.rg_modes);

rgModes.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {

// Checks, whether start and end locations are captured


if(markerPoints.size() >= 2){

342
LatLng origin = markerPoints.get(0);
LatLng dest = markerPoints.get(1);

// Getting URL to the Google Directions API


String url = getDirectionsUrl(origin, dest);

DownloadTask downloadTask = new DownloadTask();

// Start downloading json data from Google Directions API


downloadTask.execute(url);
}
}
});

// Initializing
markerPoints = new ArrayList<LatLng>();

// Getting reference to SupportMapFragment of the activity_main


SupportMapFragment fm =
(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

// Getting Map for the SupportMapFragment


map = fm.getMap();

// Enable MyLocation Button in the Map


map.setMyLocationEnabled(true);

// Setting onclick event listener for the map


map.setOnMapClickListener(new OnMapClickListener() {

@Override
public void onMapClick(LatLng point) {

// Already two locations


if(markerPoints.size()>1){
markerPoints.clear();
map.clear();
}

// Adding new item to the ArrayList


markerPoints.add(point);

// Draws Start and Stop markers on the Google Map


drawStartStopMarkers();

343
// Checks, whether start and end locations are captured
if(markerPoints.size() >= 2){
LatLng origin = markerPoints.get(0);
LatLng dest = markerPoints.get(1);

// Getting URL to the Google Directions API


String url = getDirectionsUrl(origin, dest);

DownloadTask downloadTask = new DownloadTask();

// Start downloading json data from Google Directions API


downloadTask.execute(url);
}
}
});
}

// Drawing Start and Stop locations


private void drawStartStopMarkers(){

for(int i=0;i<markerPoints.size();i++){

// Creating MarkerOptions
MarkerOptions options = new MarkerOptions();

// Setting the position of the marker


options.position(markerPoints.get(i) );

/**
* For the start location, the color of marker is GREEN and
* for the end location, the color of marker is RED.
*/
if(i==0){

options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))
;
}else if(i==1){

options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
}

// Add new marker to the Google Map Android API V2


map.addMarker(options);

344
}
}
private String getDirectionsUrl(LatLng origin,LatLng dest){

// Origin of route
String str_origin = "origin="+origin.latitude+","+origin.longitude;

// Destination of route
String str_dest = "destination="+dest.latitude+","+dest.longitude;

// Sensor enabled
String sensor = "sensor=false";

// Travelling Mode
String mode = "mode=driving";

if(rbDriving.isChecked()){
mode = "mode=driving";
mMode = 0 ;
}else if(rbBiCycling.isChecked()){
mode = "mode=bicycling";
mMode = 1;
}else if(rbWalking.isChecked()){
mode = "mode=walking";
mMode = 2;
}

// Building the parameters to the web service


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

// Output format
String output = "json";

// Building the url to the web service


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

return url;
}

/** A method to download json data from url */


private String downloadUrl(String strUrl) throws IOException{
String data = "";
InputStream iStream = null;

345
HttpURLConnection urlConnection = null;
try{
URL url = new URL(strUrl);

// Creating an http connection to communicate with url


urlConnection = (HttpURLConnection) url.openConnection();

// Connecting to url
urlConnection.connect();

// Reading data from url


iStream = urlConnection.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

StringBuffer sb = new StringBuffer();

String line = "";


while( ( line = br.readLine()) != null){
sb.append(line);
}

data = sb.toString();

br.close();

}catch(Exception e){
Log.d("Exception while downloading url", e.toString());
}finally{
iStream.close();
urlConnection.disconnect();
}
return data;
}

// Fetches data from url passed


private class DownloadTask extends AsyncTask<String, Void, String>{

// Downloading data in non-ui thread


@Override
protected String doInBackground(String... url) {

// For storing data from web service


String data = "";

346
try{
// Fetching the data from web service
data = downloadUrl(url[0]);
}catch(Exception e){
Log.d("Background Task",e.toString());
}
return data;
}

// Executes in UI thread, after the execution of


// doInBackground()
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);

ParserTask parserTask = new ParserTask();

// Invokes the thread for parsing the JSON data


parserTask.execute(result);
}
}

/** A class to parse the Google Places in JSON format */


private class ParserTask extends AsyncTask<String, Integer,
List<List<HashMap<String,String>>> >{

// Parsing the data in non-ui thread


@Override
protected List<List<HashMap<String, String>>> doInBackground(String...
jsonData) {

JSONObject jObject;
List<List<HashMap<String, String>>> routes = null;

try{
jObject = new JSONObject(jsonData[0]);
DirectionsJSONParser parser = new DirectionsJSONParser();

// Starts parsing data


routes = parser.parse(jObject);
}catch(Exception e){
e.printStackTrace();
}

347
return routes;
}

// Executes in UI thread, after the parsing process


@Override
protected void onPostExecute(List<List<HashMap<String, String>>> result) {
ArrayList<LatLng> points = null;
PolylineOptions lineOptions = null;
MarkerOptions markerOptions = new MarkerOptions();

// Traversing through all the routes


for(int i=0;i<result.size();i++){
points = new ArrayList<LatLng>();
lineOptions = new PolylineOptions();

// Fetching i-th route


List<HashMap<String, String>> path = result.get(i);

// Fetching all the points in i-th route


for(int j=0;j<path.size();j++){
HashMap<String,String> point = path.get(j);

double lat = Double.parseDouble(point.get("lat"));


double lng = Double.parseDouble(point.get("lng"));
LatLng position = new LatLng(lat, lng);

points.add(position);
}

// Adding all the points in the route to LineOptions


lineOptions.addAll(points);
lineOptions.width(2);

// Changing the color polyline according to the mode


if(mMode==MODE_DRIVING)
lineOptions.color(Color.RED);
else if(mMode==MODE_BICYCLING)
lineOptions.color(Color.GREEN);
else if(mMode==MODE_WALKING)
lineOptions.color(Color.BLUE);
}

if(result.size()<1){
Toast.makeText(getBaseContext(), "No Points",

348
Toast.LENGTH_SHORT).show();
return;
}

// Drawing polyline in the Google Map for the i-th route


map.addPolyline(lineOptions);
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}

DirectionsJSONParser.java

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

public class DirectionsJSONParser {

/** Receives a JSONObject and returns a list of lists containing latitude and
longitude */
public List<List<HashMap<String,String>>> parse(JSONObject jObject){

List<List<HashMap<String, String>>> routes = new


ArrayList<List<HashMap<String,String>>>() ;
JSONArray jRoutes = null;
JSONArray jLegs = null;
JSONArray jSteps = null;

try {

349
jRoutes = jObject.getJSONArray("routes");

/** Traversing all routes */


for(int i=0;i<jRoutes.length();i++){
jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
List path = new ArrayList<HashMap<String, String>>();

/** Traversing all legs */


for(int j=0;j<jLegs.length();j++){
jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps");

/** Traversing all steps */


for(int k=0;k<jSteps.length();k++){
String polyline = "";
polyline =
(String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
List<LatLng> list = decodePoly(polyline);

/** Traversing all points */


for(int l=0;l<list.size();l++){
HashMap<String, String> hm = new HashMap<String,
String>();
hm.put("lat",
Double.toString(((LatLng)list.get(l)).latitude) );
hm.put("lng",
Double.toString(((LatLng)list.get(l)).longitude) );
path.add(hm);
}
}
routes.add(path);
}
}
} catch (JSONException e) {
e.printStackTrace();
}catch (Exception e){
}
return routes;
}

/**
* Method to decode polyline points
* Courtesy : jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-
direction-api-with-java
* */

350
private List<LatLng> decodePoly(String encoded) {

List<LatLng> poly = new ArrayList<LatLng>();


int index = 0, len = encoded.length();
int lat = 0, lng = 0;

while (index < len) {


int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;

shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;

LatLng p = new LatLng((((double) lat / 1E5)),


(((double) lng / 1E5)));
poly.add(p);
}
return poly;
}
}

activity_main.xml

<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" >

<RadioGroup

351
android:id="@+id/rg_modes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >

<RadioButton android:id="@+id/rb_driving"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/str_rb_driving"
android:checked="true" />

<RadioButton android:id="@+id/rb_bicycling"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/str_rb_bicycling" />

<RadioButton android:id="@+id/rb_walking"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/str_rb_walking" />

</RadioGroup>

<fragment
android:id="@+id/map"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/rg_modes"
class="com.google.android.gms.maps.SupportMapFragment" />

</RelativeLayout>

Android Manifest.xml

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


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.manju.myapplication">

<permission
android:name="com.example.manju.myapplication.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />

<uses-permission

352
android:name="com.example.manju.myapplication.permission.MAPS_RECEIVE" />

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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


</intent-filter>
</activity>

<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyChFgoCG01fzZeXxxEvL-f7yElcekl3vwA"/>

</application>

</manifest>

String.xml

<string name="hello_world">Hello world!</string>


<string name="str_rb_driving">Driving</string>
<string name="str_rb_bicycling">BiCycling</string>
<string name="str_rb_walking">Walking</string>

353
 Class Time Table

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onButtonClick(View v) {


if (v.getId() == R.id.Bdisplay)

{
Intent i = new Intent(MainActivity.this, ListBatchesActivity.class);
startActivity(i);
}

}
}

List batches Activity

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;

public class ListBatchesActivity extends Activity {

ListView listBatches;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listbatches);

354
}

@Override
public void onStart() {
super.onStart();
listBatches = (ListView) this.findViewById(R.id.listBatches);
BatchesAdapter adapter = new BatchesAdapter(this);
listBatches.setAdapter(adapter);
}

public void addBatch(View v) {


Intent intent = new Intent(this, AddBatchActivity.class);
startActivity(intent);
}

AddBatchActivity

import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public class AddBatchActivity extends Activity {


private static final int DATE_DIALOG = 1;
private static final int TIME_DIALOG = 2;
private int day, month, year, hours, mins;
private TextView textStartDate, textStartTime;
private EditText
editBatchcode,editCourse,editPeriod,editClasses,editClassesPerWeek, editRemarks;

@Override
public void onCreate(Bundle savedInstanceState) {

355
super.onCreate(savedInstanceState);
setContentView(R.layout.addbatch);

textStartDate = (TextView) this.findViewById(R.id.textStartDate);


textStartTime = (TextView) this.findViewById(R.id.textStartTime);

editBatchcode = (EditText) this.findViewById(R.id.editBatchCode) ;


editCourse = (EditText) this.findViewById(R.id.editCourse) ;
editPeriod = (EditText) this.findViewById(R.id.editPeriod) ;
editClasses = (EditText) this.findViewById(R.id.editClasses) ;
editClassesPerWeek = (EditText) this.findViewById(R.id.editClassesPerWeek) ;
editRemarks = (EditText) this.findViewById(R.id.editRemarks) ;

setDateToSysdate();
updateDateDisplay();

private void setDateToSysdate() {


Calendar c = Calendar.getInstance();
day = c.get(Calendar.DAY_OF_MONTH);
month = c.get(Calendar.MONTH);
year = c.get(Calendar.YEAR);
}

public void addBatch(View v) {


boolean done = Database.addBatch(this,
editBatchcode.getText().toString(),
editCourse.getText().toString(),
textStartDate.getText().toString(),
textStartTime.getText().toString(),
editClasses.getText().toString(),
editPeriod.getText().toString(),
editClassesPerWeek.getText().toString(),
editRemarks.getText().toString());

if ( done )
Toast.makeText(this,"Added batch successfully!",
Toast.LENGTH_LONG).show();
else
Toast.makeText(this,"Sorry! Could not add batch!",
Toast.LENGTH_LONG).show();
}

356
public void showDatePicker(View v) {
showDialog(DATE_DIALOG);
}

public void showTimePicker(View v) {


showDialog(TIME_DIALOG);
}

@Override
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);

switch (id) {
case DATE_DIALOG:
return new DatePickerDialog(this, dateSetListener, year, month, day);
case TIME_DIALOG:
return new TimePickerDialog(this, timeSetListener, hours,mins, false);
}
return null;
}

private DatePickerDialog.OnDateSetListener dateSetListener = new


DatePickerDialog.OnDateSetListener() {

public void onDateSet(DatePicker view, int pYear, int pMonth, int pDay) {
year = pYear;
month = pMonth;
day = pDay;
updateDateDisplay();
}
};

private TimePickerDialog.OnTimeSetListener timeSetListener =


new TimePickerDialog.OnTimeSetListener() {

@Override
public void onTimeSet(TimePicker arg0, int pHours, int pMins) {
hours = pHours;
mins = pMins;
updateTimeDisplay();
}

357
};

private void updateDateDisplay() {


// Month is 0 based so add 1
textStartDate.setText(String.format("%04d-%02d-%02d", year, month + 1,day));
}

private void updateTimeDisplay() {


// Month is 0 based so add 1
textStartTime.setText(String.format("%02d:%02d", hours,mins));
}

AddClassActivity

import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public class AddClassActivity extends Activity {


private static final int DATE_DIALOG = 1;
private static final int TIME_DIALOG = 2;
private int day, month, year, hours, mins;
private TextView textClassDate, textClassTime, textBatchCode;
private EditText editPeriod,editRemarks, editTopics;
private CheckBox chkAdjust;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

358
setContentView(R.layout.addclass);

textBatchCode = (TextView) this.findViewById(R.id.textBatchCode);


textClassDate = (TextView) this.findViewById(R.id.textClassDate);
textClassTime = (TextView) this.findViewById(R.id.textClassTime);

editPeriod = (EditText) this.findViewById(R.id.editPeriod) ;


editRemarks = (EditText) this.findViewById(R.id.editRemarks) ;
editTopics = (EditText) this.findViewById(R.id.editTopics) ;

chkAdjust = (CheckBox) this.findViewById(R.id.chkAdjust);

textBatchCode.setText( getIntent().getStringExtra("batchcode"));
setDateToSysdate();
updateDateDisplay();
}

private void setDateToSysdate() {


Calendar c = Calendar.getInstance();
day = c.get(Calendar.DAY_OF_MONTH);
month = c.get(Calendar.MONTH);
year = c.get(Calendar.YEAR);
}

public void addClass(View v) {


boolean done = Database.addClass(this,
textBatchCode.getText().toString(),
textClassDate.getText().toString(),
textClassTime.getText().toString(),
editPeriod.getText().toString(),
editTopics.getText().toString(),
editRemarks.getText().toString(),
chkAdjust.isChecked());

if ( done )
Toast.makeText(this,"Added Class Successfully!",
Toast.LENGTH_LONG).show();
else
Toast.makeText(this,"Sorry! Could not add class!",
Toast.LENGTH_LONG).show();
}

public void showDatePicker(View v) {

359
showDialog(DATE_DIALOG);
}

public void showTimePicker(View v) {


showDialog(TIME_DIALOG);
}

@Override
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);

switch (id) {
case DATE_DIALOG:
return new DatePickerDialog(this, dateSetListener, year, month, day);
case TIME_DIALOG:
return new TimePickerDialog(this, timeSetListener, hours,mins, false);
}
return null;
}

private DatePickerDialog.OnDateSetListener dateSetListener = new


DatePickerDialog.OnDateSetListener() {

public void onDateSet(DatePicker view, int pYear, int pMonth, int pDay) {
year = pYear;
month = pMonth;
day = pDay;
updateDateDisplay();
}
};

private TimePickerDialog.OnTimeSetListener timeSetListener =


new TimePickerDialog.OnTimeSetListener() {

@Override
public void onTimeSet(TimePicker arg0, int pHours, int pMins) {
hours = pHours;
mins = pMins;
updateTimeDisplay();
}

};

360
private void updateDateDisplay() {
// Month is 0 based so add 1
textClassDate.setText(String.format("%04d-%02d-%02d", year, month + 1,day));
}

private void updateTimeDisplay() {


// Month is 0 based so add 1
textClassTime.setText(String.format("%02d:%02d", hours,mins));
}
}

Batch

public class Batch {

private String code,course,startdate,


enddate,starttime,classes,period,classesperweek,remarks;

public String getCode() {


return code;
}

public void setCode(String code) {


this.code = code;
}

public String getCourse() {


return course;
}

public void setCourse(String course) {


this.course = course;
}

public String getStartdate() {


return startdate;
}

public void setStartdate(String startdate) {


this.startdate = startdate;
}

361
public String getEnddate() {
return enddate;
}

public void setEnddate(String enddate) {


this.enddate = enddate;
}

public String getStarttime() {


return starttime;
}

public void setStarttime(String starttime) {


this.starttime = starttime;
}

public String getClasses() {


return classes;
}

public void setClasses(String classes) {


this.classes = classes;
}

public String getPeriod() {


return period;
}

public void setPeriod(String period) {


this.period = period;
}

public String getClassesperweek() {


return classesperweek;
}

public void setClassesperweek(String classesperweek) {


this.classesperweek = classesperweek;
}

public String getRemarks() {


return remarks;
}

362
public void setRemarks(String remarks) {
this.remarks = remarks;
}

BatchesAdapter

import java.util.ArrayList;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;

public class BatchesAdapter extends BaseAdapter {


private LayoutInflater inflater;
private ArrayList<Batch> batches;

public BatchesAdapter(Context ctx) {


inflater = LayoutInflater.from(ctx);
batches = Database.getBatches(ctx);
}

@Override
public int getCount() {
return batches.size();
}

@Override
public Object getItem(int pos) {
return batches.get(pos);
}

@Override
public long getItemId(int position) {

363
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.batch, null);
Button btnClasses = (Button) convertView.findViewById(R.id.btnClasses);
Button btnUpdate = (Button) convertView.findViewById(R.id.btnUpdate);
Button btnAddClass = (Button) convertView.findViewById(R.id.btnAddClass);

final Batch batch = batches.get(position);

TextView textCode = (TextView) convertView.findViewById(R.id.textCode);


textCode.setText( batch.getCode());

TextView textCourse = (TextView)


convertView.findViewById(R.id.textCourse);
textCourse.setText( batch.getCourse());

TextView textStartDate = (TextView)


convertView.findViewById(R.id.textStartDate);
textStartDate.setText(batch.getStartdate());

TextView textEndDate = (TextView)


convertView.findViewById(R.id.textEndDate);
textEndDate.setText(batch.getEnddate());

btnClasses.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Context context = view.getContext();
Intent intent = new Intent(context, ListClassesActivity.class);
intent.putExtra("batchcode",batch.getCode());
context.startActivity(intent);
}
});

btnAddClass.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Context context = view.getContext();
Intent intent = new Intent(context, AddClassActivity.class);

364
intent.putExtra("batchcode",batch.getCode());
context.startActivity(intent);
}
});

btnUpdate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {

Context context = view.getContext();


Intent intent = new Intent(context, UpdateBatchActivity.class);
intent.putExtra("batchcode",batch.getCode());
context.startActivity(intent);
}
});
}
return convertView;
}
}

Class

public class Class {

private String classno, classId, classDate, classTime, period, topics, remarks,


batchCode;

public String getBatchCode() {


return batchCode;
}

public void setBatchCode(String batchCode) {


this.batchCode = batchCode;
}

public String getClassId() {


return classId;
}

public void setClassId(String classId) {

365
this.classId = classId;
}

public String getClassno() {


return classno;
}

public void setClassno(String classno) {


this.classno = classno;
}

public String getClassDate() {


return classDate;
}

public void setClassDate(String classDate) {


this.classDate = classDate;
}

public String getClassTime() {


return classTime;
}

public void setClassTime(String classTime) {


this.classTime = classTime;
}

public String getPeriod() {


return period;
}

public void setPeriod(String period) {


this.period = period;
}

public String getTopics() {


return topics;
}

public void setTopics(String topics) {


this.topics = topics;
}

public String getRemarks() {

366
return remarks;
}

public void setRemarks(String remarks) {


this.remarks = remarks;
}

ClassSchedulerActivity

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class ClassSchedulerActivity extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getWritableDatabase();
db.close();

}
}

Database

import java.util.ArrayList;
import java.util.Calendar;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class Database {


public static final String BATCHES_TABLE_NAME = "batches";
public static final String BATCHES_ID = "_id";

367
public static final String BATCHES_BATCHCODE = "batchcode";
public static final String BATCHES_COURSE = "course";
public static final String BATCHES_STARTDATE = "startdate";
public static final String BATCHES_STARTTIME = "starttime";
public static final String BATCHES_CLASSES = "classes";
public static final String BATCHES_PERIOD = "period";
public static final String BATCHES_CLASSESPERWEEK = "classesperweek";
public static final String BATCHES_REMARKS = "remarks";

public static final String CLASSES_TABLE_NAME = "classes";


public static final String CLASSES_CLASSES_ID = "_id";

public static final String CLASSES_BATCHCODE = "batchcode";


public static final String CLASSES_CLASSDATE = "classdate";
public static final String CLASSES_CLASSTIME = "classtime";
public static final String CLASSES_CLASSPERIOD = "period";
public static final String CLASSES_TOPICS = "topics";
public static final String CLASSES_REMARKS = "remarks";

public static Batch cursorToBatch(Cursor batches) {

Batch batch = new Batch();


batch.setCode(batches.getString(batches
.getColumnIndex(Database.BATCHES_BATCHCODE)));
batch.setCourse(batches.getString(batches
.getColumnIndex(Database.BATCHES_COURSE)));
batch.setStartdate(batches.getString(batches
.getColumnIndex(Database.BATCHES_STARTDATE)));
batch.setStarttime(batches.getString(batches
.getColumnIndex(Database.BATCHES_STARTTIME)));
batch.setClasses(batches.getString(batches
.getColumnIndex(Database.BATCHES_CLASSES)));
batch.setClassesperweek(batches.getString(batches
.getColumnIndex(Database.BATCHES_CLASSESPERWEEK)));
batch.setPeriod(batches.getString(batches
.getColumnIndex(Database.BATCHES_PERIOD)));
batch.setRemarks(batches.getString(batches
.getColumnIndex(Database.BATCHES_REMARKS)));
return batch;
}

public static Class cursorToClass(Cursor classes) {


Class cls = new Class();
cls.setClassId( classes.getString(

368
classes.getColumnIndex(Database.CLASSES_CLASSES_ID)));
cls.setBatchCode( classes.getString(
classes.getColumnIndex(Database.CLASSES_BATCHCODE)));
cls.setClassDate( classes.getString(
classes.getColumnIndex(Database.CLASSES_CLASSDATE)));
cls.setClassTime( classes.getString(
classes.getColumnIndex(Database.CLASSES_CLASSTIME)));
cls.setPeriod( classes.getString(
classes.getColumnIndex(Database.CLASSES_CLASSPERIOD)));
cls.setTopics( classes.getString(
classes.getColumnIndex(Database.CLASSES_TOPICS)));
cls.setRemarks( classes.getString(
classes.getColumnIndex(Database.CLASSES_REMARKS)));
return cls;
}

public static boolean addClass(Context context, String batchCode, String


classDate, String classTime, String period, String topics, String remarks, boolean
adjust) {
DBHelper dbhelper = null;
SQLiteDatabase db = null;
try {
dbhelper = new DBHelper(context);
db = dbhelper.getWritableDatabase();
db.beginTransaction();

if ( adjust ) {
// delete last class for the batch
boolean deleted = deleteLastClass(db,batchCode);
if ( !deleted) {
db.endTransaction();
return false;
}
}

// add new class with the given details

ContentValues values = new ContentValues();


values.put(Database.CLASSES_BATCHCODE, batchCode);
values.put(Database.CLASSES_CLASSDATE, classDate);
values.put(Database.CLASSES_CLASSTIME, classTime);
values.put(Database.CLASSES_CLASSPERIOD, period);
values.put(Database.CLASSES_REMARKS,remarks);

369
values.put(Database.CLASSES_TOPICS,topics);

long rowid = db.insert(Database.CLASSES_TABLE_NAME, null,values);

if ( rowid >=0 ) {
db.setTransactionSuccessful();
db.endTransaction();
return true;
}
else {
db.endTransaction();
return false;
}
}
catch(Exception ex) {
Log.d("CS", "Error in addClass -->" + ex.getMessage());
return false;
}
finally {
if (db != null && db.isOpen()) {
db.close();
}

}
}

public static boolean deleteLastClass(SQLiteDatabase db, String batchcode) {


try {
// find out classid for last class and then delete it
boolean done = false;
Cursor lastClass = db.query(Database.CLASSES_TABLE_NAME,
null,Database.CLASSES_BATCHCODE + " = ?",
new String[] { batchcode},
null, null, Database.CLASSES_CLASSDATE + " desc " , "1");

String classid = null;

if ( lastClass.moveToFirst() ) {
classid = lastClass.getString( lastClass.getColumnIndex(
Database.CLASSES_CLASSES_ID));
int rows =
db.delete(Database.CLASSES_TABLE_NAME,Database.CLASSES_CLASSES_ID + " = ?",
new String[] { classid} );
done = rows == 1;

370
}
lastClass.close();
return done;
}
catch (Exception ex) {
Log.d("Account", "Error in deleteLastClass-->" + ex.getMessage());
return false;
}
} // deleteLastClass

public static String calendarToString(Calendar c) {


return String.format("%04d-%02d-%02d", c.get(Calendar.YEAR),
c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH));
}

public static boolean cancelClass(Context context, String batchCode,String


classid) {

DBHelper dbhelper = null;


SQLiteDatabase db = null;
try {
dbhelper = new DBHelper(context);
db = dbhelper.getWritableDatabase();
db.beginTransaction();

int rows =
db.delete(Database.CLASSES_TABLE_NAME,Database.CLASSES_CLASSES_ID + " = ?",
new String[] { classid} );
if ( rows == 1)
{
// add a class after the last class
if ( addAfterLastClass(db,batchCode))
{
db.setTransactionSuccessful();
db.endTransaction();
return true;
}
}

db.endTransaction();
return false;

371
catch (Exception ex) {
Log.d("CS", "Error in cancelClass-->" + ex.getMessage());
return false;
}
finally {
if (db != null && db.isOpen()) {
db.close();
}
}

public static boolean addAfterLastClass(SQLiteDatabase db, String batchcode) {


try {
// find out last class date
boolean done = false;
Batch batch = null;

Cursor lastClass = db.query(Database.CLASSES_TABLE_NAME,


null,Database.CLASSES_BATCHCODE + " = ?",
new String[] { batchcode},
null, null, Database.CLASSES_CLASSDATE + " desc " , "1");

String classdate = null;


if ( lastClass.moveToFirst() ) {
classdate = lastClass.getString(lastClass.getColumnIndex(
Database.CLASSES_CLASSDATE));
// get details of the batch
batch = getBatch(db,batchcode);
// find out next date after the last class
Calendar c = getCalendar(classdate);

int classesperweek = Integer.parseInt( batch.getClassesperweek());


c.add( Calendar.DAY_OF_MONTH,1);

int dow = getDayOfWeek(c.get(Calendar.DAY_OF_WEEK));

if ( dow == 7 && classesperweek == 6) {


c.add( Calendar.DAY_OF_MONTH,1); // add one more day
}
else
if ( dow == 6 && classesperweek == 5)
c.add( Calendar.DAY_OF_MONTH,2); // add two more day

372
// insert with new data

lastClass.close();
ContentValues values = new ContentValues();
values.put(Database.CLASSES_BATCHCODE, batch.getCode());
values.put(Database.CLASSES_CLASSDATE, calendarToString(c));
values.put(Database.CLASSES_CLASSTIME, batch.getStarttime());
values.put(Database.CLASSES_CLASSPERIOD, batch.getPeriod());
values.put(Database.CLASSES_REMARKS,"");
values.put(Database.CLASSES_TOPICS,"");

long rowid = db.insert(Database.CLASSES_TABLE_NAME, null,values);


return rowid >= 0;
}
else
return false;
}
catch (Exception ex) {
Log.d("Account", "Error in deleteLastClass-->" + ex.getMessage());
return false;
}
} // deleteLastClass

public static boolean deleteClass(Context context, String classid) {


DBHelper dbhelper = null;
SQLiteDatabase db = null;
try {
dbhelper = new DBHelper(context);
db = dbhelper.getWritableDatabase();
int rows =
db.delete(Database.CLASSES_TABLE_NAME,Database.CLASSES_CLASSES_ID + " = ?",
new String[] { classid} );
return rows == 1;
}
catch (Exception ex) {
Log.d("CS", "Error in deleteClass-->" + ex.getMessage());
return false;
}
finally {
if (db != null && db.isOpen()) {
db.close();
}
}

373
} // deleteClass

public static boolean addBatch(Context context, String batchcode,


String course, String startdate, String starttime,
String classes,
String period, String classesperweek, String
remarks) {

DBHelper dbhelper = null;


SQLiteDatabase db = null;
try {
dbhelper = new DBHelper(context);
db = dbhelper.getWritableDatabase();
db.beginTransaction();

// execute insert command


ContentValues values = new ContentValues();
values.put(Database.BATCHES_BATCHCODE, batchcode);
values.put(Database.BATCHES_COURSE, course);
values.put(Database.BATCHES_STARTDATE, startdate);
values.put(Database.BATCHES_STARTTIME, starttime);
values.put(Database.BATCHES_CLASSES, classes);
values.put(Database.BATCHES_PERIOD, period);
values.put(Database.BATCHES_CLASSESPERWEEK, classesperweek);
values.put(Database.BATCHES_REMARKS, remarks);

long rowid = db.insert(Database.BATCHES_TABLE_NAME, null, values);


Log.d("CS", "Inserted into BATCHES " + rowid);

addClasses(db, batchcode, startdate, starttime, classes, period,


classesperweek);

db.setTransactionSuccessful();
db.endTransaction();
return true;
} catch (Exception ex) {
Log.d("Account", "Error in addTransaction -->" + ex.getMessage());
return false;
} finally {
if (db != null && db.isOpen()) {
db.close();
}
}
} // addBatch

374
public static boolean updateBatch(Context context, String batchcode,
String course, String starttime,String period,
String remarks) {

DBHelper dbhelper = null;


SQLiteDatabase db = null;
try {
dbhelper = new DBHelper(context);
db = dbhelper.getWritableDatabase();
db.beginTransaction();

// execute insert command


ContentValues values = new ContentValues();
values.put(Database.BATCHES_BATCHCODE, batchcode);
values.put(Database.BATCHES_COURSE, course);
values.put(Database.BATCHES_STARTTIME, starttime);
values.put(Database.BATCHES_PERIOD, period);
values.put(Database.BATCHES_REMARKS, remarks);

int rows = db.update(Database.BATCHES_TABLE_NAME, values,


Database.BATCHES_BATCHCODE + " = ?",
new String[] { batchcode} );
if ( rows == 1)
db.setTransactionSuccessful();

db.endTransaction();
return true;
} catch (Exception ex) {
Log.d("Account", "Error in updateBatch-->" + ex.getMessage());
return false;
} finally {
if (db != null && db.isOpen()) {
db.close();
}
}
} // updateBatch

public static boolean updateClass(Context context, String classid,String


classTime, String period,String topics, String remarks) {

DBHelper dbhelper = null;


SQLiteDatabase db = null;

375
try {
dbhelper = new DBHelper(context);
db = dbhelper.getWritableDatabase();

// execute insert command


ContentValues values = new ContentValues();
values.put(Database.CLASSES_CLASSTIME, classTime);
values.put(Database.CLASSES_CLASSPERIOD,period);
values.put(Database.CLASSES_TOPICS, topics);
values.put(Database.CLASSES_REMARKS, remarks);

int rows = db.update(Database.CLASSES_TABLE_NAME, values,


Database.CLASSES_CLASSES_ID + " = ?",
new String[] { classid} );
if ( rows == 1)
return true;
else
return false;
} catch (Exception ex) {
Log.d("Account", "Error in updateClass-->" + ex.getMessage());
return false;
} finally {
if (db != null && db.isOpen()) {
db.close();
}
}
} // updateBatch

public static boolean deleteBatch(Context context, String batchcode) {


DBHelper dbhelper = null;
SQLiteDatabase db = null;
try {
dbhelper = new DBHelper(context);
db = dbhelper.getWritableDatabase();
db.beginTransaction();

int rows =
db.delete(Database.CLASSES_TABLE_NAME,Database.BATCHES_BATCHCODE + " = ?",
new String[] { batchcode} );

rows = db.delete(Database.BATCHES_TABLE_NAME,Database.BATCHES_BATCHCODE +
" = ?",

376
new String[] { batchcode} );
if ( rows == 1)
db.setTransactionSuccessful();

db.endTransaction();
return true;
} catch (Exception ex) {
Log.d("Account", "Error in deleteBatch-->" + ex.getMessage());
return false;
} finally {
if (db != null && db.isOpen()) {
db.close();
}
}
} // deleteBatch

private static int getDayOfWeek(int dow) {

if (dow == 1)
return 7;
else
return dow - 1;
}

public static void addClasses(SQLiteDatabase db, String batchcode,


String startdate, String starttime, String classes,
String period,
String classesperweek) throws Exception {
try {

// execute insert command


ContentValues values = new ContentValues();
values.put(Database.CLASSES_BATCHCODE, batchcode);
values.put(Database.CLASSES_CLASSTIME, starttime);
values.put(Database.CLASSES_CLASSPERIOD, period);
values.put(Database.CLASSES_REMARKS, "");
values.put(Database.CLASSES_TOPICS, "");

String[] parts = startdate.split("-");


int year = Integer.parseInt(parts[0]);
int month = Integer.parseInt(parts[1]) - 1; // zero based month
int day = Integer.parseInt(parts[2]);

377
Calendar c = Calendar.getInstance();
c.set(year, month, day);

int noclasses = Integer.parseInt(classes);


int cpw = Integer.parseInt(classesperweek);

int classnumber = 1;

do {
int dow = c.get(Calendar.DAY_OF_WEEK);

if (getDayOfWeek(dow) <= cpw) {


values.put(Database.CLASSES_CLASSDATE, String.format(
"%04d-%02d-%02d", c.get(Calendar.YEAR),
c.get(Calendar.MONTH) + 1,
c.get(Calendar.DAY_OF_MONTH)));

long rowid = db.insert(Database.CLASSES_TABLE_NAME, null,


values);
Log.d("CS", "Inserted into CLASSES" + rowid);
classnumber++;
}

c.add(Calendar.DAY_OF_MONTH, 1); // increment


} while (classnumber <= noclasses);
} catch (Exception ex) {
Log.d("CS", "Error in addClasses -->" + ex.getMessage());
throw ex;
}

} // addClasses

public static ArrayList<Batch> getBatches(Context context) {


DBHelper dbhelper = new DBHelper(context);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor batches = db.query(Database.BATCHES_TABLE_NAME, null, null,
null, null, null, null);
ArrayList<Batch> list = new ArrayList<Batch>();

while (batches.moveToNext()) {
Batch batch = Database.cursorToBatch(batches);
String enddate = getEndDate(db, batch.getCode());
batch.setEnddate(enddate);

378
list.add(batch);
}
batches.close();
db.close();
dbhelper.close();
return list;
} // getBatches

public static ArrayList<Class> getClasses(Context context, String batchcode) {


DBHelper dbhelper = new DBHelper(context);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor classes = db.query(Database.CLASSES_TABLE_NAME, null,
Database.CLASSES_BATCHCODE + " = ?",
new String[] { batchcode},
null, null, Database.CLASSES_CLASSDATE, null);

ArrayList<Class> list = new ArrayList<Class>();

while (classes.moveToNext()) {
Class cls = Database.cursorToClass(classes);
list.add(cls);
}
classes.close();
db.close();
dbhelper.close();
return list;
} // getBatches

public static String getEndDate(SQLiteDatabase db, String batchcode) {


Cursor cursor = db.query(Database.CLASSES_TABLE_NAME,
new String[] { Database.CLASSES_CLASSDATE },
Database.CLASSES_BATCHCODE + "=?", new String[] { batchcode },
null, null, Database.CLASSES_CLASSDATE + " desc", "1");
cursor.moveToFirst();
String enddate =
cursor.getString(cursor.getColumnIndex(Database.CLASSES_CLASSDATE));
cursor.close();
return enddate;
}

public static Batch getBatch (SQLiteDatabase db, String batchcode) {


Cursor batches = db.query(Database.BATCHES_TABLE_NAME, null,
Database.BATCHES_BATCHCODE + " = ?" ,

379
new String [] { batchcode},
null, null, null, null);
Batch batch;
if ( batches.moveToNext() )
batch = Database.cursorToBatch(batches);
else
batch = null;
batches.close();
return batch;
}

public static Batch getBatch(Context context, String batchcode) {


DBHelper dbhelper = new DBHelper(context);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Batch batch = getBatch(db,batchcode);
db.close();
dbhelper.close();
return batch;

} // getBatch

public static Calendar getCalendar(String date) {

String [] parts = date.split("-");


Calendar c = Calendar.getInstance();
c.set( Integer.parseInt( parts[0]), Integer.parseInt( parts[1]) -1,
Integer.parseInt( parts[2]));
return c;
}

public static Class getClass(Context context, String classid) {


DBHelper dbhelper = new DBHelper(context);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor classes = db.query(Database.CLASSES_TABLE_NAME, null,
Database.CLASSES_CLASSES_ID + " = ?" ,
new String [] { classid},
null, null, null, null);
Class clas;
if ( classes.moveToNext() )
clas = Database.cursorToClass(classes);
else
clas = null;

classes.close();

380
db.close();
dbhelper.close();
return clas;

} // getBatch

DBHelper

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper {


public static final int DB_VERSION = 1;
public static final String DB_NAME = "cs.db";

public DBHelper(Context ctx) {


super(ctx, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
createTables(db);
}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

public void createTables(SQLiteDatabase database) {


String batches_table_sql = "create table " + Database.BATCHES_TABLE_NAME + " (
" +
Database.BATCHES_ID + " integer primary key autoincrement," +
Database.BATCHES_BATCHCODE + " TEXT," +
Database.BATCHES_COURSE + " TEXT," +
Database.BATCHES_STARTDATE + " TEXT," +
Database.BATCHES_STARTTIME + " TEXT," +

381
Database.BATCHES_CLASSES + " integer," +
Database.BATCHES_PERIOD + " integer," +
Database.BATCHES_CLASSESPERWEEK + " integer," +
Database.BATCHES_REMARKS + " TEXT)";

String classes_table_sql = "create table " + Database.CLASSES_TABLE_NAME + " (


" +
Database.CLASSES_CLASSES_ID + " integer primary key
autoincrement," +
Database.CLASSES_BATCHCODE + " TEXT," +
Database.CLASSES_CLASSDATE + " TEXT," +
Database.CLASSES_CLASSTIME + " TEXT," +
Database.CLASSES_CLASSPERIOD + " integer," +
Database.CLASSES_TOPICS+ " TEXT," +
Database.CLASSES_REMARKS + " TEXT)";

try {
database.execSQL(batches_table_sql);
database.execSQL("insert into batches (batchcode,course,
startdate,starttime,classes,period,classesperweek,remarks)"
+ "values ('HB2404','Hibernate','2012-04-
24','19:00',6,90,6,'Short course')");

database.execSQL(classes_table_sql);

database.execSQL("insert into classes


(batchcode,classdate,classtime,period,topics,remarks)"
+ "values ('HB2404','2012-04-24','19:00',90,null,null)");
database.execSQL("insert into classes
(batchcode,classdate,classtime,period,topics,remarks)"
+ "values ('HB2404','2012-04-25','19:00',90,null,null)");
database.execSQL("insert into classes
(batchcode,classdate,classtime,period,topics,remarks)"
+ "values ('HB2404','2012-04-26','19:00',90,null,null)");
database.execSQL("insert into classes
(batchcode,classdate,classtime,period,topics,remarks)"
+ "values ('HB2404','2012-04-27','19:00',90,null,null)");
database.execSQL("insert into classes
(batchcode,classdate,classtime,period,topics,remarks)"
+ "values ('HB2404','2012-04-28','19:00',90,null,null)");
database.execSQL("insert into classes
(batchcode,classdate,classtime,period,topics,remarks)"

382
+ "values ('HB2404','2012-04-30','19:00',90,null,'Last
class')");

Log.d("CS","Tables created!");

}
catch(Exception ex) {
Log.d("CS", "Error in DBHelper.onCreate() : " + ex.getMessage());
}
}

ListBatchesActivity

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;

public class ListBatchesActivity extends Activity {

ListView listBatches;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listbatches);
}

@Override
public void onStart() {
super.onStart();
listBatches = (ListView) this.findViewById(R.id.listBatches);
BatchesAdapter adapter = new BatchesAdapter(this);
listBatches.setAdapter(adapter);
}

public void addBatch(View v) {


Intent intent = new Intent(this, AddBatchActivity.class);
startActivity(intent);
}

383
}

ListClassesActivity

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

import java.util.List;

public class ListClassesActivity extends Activity {

String batchcode;
TableLayout tableClasses;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listclasses);

// get batchcode using intent


batchcode = getIntent().getStringExtra("batchcode");
tableClasses = (TableLayout) this.findViewById( R.id.tableClasses);
}

@Override
public void onStart() {
super.onStart();
deleteRowsFromTable();
addRowsToTable(tableClasses,batchcode);
}

public void deleteRowsFromTable() {


if ( tableClasses.getChildCount() > 2)
tableClasses.removeViews(2,tableClasses.getChildCount() - 2);
}

384
private void addRowsToTable(TableLayout table, String batchcode) {

List<Class> classes = Database.getClasses(this, batchcode);

TableRow tr = new TableRow(this);


tr.setLayoutParams(new
TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));

int classno = 1;
for(final Class c : classes) {
TableRow row = (TableRow)
LayoutInflater.from(this).inflate(R.layout.classrow, null);

((TextView)row.findViewById(R.id.textNo)).setText(
String.valueOf(classno));
((TextView)row.findViewById(R.id.textDate)).setText(c.getClassDate());
((TextView)row.findViewById(R.id.textTime)).setText(c.getClassTime());

// handle update button


ImageButton btnUpdate = (ImageButton) row.findViewById(R.id.btnUpdate);
btnUpdate.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(
ListClassesActivity.this,UpdateClassActivity.class);
intent.putExtra("classid", c.getClassId());
startActivity(intent);
}
});

table.addView(row);

TableRow line = new TableRow(this);


TextView tv = new TextView(this);
tv.setBackgroundColor(Color.RED);
TableRow.LayoutParams lp = new
TableRow.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,3);
lp.span = 4;
tv.setLayoutParams(lp);

line.addView(tv);

table.addView(line);

385
classno ++;
}

UpdateBatchActivity

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public class UpdateBatchActivity extends Activity {


private static final int DATE_DIALOG = 1;
private static final int TIME_DIALOG = 2;
private static final int DELETE_ALERT_DIALOG = 3;

private int day, month, year, hours, mins;


private TextView textStartDate, textStartTime,textClasses,textClassesPerWeek;
private EditText editBatchcode,editCourse,editPeriod, editRemarks;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.updatebatch);

textStartDate = (TextView) this.findViewById(R.id.textStartDate);


textStartTime = (TextView) this.findViewById(R.id.textStartTime);

editBatchcode = (EditText) this.findViewById(R.id.editBatchCode) ;


editCourse = (EditText) this.findViewById(R.id.editCourse) ;

386
editPeriod = (EditText) this.findViewById(R.id.editPeriod) ;
textClasses = (TextView) this.findViewById(R.id.textClasses) ;
textClassesPerWeek = (TextView) this.findViewById(R.id.textClassesPerWeek) ;
editRemarks = (EditText) this.findViewById(R.id.editRemarks) ;

// get details from database


String batchcode = getIntent().getStringExtra("batchcode");
Batch batch = Database.getBatch(this, batchcode);
if ( batch == null)
{
// error
}
else
{
editBatchcode.setText( batch.getCode());
editCourse.setText( batch.getCourse());
textStartDate.setText( batch.getStartdate());
textStartTime.setText( batch.getStarttime());
editPeriod.setText( batch.getPeriod());
textClasses.setText( batch.getClasses());
textClassesPerWeek.setText( batch.getClassesperweek());
editRemarks.setText( batch.getRemarks());

setDateToStartDate( batch.getStartdate());
setTimeToStartTime( batch.getStarttime());
}

private void setDateToStartDate(String startdate) {


String [] parts = startdate.split("-");
day = Integer.parseInt( parts[2]);
month =Integer.parseInt( parts[1]);
year = Integer.parseInt( parts[0]);
}

private void setTimeToStartTime(String starttime) {


String [] parts = starttime.split(":");
hours = Integer.parseInt( parts[0]);
mins =Integer.parseInt( parts[1]);
}

public void updateBatch(View v) {

387
boolean done = Database.updateBatch(this,
editBatchcode.getText().toString(),
editCourse.getText().toString(),
textStartTime.getText().toString(),
editPeriod.getText().toString(),
editRemarks.getText().toString());

if ( done )
Toast.makeText(this,"Updated batch successfully!",
Toast.LENGTH_LONG).show();
else
Toast.makeText(this,"Sorry! Could not update batch!",
Toast.LENGTH_LONG).show();

public void deleteBatch(View v) {


this.showDialog(DELETE_ALERT_DIALOG);
}

public void showDatePicker(View v) {


showDialog(DATE_DIALOG);
}

public void showTimePicker(View v) {


showDialog(TIME_DIALOG);
}

@Override
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);

switch (id) {
case DATE_DIALOG:
return new DatePickerDialog(this, dateSetListener, year, month, day);
case TIME_DIALOG:
return new TimePickerDialog(this, timeSetListener, hours,mins, false);
case DELETE_ALERT_DIALOG:
return getAlertDialog();
}
return null;

388
}

private DatePickerDialog.OnDateSetListener dateSetListener = new


DatePickerDialog.OnDateSetListener() {

public void onDateSet(DatePicker view, int pYear, int pMonth, int pDay) {
year = pYear;
month = pMonth;
day = pDay;
updateDateDisplay();
}
};

private TimePickerDialog.OnTimeSetListener timeSetListener =


new TimePickerDialog.OnTimeSetListener() {

@Override
public void onTimeSet(TimePicker arg0, int pHours, int pMins) {
hours = pHours;
mins = pMins;
updateTimeDisplay();
}

};

private void updateDateDisplay() {


// Month is 0 based so add 1
textStartDate.setText(String.format("%04d-%02d-%02d", year, month + 1,day));
}

private void updateTimeDisplay() {


// Month is 0 based so add 1
textStartTime.setText(String.format("%02d:%02d", hours,mins));
}

public Dialog getAlertDialog() {

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


builder.setMessage("Do you want to delete current batch?")
.setCancelable(false)
.setPositiveButton("Yes",

389
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {

boolean done =
Database.deleteBatch(UpdateBatchActivity.this, editBatchcode.getText().toString());

if ( done ) {
Toast.makeText(UpdateBatchActivity.this,"Deleted
batch successfully!", Toast.LENGTH_LONG).show();
UpdateBatchActivity.this.finish();
}
else
Toast.makeText(UpdateBatchActivity.this,"Sorry!
Could not delete batch!", Toast.LENGTH_LONG).show();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
return builder.create();
}

UpdateClassActivity

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public class UpdateClassActivity extends Activity {

390
private static final int TIME_DIALOG = 1;
private static final int CANCEL_ALERT_DIALOG = 2;
private static final int DELETE_ALERT_DIALOG = 3;

private int day, month, year, hours, mins;


private TextView textClassDate, textClassTime, textBatchCode;
private EditText editPeriod,editRemarks, editTopics;

private String classid;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.updateclass);

textClassDate = (TextView) this.findViewById(R.id.textClassDate);


textClassTime = (TextView) this.findViewById(R.id.textClassTime);

textBatchCode = (TextView) this.findViewById(R.id.textBatchCode);


editPeriod = (EditText) this.findViewById(R.id.editPeriod) ;
editTopics = (EditText) this.findViewById(R.id.editTopics) ;
editRemarks = (EditText) this.findViewById(R.id.editRemarks) ;

// get details from database


classid = getIntent().getStringExtra("classid");
Class clas = Database.getClass(this, classid);
if ( clas == null)
{
// error
}
else
{
textBatchCode.setText( clas.getBatchCode());
textClassDate.setText( clas.getClassDate());
textClassTime.setText( clas.getClassTime());
setTimeToStartTime(clas.getClassTime());
editPeriod.setText( clas.getPeriod());
editTopics.setText( clas.getTopics());
editRemarks.setText( clas.getRemarks());
}
}

391
private void setTimeToStartTime(String starttime) {
String [] parts = starttime.split(":");
hours = Integer.parseInt( parts[0]);
mins =Integer.parseInt( parts[1]);
}

public void updateClass(View v) {


boolean done = Database.updateClass(this,
classid,
textClassTime.getText().toString(),
editPeriod.getText().toString(),
editTopics.getText().toString(),
editRemarks.getText().toString());

if ( done )
Toast.makeText(this,"Updated class successfully!",
Toast.LENGTH_LONG).show();
else
Toast.makeText(this,"Sorry! Could not update class!",
Toast.LENGTH_LONG).show();
}

public void deleteClass(View v) {


this.showDialog(DELETE_ALERT_DIALOG);
}

public void cancelClass(View v) {


this.showDialog(CANCEL_ALERT_DIALOG);
}

public void showTimePicker(View v) {


showDialog(TIME_DIALOG);
}

@Override
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);

switch (id) {
case TIME_DIALOG:
return new TimePickerDialog(this, timeSetListener, hours,mins, false);
case CANCEL_ALERT_DIALOG:

392
return getCancelAlertDialog();
case DELETE_ALERT_DIALOG:
return getDeleteAlertDialog();
}
return null;
}

private TimePickerDialog.OnTimeSetListener timeSetListener =


new TimePickerDialog.OnTimeSetListener() {

@Override
public void onTimeSet(TimePicker arg0, int pHours, int pMins) {
hours = pHours;
mins = pMins;
updateTimeDisplay();
}

};

private void updateTimeDisplay() {


// Month is 0 based so add 1
textClassTime.setText(String.format("%02d:%02d", hours,mins));
}

public Dialog getDeleteAlertDialog() {


AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Do you want to delete current class?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {

boolean done =
Database.deleteClass(UpdateClassActivity.this, classid);

if ( done ) {
Toast.makeText(UpdateClassActivity.this,"Deleted
Class Successfully!", Toast.LENGTH_LONG).show();
UpdateClassActivity.this.finish();
}
else
Toast.makeText(UpdateClassActivity.this,"Sorry!

393
Could not delete class!", Toast.LENGTH_LONG).show();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
return builder.create();
}

public Dialog getCancelAlertDialog() {


AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Do you want to delete current class and add another
class?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
boolean done =
Database.cancelClass(UpdateClassActivity.this, textBatchCode.getText().toString(),
classid);
if ( done ) {
Toast.makeText(UpdateClassActivity.this,"Cancelled
current class and added new class successfully!", Toast.LENGTH_LONG).show();
UpdateClassActivity.this.finish();
}
else
Toast.makeText(UpdateClassActivity.this,"Sorry!
Could not cancel class!", Toast.LENGTH_LONG).show();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
return builder.create();
}

394
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.manju.myapplication.MainActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1"
android:id="@+id/Bdisplay"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="onButtonClick" />

</RelativeLayout>

Addbatch.xml

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


<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:stretchColumns="1" >

<TableRow >
<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"

395
android:text="Code" />
<EditText
android:id="@+id/editBatchCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<requestFocus />
</EditText>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Course" />

<EditText
android:id="@+id/editCourse"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</EditText>
</TableRow>

<TableRow >

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Start Date" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="showDatePicker"
android:src="@mipmap/ic_launcher" >
</ImageButton>

<TextView

396
android:id="@+id/textStartDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="2012-04-24" >
</TextView>
</LinearLayout>
</TableRow>

<TableRow >

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Start Time" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="showTimePicker"
android:src="@mipmap/ic_launcher" >
</ImageButton>

<TextView
android:id="@+id/textStartTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="19:00" >
</TextView>
</LinearLayout>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="No. Classes" />

397
<EditText
android:id="@+id/editClasses"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number" >

</EditText>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Classes Per Week" />

<EditText
android:id="@+id/editClassesPerWeek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number" >
</EditText>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Period (Min)" />

<EditText
android:id="@+id/editPeriod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number" >
</EditText>
</TableRow>

<TableRow >

398
<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Remarks" />

<EditText
android:id="@+id/editRemarks"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</EditText>
</TableRow>

<TableRow >

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="addBatch"
android:text="Add Batch" >
</Button>
</TableRow>
</TableLayout>

</ScrollView>

Addclass.xml

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


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow>
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Batch Code " />

<TextView
android:id="@+id/textBatchCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

399
android:textSize="20sp"
android:text="Hib2404" >
</TextView>

</TableRow>
<TableRow >
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Class Date" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="showDatePicker"
android:src="@mipmap/ic_launcher" >
</ImageButton>

<TextView
android:id="@+id/textClassDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="2012-04-24" >
</TextView>
</LinearLayout>
</TableRow>

<TableRow >

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Class Time" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageButton

400
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="showTimePicker"
android:src="@mipmap/ic_launcher" >
</ImageButton>

<TextView
android:id="@+id/textClassTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="19:00" >
</TextView>
</LinearLayout>
</TableRow>

<TableRow >
<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Period (Min)" />

<EditText
android:id="@+id/editPeriod"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:inputType="number" >

</EditText>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Topics" />

401
<EditText
android:id="@+id/editTopics"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

</EditText>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Remarks" />

<EditText
android:id="@+id/editRemarks"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</EditText>
</TableRow>

<TableRow android:layout_span="2">
<CheckBox
android:id="@+id/chkAdjust"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Adjust Last Class?" >
</CheckBox>
</TableRow>

<TableRow android:layout_span="2" android:gravity="center">


<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="addClass"
android:text="Add Class" >
</Button>
</TableRow>

</TableLayout>

402
Batch.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/textCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="code"
android:textSize="16sp" />

<TextView
android:id="@+id/textCourse"
android:gravity="right"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:text="Course"/>
</LinearLayout>

<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textStartDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:text="stdate" />

<TextView
android:id="@+id/textEndDate"
android:gravity="right"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:text="EndDate"/>

403
</LinearLayout>

<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">

<Button
android:id="@+id/btnClasses"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:text="List Classes" />

<Button
android:id="@+id/btnAddClass"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:text="Add Class" />

<Button
android:id="@+id/btnUpdate"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:text="Update" />

</LinearLayout>

<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:layout_width="match_parent"
android:layout_height="3dp"
android:background="#ff0000"
android:text="" />

</LinearLayout>

</LinearLayout>

404
Classrow.xml

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


<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/textNo"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="no" />

<TextView
android:id="@+id/textDate"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Date" />

<TextView
android:id="@+id/textTime"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Time" />

<ImageButton
android:id="@+id/btnUpdate"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:src="@mipmap/ic_launcher"
android:textSize="12sp" />

</TableRow>

Listbatches.xml

405
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
android:id="@+id/listBatches"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>

<Button
android:id="@+id/butAddBatch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="addBatch"
android:layout_gravity="center_horizontal"
android:text="Add New Batch" />

</LinearLayout>

Listclasses.xml

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


<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TableLayout
android:id="@+id/tableClasses"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="*">

<TableRow android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="80dp"
android:gravity="center"
android:layout_height="wrap_content"
android:text="Class No." />

406
<TextView
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Class Date" />

<TextView
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Class Time" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="" />
</TableRow>

<TableRow android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_span="4"
android:layout_height="3dp"
android:background="#ff0000"
android:text="" />
</TableRow>
</TableLayout>

</ScrollView>

Main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="fill_parent"


android:text="@string/hello"/>

407
</LinearLayout>

Updatebatch.xml

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


<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:stretchColumns="1" >

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Code" />

<EditText
android:id="@+id/editBatchCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<requestFocus />
</EditText>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Course" />

<EditText
android:id="@+id/editCourse"

408
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</EditText>
</TableRow>

<TableRow >

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Start Date" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textStartDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="2012-04-24"
android:textSize="20sp" >

</TextView>
</LinearLayout>
</TableRow>

<TableRow >

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Start Time" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageButton
android:layout_width="wrap_content"

409
android:layout_height="wrap_content"
android:onClick="showTimePicker"
android:src="@mipmap/ic_launcher" >

</ImageButton>

<TextView
android:id="@+id/textStartTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="19:00"
android:textSize="20sp" >

</TextView>
</LinearLayout>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="No. Classes" />

<TextView
android:id="@+id/textClasses"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />

</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Classes Per Week" />

410
<TextView
android:id="@+id/textClassesPerWeek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />

</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Period (Min)" />

<EditText
android:id="@+id/editPeriod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number" >
</EditText>
</TableRow>

<TableRow >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Remarks" />

<EditText
android:id="@+id/editRemarks"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</EditText>
</TableRow>

<TableRow>
<LinearLayout
android:layout_span="2"

411
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="updateBatch"
android:text="Update" >
</Button>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="deleteBatch"
android:text="Delete" >
</Button>
</LinearLayout>
</TableRow>
</TableLayout>

</ScrollView>

Updateclass.xml

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


<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Batch Code " />

<TextView
android:id="@+id/textBatchCode"
android:layout_width="wrap_content"

412
android:layout_height="wrap_content"
android:text="Hib2404"
android:textSize="20sp" >
</TextView>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Class Date" />

<TextView
android:id="@+id/textClassDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2012-04-24"
android:textSize="20sp" >
</TextView>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Class Time" />

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="showTimePicker"
android:src="@mipmap/ic_launcher" >
</ImageButton>

<TextView
android:id="@+id/textClassTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

413
android:paddingRight="10dp"
android:text="00:00"
android:textSize="20sp" >
</TextView>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Period (Min)" />

<EditText
android:id="@+id/editPeriod"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:inputType="number" >
</EditText>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Topics" />

<EditText
android:id="@+id/editTopics"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</EditText>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

414
<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Remarks" />

<EditText
android:id="@+id/editRemarks"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</EditText>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" >

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="updateClass"
android:text="Update" >
</Button>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="cancelClass"
android:text="Cancel Class" >
</Button>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="deleteClass"
android:text="Delete" >
</Button>
</LinearLayout>

</LinearLayout>

</ScrollView>

415
String.xml

<resources>
<string name="app_name">My Application</string>
<string name="action_settings">Settings</string>
<string name="hello">Hello World, ClassSchedulerActivity!</string>

</resources>

Manifest.xml file

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


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.manju.myapplication">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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


</intent-filter>
</activity>

<activity android:label="List Of Batches" android:name


=".ListBatchesActivity"/>

<activity android:label="Add Batch" android:name=".AddBatchActivity"/>

<activity android:label="List Classes" android:name=".ListClassesActivity"/>

<activity android:label="Add Class" android:name=".AddClassActivity"/>

416
<activity android:label="Update Batch" android:name=".UpdateBatchActivity"/>

<activity android:label="Update Class" android:name=".UpdateClassActivity"/>

</application>

</manifest>

 Bank details application

ListAccounts.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class ListAccounts extends AppCompatActivity {

ListView listAccounts;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listaccounts);
listAccounts = (ListView) this.findViewById(R.id.listAccounts);
listAccounts.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View selectedView, int

417
arg2,long arg3) {
TextView textAccountId = (TextView)
selectedView.findViewById(R.id.textAccountId);
Log.d("Accounts", "Selected Account Id : " +
textAccountId.getText().toString());
Intent intent = new Intent(ListAccounts.this, UpdateAccount.class);
intent.putExtra("accountid", textAccountId.getText().toString());
startActivity(intent);
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
return Utils.inflateMenu(this,menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return Utils.handleMenuOption(this,item);
}

@Override
public void onStart() {
super.onStart();
try {
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor accounts = db.query(
Database.ACCOUNTS_TABLE_NAME,null,null,null,null,null,null);

String from [] = { Database.ACCOUNTS_ID, Database.ACCOUNTS_BANK,


Database.ACCOUNTS_HOLDERS, Database.ACCOUNTS_BALANCE };
int to [] = { R.id.textAccountId,R.id.textBank, R.id.textHolder,
R.id.textBalance};

SimpleCursorAdapter ca = new SimpleCursorAdapter(this,R.layout.account,


accounts,from,to);

ListView listAccounts = (ListView) this.findViewById( R.id.listAccounts);


listAccounts.setAdapter(ca);
dbhelper.close();
} catch (Exception ex) {

418
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}

public void addAccount(View v)


{
Intent intent = new Intent(this,AddAccount.class);
startActivity(intent);
}

public void addTransaction(View v)


{
Intent intent = new Intent(this,AddTransaction.class);
startActivity(intent);
}

public void recentTransactions(View v)


{
Intent intent = new Intent(this,ListRecentTransactions.class);
startActivity(intent);
}
}

Account.java

public class Account {


private String id,acno,bank,branch,holder;

public String getId() {


return id;
}

public void setId(String id) {


this.id = id;
}

public String getAcno() {


return acno;
}

public void setAcno(String acno) {


this.acno = acno;

419
}

public String getBank() {


return bank;
}

public void setBank(String bank) {


this.bank = bank;
}

public String getBranch() {


return branch;
}

public void setBranch(String branch) {


this.branch = branch;
}

public String getHolder() {


return holder;
}

public void setHolder(String holder) {


this.holder = holder;
}

@Override
public String toString() {
return holder + " - " + bank;
}

AddAccount.java

import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

420
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class AddAccount extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addaccount);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
return Utils.inflateMenu(this,menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return Utils.handleMenuOption(this,item);
}

public void addAccount(View v) {


// get access to views
EditText editAcno = (EditText) this.findViewById(R.id.editAcno);
EditText editCno = (EditText) this.findViewById(R.id.editCno);
EditText editHolders = (EditText) this.findViewById(R.id.editHolders);
EditText editBankName = (EditText) this.findViewById(R.id.editBankName);
EditText editBranchName = (EditText) this.findViewById(R.id.editBranchName);
EditText editAddress = (EditText) this.findViewById(R.id.editAddress);
EditText editIFSC = (EditText) this.findViewById(R.id.editIFSC);
EditText editMICR = (EditText) this.findViewById(R.id.editMICR);
EditText editBalance = (EditText) this.findViewById(R.id.editBalance);
EditText editRemarks = (EditText) this.findViewById(R.id.editRemarks);

try {
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getWritableDatabase();
Log.d("Account","Got Writable database");
// execute insert command

ContentValues values = new ContentValues();


values.put( Database.ACCOUNTS_ACNO, editAcno.getText().toString());

421
values.put( Database.ACCOUNTS_CNO, editCno.getText().toString());
values.put( Database.ACCOUNTS_HOLDERS, editHolders.getText().toString());
values.put( Database.ACCOUNTS_BANK, editBankName.getText().toString());
values.put( Database.ACCOUNTS_BRANCH,
editBranchName.getText().toString());
values.put( Database.ACCOUNTS_ADDRESS, editAddress.getText().toString());
values.put( Database.ACCOUNTS_IFSC, editIFSC.getText().toString());
values.put( Database.ACCOUNTS_MICR, editMICR.getText().toString());
values.put( Database.ACCOUNTS_BALANCE, editBalance.getText().toString());
values.put( Database.ACCOUNTS_REMARKS, editRemarks.getText().toString());

long rows = db.insert(Database.ACCOUNTS_TABLE_NAME, null, values);


db.close();
if ( rows > 0) {
Toast.makeText(this, "Added Account Successfully!",
Toast.LENGTH_LONG).show();
this.finish();
}
else
Toast.makeText(this, "Sorry! Could not add account!",
Toast.LENGTH_LONG).show();

} catch (Exception ex) {


Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}

AddTransaction

import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioButton;

422
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class AddTransaction extends Activity {


private Spinner spinnerAccounts;
private TextView textTransDate;
private int day, month, year;
private final int DATE_DIALOG = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_transaction);
spinnerAccounts = (Spinner) this.findViewById(R.id.spinnerAccounts);
Database.populateAccounts(spinnerAccounts);
textTransDate = (TextView) this.findViewById(R.id.textTransDate);
// get the current date
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
updateDateDisplay();
}

private DatePickerDialog.OnDateSetListener dateSetListener =


new DatePickerDialog.OnDateSetListener() {

public void onDateSet(DatePicker view, int pYear,int pMonth, int pDay)


{
year = pYear;
month = pMonth;
day = pDay;
updateDateDisplay();
}
};

@Override
public void onStart() {
super.onStart();

423
public void showDateDialog(View v) {
showDialog(DATE_DIALOG);
}

@Override
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);

switch (id) {
case DATE_DIALOG:
return new DatePickerDialog(this,
dateSetListener, year, month, day);
}
return null;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
return Utils.inflateMenu(this,menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return Utils.handleMenuOption(this,item);
}

private void updateDateDisplay() {


// Month is 0 based so add 1
textTransDate.setText( String.format("%d-%d-%d",year,month + 1,day));
}

public void addTransaction(View v) {


// get access to views
String accountId = Database.getAccountId(spinnerAccounts);
RadioButton radioDeposit = (RadioButton)
this.findViewById(R.id.radioDeposit);

EditText editTransAmount = (EditText) this.findViewById(R.id.editTransAmount);


EditText editChequeNo = (EditText) this.findViewById(R.id.editChequeNo);
EditText editChequeParty = (EditText) this.findViewById(R.id.editChequeParty);
EditText editChequeDetails = (EditText)
this.findViewById(R.id.editChequeDetails);
EditText editRemarks = (EditText) this.findViewById(R.id.editRemarks);

424
boolean done = Database.addTransaction(this,
accountId,
radioDeposit.isChecked() ? "d" : "w", // trans type
textTransDate.getText().toString(),
editTransAmount.getText().toString(),
editChequeNo.getText().toString(),
editChequeParty.getText().toString(),
editChequeDetails.getText().toString(),
editRemarks.getText().toString());

if ( done )
Toast.makeText(this,"Added Transaction Successfully!",
Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "Sorry Could Not Add Transaction!",
Toast.LENGTH_LONG).show();
} // addDeposit
}

Database

import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.Spinner;

public class Database {


public static final String ACCOUNTS_TABLE_NAME = "accounts";
public static final String ACCOUNTS_ID = "_id";
public static final String ACCOUNTS_ACNO = "acno";
public static final String ACCOUNTS_HOLDERS = "holders";
public static final String ACCOUNTS_CNO = "customerno";
public static final String ACCOUNTS_BANK = "bank";
public static final String ACCOUNTS_BRANCH = "branch";
public static final String ACCOUNTS_ADDRESS = "address";
public static final String ACCOUNTS_IFSC = "ifsc";
public static final String ACCOUNTS_MICR = "micr";

425
public static final String ACCOUNTS_BALANCE = "balance";
public static final String ACCOUNTS_LASTTRANS = "last_tran_date";
public static final String ACCOUNTS_REMARKS = "remarks";

public static final String TRANSACTIONS_TABLE_NAME = "transactions";


public static final String TRANSACTIONS_ID = "_id";
public static final String TRANSACTIONS_ACCOUNT_ID = "account_id";
public static final String TRANSACTIONS_TRANSDATE = "transdate";
public static final String TRANSACTIONS_TRANSTYPE = "transtype";
public static final String TRANSACTIONS_TRANSAMOUNT = "transamount";
public static final String TRANSACTIONS_CHEQUE_NO = "cheque_no";
public static final String TRANSACTIONS_CHEQUE_PARTY = "cheque_party";
public static final String TRANSACTIONS_CHEQUE_DETAILS = "cheque_details";
public static final String TRANSACTIONS_REMARKS = "remarks";

public static Account cursorToAccount(Cursor accounts) {


Account account = new Account();
account.setId(
accounts.getString(accounts.getColumnIndex(Database.ACCOUNTS_ID)));

account.setHolder(accounts.getString(accounts.getColumnIndex(Database.ACCOUNTS_HOLDERS
)));
account.setBank(
accounts.getString(accounts.getColumnIndex(Database.ACCOUNTS_BANK)));
return account;
}

public static void populateAccounts(Spinner spinnerAccounts) {


Context context = spinnerAccounts.getContext();
DBHelper dbhelper = new DBHelper(context);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor accounts = db.query(Database.ACCOUNTS_TABLE_NAME, null, null,null,
null, null, null);
ArrayList<Account> list = new ArrayList<Account>();

//
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
while (accounts.moveToNext()) {
Account account = Database.cursorToAccount(accounts);
list.add(account);
}
accounts.close();
db.close();
dbhelper.close();

426
ArrayAdapter<Account> adapter = new ArrayAdapter<Account>(context,
android.R.layout.simple_spinner_item,list);
spinnerAccounts.setAdapter(adapter);
}

public static boolean updateAccountBalance(SQLiteDatabase db, String accountId,


String transType, double amount, String transDate) {
try {
if ( transType.equals("d"))
db.execSQL( " update " + Database.ACCOUNTS_TABLE_NAME + " set balance
= balance + " + amount + " where " + Database.ACCOUNTS_ID + " = " + accountId);
else
db.execSQL( " update " + Database.ACCOUNTS_TABLE_NAME + " set balance
= balance - " + amount + " where " + Database.ACCOUNTS_ID + " = " + accountId);
return true;
}
catch(Exception ex) {
Log.d("Accounts", "Error in UpdateBalance : " + ex.getMessage());
return false;
}
}

public static String getAccountId(Spinner spinnerAccounts) {


Account account = (Account) spinnerAccounts.getSelectedItem();
return account.getId();
}

public static String getDateFromDatePicker(DatePicker dp) {


return dp.getYear() + "-" + dp.getMonth() + 1 + "-" + dp.getDayOfMonth();
}

public static boolean addTransaction(Context context, String accountId, String


transType, String transDate, String transAmount, String chequeNo, String chequeParty,
String chequeDetails, String remarks) {

DBHelper dbhelper = null;


SQLiteDatabase db = null;
try {
dbhelper = new DBHelper(context);
db = dbhelper.getWritableDatabase();
db.beginTransaction();

// execute insert command

427
ContentValues values = new ContentValues();
values.put(Database.TRANSACTIONS_ACCOUNT_ID, accountId);
values.put(Database.TRANSACTIONS_TRANSDATE, transDate);
values.put(Database.TRANSACTIONS_TRANSAMOUNT, transAmount);
values.put(Database.TRANSACTIONS_CHEQUE_NO, chequeNo);
values.put(Database.TRANSACTIONS_CHEQUE_PARTY, chequeParty);
values.put(Database.TRANSACTIONS_CHEQUE_DETAILS,chequeDetails);
values.put(Database.TRANSACTIONS_REMARKS, remarks);
values.put(Database.TRANSACTIONS_TRANSTYPE, transType);

long rowid = db.insert(Database.TRANSACTIONS_TABLE_NAME, null, values);


Log.d("Accounts","Inserted into TRANSACTIONS " + rowid);
if ( rowid != -1) {
// update Accounts Table
boolean done = Database.updateAccountBalance(db,accountId,transType,
Double.parseDouble(transAmount),transDate);
Log.d("Accounts","Updated Account Balance");
if ( done ) {
db.setTransactionSuccessful();
db.endTransaction();
return true;
}
else {
db.endTransaction();
return false;
}
}
else
return false;
}
catch(Exception ex) {
Log.d("Account", "Error in addTransaction -->" + ex.getMessage());
return false;
}
finally {
if ( db != null && db.isOpen()) {
db.close();
}
}
} // addTransaction

428
DBHelper.java

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper {


public static final int DB_VERSION = 1;
public static final String DB_NAME = "accounts.db";

public DBHelper(Context ctx) {


super(ctx, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
createTables(db);
}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

public void createTables(SQLiteDatabase database) {


String account_table_sql = "create table " + Database.ACCOUNTS_TABLE_NAME + "
( " +
Database.ACCOUNTS_ID + " integer primary key autoincrement," +
Database.ACCOUNTS_ACNO + " TEXT," +
Database.ACCOUNTS_HOLDERS + " TEXT," +
Database.ACCOUNTS_CNO + " TEXT," +
Database.ACCOUNTS_BANK + " TEXT," +
Database.ACCOUNTS_BRANCH + " TEXT," +
Database.ACCOUNTS_ADDRESS + " TEXT," +
Database.ACCOUNTS_IFSC + " TEXT," +
Database.ACCOUNTS_MICR + " TEXT," +
Database.ACCOUNTS_BALANCE + " FLOAT," +
Database.ACCOUNTS_LASTTRANS + " TEXT," +
Database.ACCOUNTS_REMARKS + " TEXT)";

429
String transactions_table_sql = "create table " +
Database.TRANSACTIONS_TABLE_NAME + " ( " +
Database.TRANSACTIONS_ID + " integer primary key autoincrement," +
Database.TRANSACTIONS_ACCOUNT_ID + " TEXT," +
Database.TRANSACTIONS_TRANSDATE + " TEXT," +
Database.TRANSACTIONS_TRANSAMOUNT + " FLOAT," +
Database.TRANSACTIONS_TRANSTYPE+ " TEXT," +
Database.TRANSACTIONS_CHEQUE_NO + " TEXT," +
Database.TRANSACTIONS_CHEQUE_PARTY + " TEXT," +
Database.TRANSACTIONS_CHEQUE_DETAILS+ " TEXT," +
Database.TRANSACTIONS_REMARKS + " TEXT)";

try {
database.execSQL(account_table_sql);
database.execSQL(transactions_table_sql);
Log.d("Accounts","Tables created!");

}
catch(Exception ex) {
Log.d("Accounts", "Error in DBHelper.onCreate() : " + ex.getMessage());
}
}

ListAccountTransactions.java

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.opengl.Visibility;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

430
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class ListAccountTransactions extends Activity {


ListView listTransactions;
String accountId;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_account_transactions);
accountId = this.getIntent().getStringExtra("accountid");
listTransactions = (ListView) this.findViewById(R.id.listTransactions);

listTransactions.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View selectedView,
int arg2, long arg3) {
TextView textTransId = (TextView) selectedView
.findViewById(R.id.textTransId);
Intent intent = new Intent(ListAccountTransactions.this,
TransactionDetails.class);
intent.putExtra("transid", textTransId.getText().toString());
startActivity(intent);
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
return Utils.inflateMenu(this, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return Utils.handleMenuOption(this, item);
}

@Override
public void onStart() {

431
super.onStart();
try {
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor trans = db.query(Database.TRANSACTIONS_TABLE_NAME, null,
Database.TRANSACTIONS_ACCOUNT_ID + " = ?",
new String[] { accountId }, null, null,
Database.TRANSACTIONS_TRANSDATE + " desc");

if (trans.getCount() == 0 ) // no trans found


{
// turn off tablelayout and turnon textview for no transactions
// display
this.findViewById(R.id.heading).setVisibility(View.INVISIBLE);
this.findViewById(R.id.textError).setVisibility(View.VISIBLE);
} else {
this.findViewById(R.id.heading).setVisibility(View.VISIBLE);
this.findViewById(R.id.textError).setVisibility(View.INVISIBLE);
}

ArrayList<Map<String, String>> listTrans = new ArrayList<Map<String,


String>>();
while (trans.moveToNext()) {

// get trans details for display


LinkedHashMap<String, String> tran = new LinkedHashMap<String,
String>();
tran.put("transid", trans.getString(trans
.getColumnIndex(Database.TRANSACTIONS_ID)));
tran.put("transdate", trans.getString(trans
.getColumnIndex(Database.TRANSACTIONS_TRANSDATE)));
String transType = trans.getString(trans
.getColumnIndex(Database.TRANSACTIONS_TRANSTYPE));
String transAmount = trans.getString(trans
.getColumnIndex(Database.TRANSACTIONS_TRANSAMOUNT));
String chequeno = trans.getString(trans
.getColumnIndex(Database.TRANSACTIONS_CHEQUE_NO));
String transDetails = "Cash";
if (!chequeno.trim().equals(""))
transDetails = "Cheque No: " + chequeno;
tran.put("transdetails", transDetails);
tran.put("transtype", transType);
tran.put("transamount", transAmount);
listTrans.add(tran);

432
}
trans.close();
db.close();
dbhelper.close();

SimpleAdapter adapter = new SimpleAdapter(this, listTrans,


R.layout.account_transaction, new String[] { "transid",
"transdate", "transdetails", "transtype",
"transamount" }, new int[] { R.id.textTransId,
R.id.textTransDate, R.id.textTransDetails,
R.id.textTransType, R.id.textAmount });

listTransactions.setAdapter(adapter);
} catch (Exception ex) {
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}

ListRecentTransactions.java

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class ListRecentTransactions extends Activity {


ListView listTransactions;
String fromDate,toDate,fromAmount,toAmount;

433
String condition = " 1 = 1 ";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_transactions);
listTransactions = (ListView) this.findViewById(R.id.listTransactions);

listTransactions.setOnItemClickListener( new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> parent, View selectedView, int
arg2,long arg3) {
TextView textTransId = (TextView)
selectedView.findViewById(R.id.textTransId);
Intent intent = new Intent(ListRecentTransactions.this,
TransactionDetails.class);
intent.putExtra("transid", textTransId.getText().toString());
startActivity(intent);
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
return Utils.inflateMenu(this,menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return Utils.handleMenuOption(this,item);
}

@Override
public void onStart() {
super.onStart();
try {
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor trans = db.rawQuery("select t._id, acno,bank,
transdate,transamount,transtype,cheque_no,cheque_party,cheque_details, t.remarks from
transactions t inner join accounts a on ( a._id = t.account_id) order by transdate
desc LIMIT 10",null);
if ( trans.getCount() == 0 )
this.findViewById(R.id.textError).setVisibility(View.VISIBLE);

434
else
this.findViewById(R.id.textError).setVisibility(View.INVISIBLE);

ArrayList<Map<String,String>> listTrans = new


ArrayList<Map<String,String>>();
while ( trans.moveToNext()) {
// get trans details for display
LinkedHashMap<String,String> tran = new
LinkedHashMap<String,String>();
tran.put("transid",
trans.getString(trans.getColumnIndex(Database.TRANSACTIONS_ID)));
tran.put("acno",
trans.getString(trans.getColumnIndex(Database.ACCOUNTS_ACNO)) + " - " +
trans.getString(trans.getColumnIndex(Database.ACCOUNTS_BANK)));

tran.put("transdate",trans.getString(trans.getColumnIndex(Database.TRANSACTIONS_TRANSD
ATE)));

tran.put("transtype",trans.getString(trans.getColumnIndex(Database.TRANSACTIONS_TRANST
YPE)));

tran.put("transamount",trans.getString(trans.getColumnIndex(Database.TRANSACTIONS_TRAN
SAMOUNT)));

tran.put("transremarks",trans.getString(trans.getColumnIndex(Database.TRANSACTIONS_REM
ARKS)));

String chequeno =
trans.getString(trans.getColumnIndex(Database.TRANSACTIONS_CHEQUE_NO));
String transDetails = "Cash";
if (! chequeno.trim().equals(""))
transDetails = "Cheque No: " + chequeno;

tran.put("transdetails",transDetails);
listTrans.add(tran);
}
trans.close();
db.close();
dbhelper.close();

SimpleAdapter adapter = new SimpleAdapter(this,


listTrans,
R.layout.transaction,
new String [] {"transid", "acno", "transdate", "transdetails",

435
"transtype", "transamount" ,"transremarks"},
new int [] { R.id.textTransId, R.id.textAcno,
R.id.textTransDate, R.id.textTransDetails, R.id.textTransType, R.id.textTransAmount,
R.id.textTransRemarks});

listTransactions.setAdapter(adapter);
} catch (Exception ex) {
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}

SearchTransactions.java

import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class SearchTransactions extends Activity {


private EditText editFromDate,editToDate,editFromAmount,editToAmount;
private int fromDay, fromMonth, fromYear;
private int toDay, toMonth, toYear;
private final int FROM_DATE_DIALOG = 1;
private final int TO_DATE_DIALOG = 2;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

436
setContentView(R.layout.search_transactions);
editFromDate = (EditText) this.findViewById(R.id.editFromDate);
editToDate = (EditText) this.findViewById(R.id.editToDate);

editFromAmount = (EditText) this.findViewById(R.id.editFromAmount);


editToAmount = (EditText) this.findViewById(R.id.editToAmount);

// get the current date


final Calendar c = Calendar.getInstance();
fromYear = toYear = c.get(Calendar.YEAR);
fromMonth = toMonth = c.get(Calendar.MONTH);
toDay = c.get(Calendar.DAY_OF_MONTH);

fromDay = 1; // from is set to 1st of the current month

updateToDateDisplay();
updateFromDateDisplay();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return Utils.inflateMenu(this,menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return Utils.handleMenuOption(this,item);
}

private DatePickerDialog.OnDateSetListener fromDateSetListener =


new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int pYear,int pMonth, int pDay)
{
fromYear = pYear;
fromMonth = pMonth;
fromDay = pDay;
updateFromDateDisplay();
}
};

private DatePickerDialog.OnDateSetListener toDateSetListener =


new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int pYear,int pMonth, int pDay)
{

437
toYear = pYear;
toMonth = pMonth;
toDay = pDay;
updateToDateDisplay();
}
};

public void showFromDateDialog(View v) {


showDialog(FROM_DATE_DIALOG);
}

public void showToDateDialog(View v) {


showDialog(TO_DATE_DIALOG);
}

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case FROM_DATE_DIALOG:
return new DatePickerDialog(this,
fromDateSetListener, fromYear, fromMonth, fromDay);
case TO_DATE_DIALOG:
return new DatePickerDialog(this,
toDateSetListener, toYear, toMonth, toDay);
}
return null;
}

private void updateToDateDisplay() {


// Month is 0 based so add 1
editToDate.setText( String.format("%d-%d-%d",toYear,toMonth + 1,toDay));
}
private void updateFromDateDisplay() {
// Month is 0 based so add 1
editFromDate.setText( String.format("%d-%d-%d",fromYear,fromMonth +
1,fromDay));
}

public void searchTransactions(View v) {


Intent intent = new Intent(this, ListTransactions.class);
intent.putExtra("fromdate", editFromDate.getText().toString());
intent.putExtra("todate", editToDate.getText().toString());
intent.putExtra("fromamount", editFromAmount.getText().toString());
intent.putExtra("toamount", editToAmount.getText().toString());

438
startActivity(intent);
}

public void clearFields(View v) {

editFromDate.setText("");
editToDate.setText("");
editFromAmount.setText("");
editToAmount.setText("");
}

TransactionDetails.java

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class TransactionDetails extends Activity {


private String transId;
private String accountId;
private TextView textAcno;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.transaction_details);

transId = this.getIntent().getStringExtra("transid");
Log.d("Account", "Trans id : " + transId);

439
textAcno = (TextView) this.findViewById(R.id.textAcno);
TextView textTransDate = (TextView) this.findViewById(R.id.textTransDate);
TextView textTransType = (TextView) this.findViewById(R.id.textTransType);
TextView textTransAmount = (TextView) this.findViewById(R.id.textTransAmount);
TextView textChequeNo = (TextView) this.findViewById(R.id.textChequeNo);
TextView textChequeParty = (TextView) this.findViewById(R.id.textChequeParty);
TextView textChequeDetails = (TextView)
this.findViewById(R.id.textChequeDetails);
TextView textRemarks = (TextView) this.findViewById(R.id.textTransRemarks);

DBHelper dbhelper = new DBHelper(this);


SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor tran = db.rawQuery("select
acno,account_id,transdate,transamount,transtype,cheque_no,cheque_party,cheque_details,
t.remarks from transactions t inner join accounts a on ( a._id = t.account_id) where
t._id = ?",
new String[] {transId });

if (tran.moveToFirst()) {
accountId =
tran.getString(tran.getColumnIndex(Database.TRANSACTIONS_ACCOUNT_ID));
textAcno.setText(
tran.getString(tran.getColumnIndex(Database.ACCOUNTS_ACNO)));
textTransDate.setText(
tran.getString(tran.getColumnIndex(Database.TRANSACTIONS_TRANSDATE)));
textTransType.setText(
tran.getString(tran.getColumnIndex(Database.TRANSACTIONS_TRANSTYPE)));
textTransAmount.setText(
tran.getString(tran.getColumnIndex(Database.TRANSACTIONS_TRANSAMOUNT)));
textChequeNo.setText(
tran.getString(tran.getColumnIndex(Database.TRANSACTIONS_CHEQUE_NO)));
textChequeParty.setText(
tran.getString(tran.getColumnIndex(Database.TRANSACTIONS_CHEQUE_PARTY)));
textChequeDetails.setText(
tran.getString(tran.getColumnIndex(Database.TRANSACTIONS_CHEQUE_DETAILS)));

textRemarks.setText(tran.getString(tran.getColumnIndex(Database.TRANSACTIONS_REMARKS))
);
}
else
Log.d("Accounts","No transaction found!");

440
db.close();
dbhelper.close();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
return Utils.inflateMenu(this,menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return Utils.handleMenuOption(this,item);
}

public void deleteTransaction(View v) {


AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to delete this transaction?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
deleteCurrentTransaction();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}

public void deleteCurrentTransaction() {


try {
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getWritableDatabase();
int rows = db.delete(Database.TRANSACTIONS_TABLE_NAME, "_id=?", new
String[] { transId});
dbhelper.close();
if ( rows == 1) {
Toast.makeText(this, "Transaction Deleted Successfully!",
Toast.LENGTH_LONG).show();
this.finish();

441
}
else
Toast.makeText(this, "Could not delet transaction!",
Toast.LENGTH_LONG).show();
}
catch (Exception ex) {
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}

public void showAccountDetails(View v) {


Intent intent = new Intent(this,UpdateAccount.class);
intent.putExtra("accountid", accountId);
startActivity(intent);
}
}

UpdateAccount.java

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class UpdateAccount extends Activity {


private String accountId;
private EditText editAcno, editCno, editHolders, editBankName,
editBranchName, editAddress, editIFSC, editMICR, editBalance,
editRemarks;

@Override

442
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.update_account);
editAcno = (EditText) this.findViewById(R.id.editAcno);
editCno = (EditText) this.findViewById(R.id.editCno);
editHolders = (EditText) this.findViewById(R.id.editHolders);
editBankName = (EditText) this.findViewById(R.id.editBankName);
editBranchName = (EditText) this.findViewById(R.id.editBranchName);
editAddress = (EditText) this.findViewById(R.id.editAddress);
editIFSC = (EditText) this.findViewById(R.id.editIFSC);
editMICR = (EditText) this.findViewById(R.id.editMICR);
editBalance = (EditText) this.findViewById(R.id.editBalance);
editRemarks = (EditText) this.findViewById(R.id.editRemarks);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
return Utils.inflateMenu(this,menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return Utils.handleMenuOption(this,item);
}

@Override
public void onStart() {
super.onStart();
accountId = this.getIntent().getStringExtra("accountid");
Log.d("Accounts", "Account Id : " + accountId);
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor account = db.query(Database.ACCOUNTS_TABLE_NAME, null,
" _id = ?", new String[] { accountId }, null, null, null);
//startManagingCursor(accounts);
if (account.moveToFirst()) {
// update view
editAcno.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_ACNO)));
editCno.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_CNO)));
editHolders.setText(account.getString(account

443
.getColumnIndex(Database.ACCOUNTS_HOLDERS)));
editBankName.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_BANK)));
editBranchName.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_BRANCH)));
editAddress.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_ADDRESS)));
editIFSC.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_IFSC)));
editMICR.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_MICR)));
editBalance.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_BALANCE)));
editRemarks.setText(account.getString(account
.getColumnIndex(Database.ACCOUNTS_REMARKS)));
}
account.close();
db.close();
dbhelper.close();

public void updateAccount(View v) {


try {
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getWritableDatabase();
// execute insert command
ContentValues values = new ContentValues();
values.put(Database.ACCOUNTS_ACNO, editAcno.getText().toString());
values.put(Database.ACCOUNTS_CNO, editCno.getText().toString());
values.put(Database.ACCOUNTS_HOLDERS, editHolders.getText()
.toString());
values.put(Database.ACCOUNTS_BANK, editBankName.getText()
.toString());
values.put(Database.ACCOUNTS_BRANCH, editBranchName.getText()
.toString());
values.put(Database.ACCOUNTS_ADDRESS, editAddress.getText()
.toString());
values.put(Database.ACCOUNTS_IFSC, editIFSC.getText().toString());
values.put(Database.ACCOUNTS_MICR, editMICR.getText().toString());
values.put(Database.ACCOUNTS_BALANCE, editBalance.getText()
.toString());
values.put(Database.ACCOUNTS_REMARKS, editRemarks.getText()
.toString());

444
long rows = db.update(Database.ACCOUNTS_TABLE_NAME, values,
"_id = ?", new String[] { accountId });

db.close();
if (rows > 0)
Toast.makeText(this, "Updated Account Successfully!",
Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "Sorry! Could not update account!",
Toast.LENGTH_LONG).show();
} catch (Exception ex) {
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}

public void deleteAccount(View v) {


AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to delete this account?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
deleteCurrentAccount();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}

public void deleteCurrentAccount() {


try {
DBHelper dbhelper = new DBHelper(this);
SQLiteDatabase db = dbhelper.getWritableDatabase();
int rows = db.delete(Database.ACCOUNTS_TABLE_NAME, "_id=?", new String[] {
accountId});
dbhelper.close();
if ( rows == 1) {

445
Toast.makeText(this, "Account Deleted Successfully!",
Toast.LENGTH_LONG).show();
this.finish();
}
else
Toast.makeText(this, "Could not delet account!",
Toast.LENGTH_LONG).show();

} catch (Exception ex) {


Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}

public void listAccountTransactions(View v) {


Intent intent = new Intent(this,ListAccountTransactions.class);
intent.putExtra("accountid", accountId);
startActivity(intent);
}
}

Utils.java

import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class Utils {

public static boolean inflateMenu(Activity activity, Menu menu) {


MenuInflater inflater = activity.getMenuInflater();
inflater.inflate( R.menu.common_menu, menu);
return true;
}

public static boolean handleMenuOption(Activity activity, MenuItem item) {


Intent intent;
switch(item.getItemId()) {
case R.id.optAddAccount :
intent = new Intent(activity,AddAccount.class);

446
activity.startActivity(intent);
break;
case R.id.optAddTransaction :
intent = new Intent(activity,AddTransaction.class);
activity.startActivity(intent);
break;

case R.id.optSearchTransactions :
intent = new Intent(activity,SearchTransactions.class);
activity.startActivity(intent);
break;
case R.id.optListAccounts :
intent = new Intent(activity,ListAccounts.class);
activity.startActivity(intent);
break;

case R.id.optRecentTransactions :
intent = new Intent(activity,ListRecentTransactions.class);
activity.startActivity(intent);
break;
}
return true;
}

listaccounts.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

<ListView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/listAccounts"> </ListView>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:text="Tap on the account to get details!" android:gravity="center"
android:textStyle="bold" android:textColor="#0000ff"/>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="match_parent"

447
android:gravity="center">

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/btnAddAccount" android:text="Add
Account" android:onClick="addAccount"/>

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/btnAddTransaction"
android:text="Add Trans" android:onClick="addTransaction"/>

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/btnRecentTransactions"
android:text="Recent Trans" android:onClick="recentTransactions"/>

</LinearLayout>

</LinearLayout>

account.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

-<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="match_parent">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="" android:visibility="invisible" android:id="@+id/textAccountId"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="" android:id="@+id/textBank"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="-"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="" android:id="@+id/textHolder"/>

448
-<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="match_parent"
android:gravity="right" android:layout_weight="1">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="balance" android:id="@+id/textBalance"/>

</LinearLayout>

</LinearLayout>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:text="" android:height="2dip" android:background="#ffffff"/>

</LinearLayout>

account_transaction.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

-<TableLayout android:layout_height="wrap_content"
android:layout_width="match_parent" android:stretchColumns="2">

-<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="" android:visibility="invisible" android:id="@+id/textTransId"/>

<TextView android:layout_height="wrap_content" android:layout_width="70dp"


android:text="transdate" android:id="@+id/textTransDate"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Detaifdsfsdf dsafsdfsdf sdf fdsaf safdsafdsls"
android:id="@+id/textTransDetails" android:singleLine="false"
android:scrollHorizontally="false"/>

<TextView android:layout_height="wrap_content" android:layout_width="50dp"

449
android:text="Type" android:id="@+id/textTransType" android:gravity="center"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="" android:id="@+id/textAmount" android:gravity="right"
android:minWidth="70dp"/>

</TableRow>

</TableLayout>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:text="" android:height="2dip" android:background="#ffffff"/>

</LinearLayout>

add_transaction.xml

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

<ScrollView android:layout_height="match_parent" android:layout_width="match_parent"


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

<TableLayout android:layout_height="match_parent"
android:layout_width="match_parent">

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Account :"/>

<Spinner android:layout_height="wrap_content" android:layout_width="wrap_content"


android:prompt="@string/accountsprompt" android:id="@+id/spinnerAccounts"> </Spinner>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:text="Type"/>

450
<RadioGroup android:layout_height="wrap_content"
android:layout_width="wrap_content" android:orientation="horizontal">

<RadioButton android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Deposit"
android:id="@+id/radioDeposit" android:checked="true"/>

<RadioButton android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Withdraw"
android:id="@+id/radioWithdraw"/>

</RadioGroup>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Date :"/>

<LinearLayout android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_marginBottom="5dp"
android:padding="5dp">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="sysdate" android:id="@+id/textTransDate"/>

<ImageButton android:layout_height="20dp" android:layout_width="20dp"


android:id="@+id/buttonDateDialog" android:onClick="showDateDialog"
android:src="@mipmap/ic_launcher" android:layout_marginLeft="10dp"> </ImageButton>

</LinearLayout>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Amount :"/>

<EditText android:layout_height="wrap_content" android:layout_width="120dp"

451
android:id="@+id/editTransAmount" android:inputType="numberDecimal"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Cheque No."/>

<EditText android:layout_height="wrap_content" android:layout_width="120dp"


android:id="@+id/editChequeNo" android:inputType="number"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Cheque Party :"/>

<EditText android:layout_height="wrap_content" android:layout_width="120dp"


android:id="@+id/editChequeParty" android:inputType="text"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Cheque Details :"/>

<EditText android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/editChequeDetails" android:inputType="text"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Remarks "/>

<EditText android:layout_height="wrap_content" android:layout_width="match_parent"

452
android:id="@+id/editRemarks" android:inputType="text" android:layout_weight="1">
</EditText>

</TableRow>

<TableRow>

<Button android:layout_height="40dp" android:layout_width="wrap_content"


android:text="Add Transaction" android:id="@+id/buttonAdd"
android:onClick="addTransaction"> </Button>

</TableRow>

</TableLayout>

</ScrollView>

addaccount.xml

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

<ScrollView android:layout_height="match_parent" android:layout_width="match_parent"


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

<TableLayout android:layout_height="match_parent"
android:layout_width="match_parent">

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Account Number"/>

<EditText android:layout_height="wrap_content" android:layout_width="150dp"


android:inputType="number" android:id="@+id/editAcno">

<requestFocus/>

</EditText>

453
</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Customer Number"/>

<EditText android:layout_height="wrap_content" android:layout_width="150dp"


android:inputType="number" android:id="@+id/editCno"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Account Holder(s)"/>

<EditText android:layout_height="wrap_content" android:layout_width="match_parent"


android:inputType="textPersonName" android:id="@+id/editHolders"
android:layout_weight="1"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Bank Name "/>

<EditText android:layout_height="wrap_content" android:layout_width="150dp"


android:inputType="textPersonName" android:id="@+id/editBankName"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Branch Name "/>

<EditText android:layout_height="wrap_content" android:layout_width="150dp"


android:inputType="textPersonName" android:id="@+id/editBranchName"> </EditText>

454
</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Branch Address "/>

<EditText android:layout_height="wrap_content" android:layout_width="match_parent"


android:inputType="textPostalAddress" android:id="@+id/editAddress"
android:layout_weight="1"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="IFSC"/>

<EditText android:layout_height="wrap_content" android:layout_width="150dp"


android:inputType="number" android:id="@+id/editIFSC"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="MICR"/>

<EditText android:layout_height="wrap_content" android:layout_width="150dp"


android:inputType="number" android:id="@+id/editMICR"> </EditText>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Current Balance"/>

<EditText android:layout_height="wrap_content" android:layout_width="150dp"


android:inputType="numberDecimal" android:id="@+id/editBalance"> </EditText>

455
</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Remarks "/>

<EditText android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/editRemarks" android:layout_weight="1"> </EditText>

</TableRow>

<TableRow>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Add Account" android:id="@+id/buttonAdd" android:onClick="addAccount">
</Button>

</TableRow>

</TableLayout>

</ScrollView>

list_account_transactions.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:text="Recent Transactions" android:id="@+id/textTitle"/>

<TableLayout android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/heading"
android:stretchColumns="1">

456
<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="60dp"


android:text="Date" android:gravity="center" android:textStyle="bold"
android:textColor="#ff0000"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Details" android:gravity="center" android:textStyle="bold"
android:textColor="#ff0000"/>

<TextView android:layout_height="wrap_content" android:layout_width="50dp"


android:text="Type" android:gravity="center" android:textStyle="bold"
android:textColor="#ff0000"/>

<TextView android:layout_height="wrap_content" android:layout_width="70dp"


android:text="Amount" android:gravity="center" android:textStyle="bold"
android:textColor="#ff0000"/>

</TableRow>

</TableLayout>

<ListView android:layout_height="wrap_content" android:layout_width="match_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:text="Sorry! No Transaction Found!" android:id="@+id/textError"
android:visibility="invisible"/>

</LinearLayout>

list_transactions.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

<ListView android:layout_height="wrap_content" android:layout_width="match_parent"


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

457
<TextView android:layout_height="wrap_content" android:layout_width="match_parent"
android:id="@+id/textError" android:text="Sorry! No Transactions Found!"
android:visibility="invisible"/>

</LinearLayout>

Search_transactions.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

<TableLayout android:layout_height="wrap_content"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="From Date :"/>

<EditText android:layout_height="wrap_content" android:layout_width="120dip"


android:inputType="date" android:id="@+id/editFromDate">

<requestFocus/>

</EditText>

<ImageButton android:id="@+id/buttonFromDateDialog"
android:src="@mipmap/ic_launcher" android:onClick="showFromDateDialog"
android:layout_marginLeft="5dp"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"

458
android:text="To Date :"/>

<EditText android:layout_height="wrap_content" android:layout_width="120dip"


android:inputType="date" android:id="@+id/editToDate"/>

<ImageButton android:id="@+id/buttonToDateDialog"
android:src="@mipmap/ic_launcher" android:onClick="showToDateDialog"
android:layout_marginLeft="5dp"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="From Amount:"/>

<EditText android:layout_height="wrap_content" android:layout_width="120dip"


android:inputType="numberDecimal" android:id="@+id/editFromAmount"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="To Amount :"/>

<EditText android:layout_height="wrap_content" android:layout_width="120dip"


android:inputType="numberDecimal" android:id="@+id/editToAmount"/>

</TableRow>

</TableLayout>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="match_parent">

<Button android:layout_height="wrap_content" android:layout_width="80dip"


android:text="Search" android:id="@+id/btnSearch"
android:onClick="searchTransactions"> </Button>

<Button android:layout_height="wrap_content" android:layout_width="80dip"

459
android:text="Clear" android:id="@+id/btnClear" android:onClick="clearFields"/>

</LinearLayout>

</LinearLayout>

Transaction.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="" android:visibility="invisible" android:id="@+id/textTransId"/>

<TableLayout android:layout_height="wrap_content"
android:layout_width="match_parent" android:stretchColumns="1">

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Account No." />

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="acno" android:id="@+id/textAcno" android:layout_marginLeft="5dp"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Trans Date" />

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="transdate" android:id="@+id/textTransDate"
android:layout_marginLeft="5dp"/>

</TableRow>

460
<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Trans Details" />

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Details" android:id="@+id/textTransDetails"
android:layout_marginLeft="5dp" android:singleLine="false"
android:scrollHorizontally="false"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Trans Type"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Type" android:id="@+id/textTransType" android:layout_marginLeft="5dp"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Trans Amount"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="amount" android:id="@+id/textTransAmount"
android:layout_marginLeft="5dp"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Remarks "/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"

461
android:text="remarks" android:id="@+id/textTransRemarks"
android:layout_marginLeft="5dp"/>

</TableRow>

</TableLayout>

</LinearLayout>

Transaction_details.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

-<TableLayout android:layout_height="wrap_content"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" android:stretchColumns="*">

-<TableRow>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Delete" android:onClick="deleteTransaction"
android:id="@+id/buttonDelete"> </Button>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Account Details" android:onClick="showAccountDetails"
android:id="@+id/buttonAccountDetails"> </Button>

</TableRow>

</TableLayout>

<TableLayout android:layout_height="wrap_content"
android:layout_width="match_parent" android:stretchColumns="1">

<TableRow>

462
<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"
android:text="Account Number :" android:gravity="right"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/textAcno" android:layout_marginLeft="5dp"> </TextView>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Trans Date :" android:gravity="right"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/textTransDate" android:layout_marginLeft="5dp"> </TextView>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Trans Type :" android:gravity="right"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/textTransType" android:layout_marginLeft="5dp"> </TextView>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Amount :" android:gravity="right"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/textTransAmount" android:layout_marginLeft="5dp"> </TextView>

</TableRow>

<TableRow>

463
<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"
android:text="Cheque No :" android:gravity="right"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/textChequeNo" android:layout_marginLeft="5dp"> </TextView>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Cheque Party:" android:gravity="right"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/textChequeParty" android:layout_marginLeft="5dp"> </TextView>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Cheque Details :" android:gravity="right"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/textChequeDetails" android:layout_marginLeft="5dp"> </TextView>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Remarks :" android:gravity="right"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/textTransRemarks" android:layout_marginLeft="5dp"> </TextView>

</TableRow>

</TableLayout>

464
</LinearLayout>

Update_account.xml

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

<ScrollView android:layout_height="match_parent" android:layout_width="match_parent"


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

<LinearLayout android:layout_height="match_parent"
android:layout_width="match_parent" android:orientation="vertical">

-<LinearLayout android:layout_height="wrap_content"
android:layout_width="match_parent" android:orientation="horizontal"
android:gravity="center">

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content" android:onClick="updateAccount"
android:text="Update" android:id="@+id/buttonUpdate"> </Button>

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content" android:onClick="deleteAccount"
android:text="Delete" android:id="@+id/buttonDelete"> </Button>

<Button android:layout_height="wrap_content"
android:layout_width="wrap_content" android:onClick="listAccountTransactions"
android:text="Transactions" android:id="@+id/buttonListTrans"> </Button>

</LinearLayout>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Account Number"/>

-<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editAcno">

<requestFocus/>

</EditText>

465
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Customer Number"/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editCno"> </EditText>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Account Holder(s)"/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editHolders"> </EditText>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Bank Name "/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editBankName"> </EditText>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Branch Name "/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editBranchName"> </EditText>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Branch Address "/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editAddress"
android:inputType="textPostalAddress"/>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="IFSC"/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editIFSC"> </EditText>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="MICR"/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editMICR"> </EditText>

466
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Current Balance"/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editBalance"> </EditText>

<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:text="Remarks "/>

<EditText android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/editRemarks"> </EditText>

</LinearLayout>

</ScrollView>

Menu

Common_menu.xml

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

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

<item android:title="Add Transaction" android:icon="@mipmap/ic_launcher"


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

<item android:title="Search Transactions" android:icon="@mipmap/ic_launcher"


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

<item android:title="Add Account" android:icon="@mipmap/ic_launcher"


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

<item android:title="List Accounts" android:icon="@mipmap/ic_launcher"


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

<item android:title="Recent Transactions" android:icon="@mipmap/ic_launcher"


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

</menu>

String.xml

467
<resources>
<string name="app_name">My Application</string>
<string name="action_settings">Settings</string>
<string name="accountsprompt">Select Account</string>

</resources>

Manifest.xml

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

<manifest package="com.example.manju.myapplication"
xmlns:android="http://schemas.android.com/apk/res/android">

<application android:theme="@style/AppTheme" android:supportsRtl="true"


android:label="@string/app_name" android:icon="@mipmap/ic_launcher"
android:allowBackup="true">

<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/app_name"


android:name=".ListAccounts">

-<intent-filter>

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

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

</intent-filter>

</activity>

<activity android:label="Add New Account" android:name=".AddAccount"/>

<activity android:label="Add New Transaction" android:name=".AddTransaction"/>

<activity android:label="Account Details" android:name=".UpdateAccount"/>

<activity android:label="Account Transactions"


android:name=".ListAccountTransactions"/>

<activity android:label="Transaction Details" android:name=".TransactionDetails"/>

<activity android:label="Search Transactions" android:name=".SearchTransactions"/>

<activity android:label="Recent Transactions" android:name=".ListRecentTransactions"/>

</application>

468
</manifest>

 Quiz application

SoccerQuizGame.java

import android.support.v7.app.AppCompatActivity;

import java.io.IOException;
import java.io.InputStream;
import java.util.*;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.AssetManager;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

import java.io.IOException;
import java.io.InputStream;
import java.util.*;

469
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.AssetManager;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class SoccerQuizGame extends AppCompatActivity {

//String used when logging error messages


private static final String TAG = "SoccerQuizGame Activity";

//Instance Variables
private List<String> fileNameList; // player file names
private List<String> quizPlayersList; // names of players in quiz
private String correctAnswer; // current correct answer
private int totalGuesses; // number of guesses
private int correctAnswers; // number of correct guesses
private int guessRows; // number of rows displaying choices
private Random random; // random number generator
private Handler handler; // used to delay loading of next player
private Animation shakeAnimation; // animation for incorrect answers

private TextView answerTextView;


private TextView questionNumberTextView;
private ImageView faceImageView;
private TableLayout buttonTableLayout;

470
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

fileNameList = new ArrayList<String>(); // list of image file names


quizPlayersList = new ArrayList<String>(); // players in quiz
guessRows = 3; // defaulted to one row of choices
random = new Random(); // initialize the random number generator
handler = new Handler(); // used to perform delayed operations

// get references to the GUI components


questionNumberTextView = (TextView)
findViewById(R.id.questionNumberTextView);
answerTextView = (TextView) findViewById(R.id.answerTextView);
faceImageView = (ImageView) findViewById(R.id.faceImageView);
buttonTableLayout = (TableLayout) findViewById(R.id.buttonTableLayout);

// set questionNumbers Text


questionNumberTextView.setText(
getResources().getString(R.string.question) + " 1 " +
getResources().getString(R.string.of) + " 10");

// load the shake animations used to animate incorrect answers


shakeAnimation = AnimationUtils.loadAnimation(this,
R.anim.incorrect_shake);
shakeAnimation.setRepeatCount(3); // animation repeats 3 times

// start a new quiz


resetQuiz();

} //end onCreate method

// set up and start the next quiz


private void resetQuiz(){

// use the AssetManager to get the player image


// file names for the app
AssetManager assets = getAssets();
fileNameList.clear(); // clear the list

471
// get list of all player names in this region
String[] paths = null;
try {
paths = assets.list("Players");
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e(TAG, "Error loading ", e);
}

for(String path : paths)


fileNameList.add(path.replace(".jpg", ""));

correctAnswers = 0; // reset number of correct answers


totalGuesses= 0; // reset number of guesses
quizPlayersList.clear(); // clear prior list of quiz countries

// add 10 random file names to the quiz list


int playerCounter = 1;
int numberOfPlayers = fileNameList.size();

while(playerCounter <= 10){

int randomIndex = random.nextInt(numberOfPlayers);

//get random file name


String fileName = fileNameList.get(randomIndex);

//if region is enabled and hasnt been chosen


if(!quizPlayersList.contains(fileName)){
quizPlayersList.add(fileName);
++playerCounter;
}
}

loadNextPlayer(); //start quiz by loading next player

// after user guesses a correct player, load the next one


private void loadNextPlayer(){

472
//get the filename of the next flag and remove it from the list
String nextImageName = quizPlayersList.remove(0);
correctAnswer = nextImageName; //update correct answer

answerTextView.setText(""); //clear the answerTextView

//display the number of the current question in the quiz


questionNumberTextView.setText(
getResources().getString(R.string.question) + " " +
(correctAnswers + 1) + " " +
getResources().getString(R.string.of) + " 10");

//extract the region from the next images name


String region = "Players";

//use AssetManager to load next image from assets folder


AssetManager assets = getAssets(); // get apps Asset Manager
InputStream stream; // used to read in player names

try{

//get an InputStream to the asset representing the next flag


stream = assets.open(region + "/" + nextImageName + ".jpg");

//load the asset as Drawable and display on the flagImageView


Drawable flag = Drawable.createFromStream(stream, nextImageName);
faceImageView.setImageDrawable(flag);
}
catch (IOException e){
Log.e(TAG, "Error loading " + nextImageName, e);
}

//clear prior answer buttons from tablerows


for (int row = 0; row < buttonTableLayout.getChildCount(); row++)
((TableRow) buttonTableLayout.getChildAt(row)).removeAllViews();

Collections.shuffle(fileNameList); //shuffle file names

//put the correct answer at the end of the fileNameList


int correct = fileNameList.indexOf(correctAnswer);
fileNameList.add(fileNameList.remove(correct));

//get a reference to the LayoutInflator Service

473
LayoutInflater inflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);

// add 3, 6, or 9 answer Buttons based on the value of guessRows


for (int row = 0; row < guessRows; row++){

TableRow currentTableRow = getTableRow(row);

//place Buttons in currentTableRow


for (int column = 0; column < 3; column++){

//inflate guess_button.xml to create new Button


Button newGuessButton =
(Button) inflater.inflate(R.layout.guess_button, null);

//get player name and set it as newGuessButtons text


String fileName = fileNameList.get((row * 3) + column);
newGuessButton.setText(getPlayerName(fileName));

//register answerButton listener to respond to clicks


newGuessButton.setOnClickListener(guessButtonListener);
currentTableRow.addView(newGuessButton);
}

//randomly replace one Button with the correct answer


int row = random.nextInt(guessRows);
int column = random.nextInt(3);
TableRow randomTableRow = getTableRow(row);
String playerName = getPlayerName(correctAnswer);
((Button) randomTableRow.getChildAt(column)).setText(playerName);

} // end loadNextPlayer method

// return the specified TableRow


private TableRow getTableRow(int row){

return (TableRow) buttonTableLayout.getChildAt(row);


}

// parses the player file name and returns the player name

474
private String getPlayerName(String name){

return name.substring(name.indexOf('-') + 1).replace('-', ' ');


}

// method submitGuess called when user selects an answer


private void submitGuess (Button guessButton){

String guess = guessButton.getText().toString();


String answer = getPlayerName(correctAnswer);
++totalGuesses; //increment the number of guesses made

if (guess.equals(answer)){

++correctAnswers; // increment number of correct answers

//display Correct answer in answerTextView


answerTextView.setText(answer + "!" );

answerTextView.setTextColor(getResources().getColor(R.color.correct_answer));

disableButtons(); //disable all answer Buttons

// if user has guessed 10 correct players


if (correctAnswers == 10){

//create new AlertDialog Builder


AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.reset_quiz);

//set the AlertDialogs message to display the game results


builder.setMessage(String.format("%d %s, %.02f%% %s",
totalGuesses,
getResources().getString(R.string.guesses),
(1000 / (double) totalGuesses),
getResources().getString(R.string.correct)));

builder.setCancelable(false);

//add reset quiz button


builder.setPositiveButton(R.string.reset_quiz,
new DialogInterface.OnClickListener() {

475
@Override
public void onClick(DialogInterface dialog, int which)
{

resetQuiz();
} // end onClick
} // end anonymous inner class
); //end call to setPositiveButton

// create AlertDialog from the Builder


AlertDialog resetDialog = builder.create();
resetDialog.show();

} // end if

else // answer is correct but game isnt over


{
//load the next flag after a one second delay
handler.postDelayed(
new Runnable()
{
@Override
public void run(){
loadNextPlayer();
}
}, 1000); // 1000 milliseconds for 1 second delay

} // end else
} // end if

else // answer was incorrect


{
//play the animation
faceImageView.startAnimation(shakeAnimation);

//display "Incorrect" in red


answerTextView.setText(R.string.incorrect_answer);

answerTextView.setTextColor(getResources().getColor(R.color.incorrect_answer));

guessButton.setEnabled(false); // disable the incorrect answer


}

476
} // end submitGuess method

// method to disable all answer Buttons


private void disableButtons(){

for (int row = 0; row < buttonTableLayout.getChildCount(); row++){


TableRow tablerow = (TableRow) buttonTableLayout.getChildAt(row);

for(int i = 0; i < tablerow.getChildCount(); i++){


tablerow.getChildAt(i).setEnabled(false);
}
}
}

// create constants for each menu id


private final int CHOICES_MENU_ID = Menu.FIRST;

// called when the user accesses the options menu


@Override
public boolean onCreateOptionsMenu(Menu menu){

super.onCreateOptionsMenu(menu);

// add options to the menu


menu.add(Menu.NONE, CHOICES_MENU_ID, Menu.NONE, R.string.choices);

return true; // display the menu


}

// called when the user selects an option from the menu


@Override
public boolean onOptionsItemSelected(MenuItem item) {

// switch the menu id of the user selected option


switch (item.getItemId())
{
case CHOICES_MENU_ID:
//create a list of the possible number of answer choices
final String[] possibleChoices =
getResources().getStringArray(R.array.guessesList);

477
//create an AlertDialog Builder and set its title
AlertDialog.Builder choicesBuilder = new
AlertDialog.Builder(this);
choicesBuilder.setTitle(R.string.choices);

//add possibleChoices items to the Dialog and set the


// behavior when one of the items is clicked
choicesBuilder.setItems(R.array.guessesList,
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int item)
{

// update guessRows to reflect user choice


guessRows =
Integer.parseInt(possibleChoices[item].toString()) / 3;

resetQuiz();

}
});

// create AlertDialog from the Builder


AlertDialog choicesDialog = choicesBuilder.create();
choicesDialog.show();

break;
} // end switch

return super.onOptionsItemSelected(item);

}// end method onOptionsItemSelected

// called when a guess Button is touched


private OnClickListener guessButtonListener = new OnClickListener(){

@Override
public void onClick(View v){
submitGuess((Button) v); // pass selected Button to submitGuess method
}

478
};

} // end SoccerQuizGame

main.xml

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

<LinearLayout android:orientation="vertical" android:gravity="center_horizontal"


android:background="@drawable/grass_background" android:layout_height="match_parent"
android:layout_width="match_parent" android:id="@+id/linearLayout"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:gravity="center" android:layout_height="wrap_content"


android:layout_width="match_parent" android:id="@+id/titleTextView"
android:textSize="@dimen/title_size" android:textColor="@color/text_color"
android:text="@string/quiz_title" android:layout_marginBottom="10dp"/>

<TextView android:gravity="center" android:layout_height="wrap_content"


android:layout_width="match_parent" android:id="@+id/questionNumberTextView"
android:layout_gravity="center"/>

<ImageView android:layout_height="@dimen/face_height"
android:layout_width="@dimen/face_width" android:id="@+id/faceImageView"
android:adjustViewBounds="false"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:id="@+id/guessPlayerTextView" android:textSize="@dimen/text_size"
android:textColor="@color/text_color" android:text="@string/guess_player"
android:layout_marginBottom="10dp"/>

<TableLayout android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/buttonTableLayout" android:stretchColumns="0,1,2"
android:layout_weight="1">

<TableRow android:orientation="horizontal" android:layout_height="wrap_content"


android:layout_width="match_parent" android:id="@+id/tableRow0"> </TableRow>

<TableRow android:orientation="horizontal" android:layout_height="wrap_content"


android:layout_width="match_parent" android:id="@+id/tableRow1"> </TableRow>

479
<TableRow android:layout_height="wrap_content" android:layout_width="match_parent"
android:id="@+id/tableRow2"> </TableRow>

</TableLayout>

<TextView android:gravity="center" android:layout_height="wrap_content"


android:layout_width="match_parent" android:id="@+id/answerTextView"
android:textSize="@dimen/answer_size" android:layout_gravity="center"
android:textStyle="bold"/>

</LinearLayout>

guess_button.xml

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


<Button android:layout_weight="1" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/newGuessButton"
xmlns:android="http://schemas.android.com/apk/res/android"> </Button>

color.xml

<color name="background_color">#FFFFCC</color>

<color name="correct_answer">#FFFFFF</color>

<color name="incorrect_answer">#FF0000</color>

<color name="text_color">#FFFFFF</color>

string.xml

<string name="hello_world">Hello world!</string>

<string name="menu_settings">Settings</string>

<string name="choices">Select Number of Choices</string>

<string name="correct">correct</string>

<string name="guess_player">Guess the Player</string>

480
<string name="guesses">guesses</string>

<string name="incorrect_answer">Wrong!</string>

<string name="of">of</string>

<string name="ok">OK</string>

<string name="question">Question</string>

<string name="quiz_title">Soccer Quiz</string>

<string name="reset_quiz">Reset Quiz</string>

<string-array name="guessesList">

<item>3</item>

<item>6</item>

<item>9</item>

</string-array>

dimen.xml

<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<dimen name="title_size">25sp</dimen>

<dimen name="face_width">227dp</dimen>

<dimen name="face_height">150dp</dimen>

<dimen name="answer_size">40sp</dimen>

<dimen name="text_size">20sp</dimen>

<dimen name="padding_small">8dp</dimen>

481
<dimen name="padding_medium">8dp</dimen>

<dimen name="padding_large">16dp</dimen>

</resources>

Drawable folder

anim folder

incorrect_shake.xml

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


<set android:interpolator="@android:anim/decelerate_interpolator"
xmlns:android="http://schemas.android.com/apk/res/android"><translate
android:duration="100" android:toXDelta="-5%p" android:fromXDelta="0"/><translate
android:duration="100" android:toXDelta="5%p" android:fromXDelta="-5%p"
android:startOffset="100"/><translate android:duration="100" android:toXDelta="-5%p"
android:fromXDelta="5%p" android:startOffset="200"/></set>

assets folder

PLAYERS PHOTO

 CHAT VIA BLUETOOTH

MainActivity.java

482
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.support.v7.app.ActionBar;

import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

public static final int MESSAGE_STATE_CHANGE = 1;


public static final int MESSAGE_READ = 2;
public static final int MESSAGE_WRITE = 3;
public static final int MESSAGE_DEVICE_NAME = 4;
public static final int MESSAGE_TOAST = 5;

public static final String DEVICE_NAME = "device_name";


public static final String TOAST = "toast";

483
private static final int REQUEST_CONNECT_DEVICE_SECURE = 1;
private static final int REQUEST_CONNECT_DEVICE_INSECURE = 2;
private static final int REQUEST_ENABLE_BT = 3;

private ListView lvMainChat;


private EditText etMain;
private Button btnSend;

private String connectedDeviceName = null;


private ArrayAdapter<String> chatArrayAdapter;

private StringBuffer outStringBuffer;


private BluetoothAdapter bluetoothAdapter = null;
private ChatService chatService = null;

private Handler handler = new Handler(new Callback() {

@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_STATE_CHANGE:
switch (msg.arg1) {
case ChatService.STATE_CONNECTED:
setStatus(getString(R.string.title_connected_to,
connectedDeviceName));
chatArrayAdapter.clear();
break;
case ChatService.STATE_CONNECTING:
setStatus(R.string.title_connecting);
break;
case ChatService.STATE_LISTEN:
case ChatService.STATE_NONE:
setStatus(R.string.title_not_connected);
break;
}
break;
case MESSAGE_WRITE:
byte[] writeBuf = (byte[]) msg.obj;

String writeMessage = new String(writeBuf);


chatArrayAdapter.add("Me: " + writeMessage);
break;
case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj;

484
String readMessage = new String(readBuf, 0, msg.arg1);
chatArrayAdapter.add(connectedDeviceName + ": " +
readMessage);
break;
case MESSAGE_DEVICE_NAME:

connectedDeviceName = msg.getData().getString(DEVICE_NAME);
Toast.makeText(getApplicationContext(),
"Connected to " + connectedDeviceName,
Toast.LENGTH_SHORT).show();
break;
case MESSAGE_TOAST:
Toast.makeText(getApplicationContext(),
msg.getData().getString(TOAST), Toast.LENGTH_SHORT)
.show();
break;
}
return false;
}
});

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

getWidgetReferences();
bindEventHandler();

if (bluetoothAdapter == null) {
Toast.makeText(this, "Bluetooth is not available",
Toast.LENGTH_LONG).show();
finish();
return;
}
}

private void getWidgetReferences() {


lvMainChat = (ListView) findViewById(R.id.lvMainChat);
etMain = (EditText) findViewById(R.id.etMain);
btnSend = (Button) findViewById(R.id.btnSend);

485
}

private void bindEventHandler() {


etMain.setOnEditorActionListener(mWriteListener);

btnSend.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String message = etMain.getText().toString();
sendMessage(message);
}
});
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {


switch (requestCode) {
case REQUEST_CONNECT_DEVICE_SECURE:
if (resultCode == Activity.RESULT_OK) {
connectDevice(data, true);
}
break;
case REQUEST_CONNECT_DEVICE_INSECURE:
if (resultCode == Activity.RESULT_OK) {
connectDevice(data, false);
}
break;
case REQUEST_ENABLE_BT:
if (resultCode == Activity.RESULT_OK) {
setupChat();
} else {
Toast.makeText(this, R.string.bt_not_enabled_leaving,
Toast.LENGTH_SHORT).show();
finish();
}
}
}

private void connectDevice(Intent data, boolean secure) {


String address = data.getExtras().getString(
DeviceListActivity.DEVICE_ADDRESS);
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);
chatService.connect(device, secure);
}

@Override

486
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent serverIntent = null;
switch (item.getItemId()) {
case R.id.secure_connect_scan:
serverIntent = new Intent(this, DeviceListActivity.class);
startActivityForResult(serverIntent,
REQUEST_CONNECT_DEVICE_SECURE);
return true;
case R.id.insecure_connect_scan:
serverIntent = new Intent(this, DeviceListActivity.class);
startActivityForResult(serverIntent,
REQUEST_CONNECT_DEVICE_INSECURE);
return true;
case R.id.discoverable:
ensureDiscoverable();
return true;
}
return false;
}

private void ensureDiscoverable() {


if (bluetoothAdapter.getScanMode() !=
BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
Intent discoverableIntent = new Intent(
BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(
BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
}
}

private void sendMessage(String message) {


if (chatService.getState() != ChatService.STATE_CONNECTED) {
Toast.makeText(this, R.string.not_connected, Toast.LENGTH_SHORT)
.show();
return;
}

487
if (message.length() > 0) {
byte[] send = message.getBytes();
chatService.write(send);

outStringBuffer.setLength(0);
etMain.setText(outStringBuffer);
}
}

private TextView.OnEditorActionListener mWriteListener = new


TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView view, int actionId,
KeyEvent event) {
if (actionId == EditorInfo.IME_NULL
&& event.getAction() == KeyEvent.ACTION_UP) {
String message = view.getText().toString();
sendMessage(message);
}
return true;
}
};

private final void setStatus(int resId) {


final ActionBar actionBar = getSupportActionBar();
actionBar.setSubtitle(resId);
}

private final void setStatus(CharSequence subTitle) {


final ActionBar actionBar = getSupportActionBar();
actionBar.setSubtitle(subTitle);
}

private void setupChat() {


chatArrayAdapter = new ArrayAdapter<String>(this, R.layout.message);
lvMainChat.setAdapter(chatArrayAdapter);

chatService = new ChatService(this, handler);

outStringBuffer = new StringBuffer("");


}

@Override
public void onStart() {

488
super.onStart();

if (!bluetoothAdapter.isEnabled()) {
Intent enableIntent = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
} else {
if (chatService == null)
setupChat();
}
}

@Override
public synchronized void onResume() {
super.onResume();

if (chatService != null) {
if (chatService.getState() == ChatService.STATE_NONE) {
chatService.start();
}
}
}

@Override
public synchronized void onPause() {
super.onPause();
}

@Override
public void onStop() {
super.onStop();
}

@Override
public void onDestroy() {
super.onDestroy();
if (chatService != null)
chatService.stop();
}

DeviceListActivity

489
import java.util.Set;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class DeviceListActivity extends Activity {

private TextView tvDeviceListPairedDeviceTitle, tvDeviceListNewDeviceTitle;


private ListView lvDeviceListPairedDevice, lvDeviceListNewDevice;
private Button btnDeviceListScan;

private BluetoothAdapter bluetoothAdapter;


private ArrayAdapter<String> pairedDevicesArrayAdapter;
private ArrayAdapter<String> newDevicesArrayAdapter;

public static String DEVICE_ADDRESS = "deviceAddress";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.device_list);

setResult(Activity.RESULT_CANCELED);

getWidgetReferences();
bindEventHandler();
initializeValues();

490
}

private void getWidgetReferences() {


tvDeviceListPairedDeviceTitle = (TextView)
findViewById(R.id.tvDeviceListPairedDeviceTitle);
tvDeviceListNewDeviceTitle = (TextView)
findViewById(R.id.tvDeviceListNewDeviceTitle);

lvDeviceListPairedDevice = (ListView)
findViewById(R.id.lvDeviceListPairedDevice);
lvDeviceListNewDevice = (ListView) findViewById(R.id.lvDeviceListNewDevice);

btnDeviceListScan = (Button) findViewById(R.id.btnDeviceListScan);

private void bindEventHandler() {


lvDeviceListPairedDevice.setOnItemClickListener(mDeviceClickListener);
lvDeviceListNewDevice.setOnItemClickListener(mDeviceClickListener);

btnDeviceListScan.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startDiscovery();
btnDeviceListScan.setVisibility(View.GONE);
}
});
}

private void initializeValues() {


pairedDevicesArrayAdapter = new ArrayAdapter<String>(this,
R.layout.device_name);
newDevicesArrayAdapter = new ArrayAdapter<String>(this,
R.layout.device_name);

lvDeviceListPairedDevice.setAdapter(pairedDevicesArrayAdapter);
lvDeviceListNewDevice.setAdapter(newDevicesArrayAdapter);

// Register for broadcasts when a device is discovered


IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(discoveryFinishReceiver, filter);

// Register for broadcasts when discovery has finished


filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(discoveryFinishReceiver, filter);

491
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> pairedDevices = bluetoothAdapter
.getBondedDevices();

// If there are paired devices, add each one to the ArrayAdapter


if (pairedDevices.size() > 0) {
tvDeviceListPairedDeviceTitle.setVisibility(View.VISIBLE);
for (BluetoothDevice device : pairedDevices) {
pairedDevicesArrayAdapter.add(device.getName() + "\n"
+ device.getAddress());
}
} else {
String noDevices = getResources().getText(R.string.none_paired)
.toString();
pairedDevicesArrayAdapter.add(noDevices);
}
}

private void startDiscovery() {


setProgressBarIndeterminateVisibility(true);
setTitle(R.string.scanning);

tvDeviceListNewDeviceTitle.setVisibility(View.VISIBLE);

if (bluetoothAdapter.isDiscovering()) {
bluetoothAdapter.cancelDiscovery();
}

bluetoothAdapter.startDiscovery();
}

private OnItemClickListener mDeviceClickListener = new OnItemClickListener() {


public void onItemClick(AdapterView<?> av, View v, int arg2, long arg3) {
bluetoothAdapter.cancelDiscovery();

String info = ((TextView) v).getText().toString();


String address = info.substring(info.length() - 17);

Intent intent = new Intent();


intent.putExtra(DEVICE_ADDRESS, address);

setResult(Activity.RESULT_OK, intent);
finish();

492
}
};

private final BroadcastReceiver discoveryFinishReceiver = new BroadcastReceiver()


{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();

if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
newDevicesArrayAdapter.add(device.getName() + "\n"
+ device.getAddress());
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
.equals(action)) {
setProgressBarIndeterminateVisibility(false);
setTitle(R.string.select_device);
if (newDevicesArrayAdapter.getCount() == 0) {
String noDevices = getResources().getText(
R.string.none_found).toString();
newDevicesArrayAdapter.add(noDevices);
}
}
}
};

@Override
protected void onDestroy() {
super.onDestroy();

if (bluetoothAdapter != null) {
bluetoothAdapter.cancelDiscovery();
}
this.unregisterReceiver(discoveryFinishReceiver);
}

ChatService

493
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class ChatService {


private static final String NAME_SECURE = "BluetoothChatSecure";
private static final String NAME_INSECURE = "BluetoothChatInsecure";

// Unique UUID for this application


private static final UUID MY_UUID_SECURE = UUID
.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
private static final UUID MY_UUID_INSECURE = UUID
.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");

// Member fields
private final BluetoothAdapter bluetoothAdapter;
private final Handler handler;
private AcceptThread secureAcceptThread;
private AcceptThread insecureAcceptThread;
private ConnectThread connectThread;
private ConnectedThread connectedThread;
private int state;

// Constants that indicate the current connection state


public static final int STATE_NONE = 0;
public static final int STATE_LISTEN = 1; // listening connection
public static final int STATE_CONNECTING = 2; // initiate outgoing
// connection
public static final int STATE_CONNECTED = 3; // connected to remote device

public ChatService(Context context, Handler handler) {


bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
state = STATE_NONE;

494
this.handler = handler;
}

// Set the current state of the chat connection


private synchronized void setState(int state) {
this.state = state;

handler.obtainMessage(MainActivity.MESSAGE_STATE_CHANGE, state, -1)


.sendToTarget();
}

// get current connection state


public synchronized int getState() {
return state;
}

// start service
public synchronized void start() {
// Cancel any thread
if (connectThread != null) {
connectThread.cancel();
connectThread = null;
}

// Cancel any running thresd


if (connectedThread != null) {
connectedThread.cancel();
connectedThread = null;
}

setState(STATE_LISTEN);

// Start the thread to listen on a BluetoothServerSocket


if (secureAcceptThread == null) {
secureAcceptThread = new AcceptThread(true);
secureAcceptThread.start();
}
if (insecureAcceptThread == null) {
insecureAcceptThread = new AcceptThread(false);
insecureAcceptThread.start();
}
}

// initiate connection to remote device

495
public synchronized void connect(BluetoothDevice device, boolean secure) {
// Cancel any thread
if (state == STATE_CONNECTING) {
if (connectThread != null) {
connectThread.cancel();
connectThread = null;
}
}

// Cancel running thread


if (connectedThread != null) {
connectedThread.cancel();
connectedThread = null;
}

// Start the thread to connect with the given device


connectThread = new ConnectThread(device, secure);
connectThread.start();
setState(STATE_CONNECTING);
}

// manage Bluetooth connection


public synchronized void connected(BluetoothSocket socket,
BluetoothDevice device, final String
socketType) {
// Cancel the thread
if (connectThread != null) {
connectThread.cancel();
connectThread = null;
}

// Cancel running thread


if (connectedThread != null) {
connectedThread.cancel();
connectedThread = null;
}

if (secureAcceptThread != null) {
secureAcceptThread.cancel();
secureAcceptThread = null;
}
if (insecureAcceptThread != null) {
insecureAcceptThread.cancel();
insecureAcceptThread = null;

496
}

// Start the thread to manage the connection and perform transmissions


connectedThread = new ConnectedThread(socket, socketType);
connectedThread.start();

// Send the name of the connected device back to the UI Activity


Message msg = handler.obtainMessage(MainActivity.MESSAGE_DEVICE_NAME);
Bundle bundle = new Bundle();
bundle.putString(MainActivity.DEVICE_NAME, device.getName());
msg.setData(bundle);
handler.sendMessage(msg);

setState(STATE_CONNECTED);
}

// stop all threads


public synchronized void stop() {
if (connectThread != null) {
connectThread.cancel();
connectThread = null;
}

if (connectedThread != null) {
connectedThread.cancel();
connectedThread = null;
}

if (secureAcceptThread != null) {
secureAcceptThread.cancel();
secureAcceptThread = null;
}

if (insecureAcceptThread != null) {
insecureAcceptThread.cancel();
insecureAcceptThread = null;
}
setState(STATE_NONE);
}

public void write(byte[] out) {


ConnectedThread r;
synchronized (this) {
if (state != STATE_CONNECTED)

497
return;
r = connectedThread;
}
r.write(out);
}

private void connectionFailed() {


Message msg = handler.obtainMessage(MainActivity.MESSAGE_TOAST);
Bundle bundle = new Bundle();
bundle.putString(MainActivity.TOAST, "Unable to connect device");
msg.setData(bundle);
handler.sendMessage(msg);

// Start the service over to restart listening mode


ChatService.this.start();
}

private void connectionLost() {


Message msg = handler.obtainMessage(MainActivity.MESSAGE_TOAST);
Bundle bundle = new Bundle();
bundle.putString(MainActivity.TOAST, "Device connection was lost");
msg.setData(bundle);
handler.sendMessage(msg);

// Start the service over to restart listening mode


ChatService.this.start();
}

// runs while listening for incoming connections


private class AcceptThread extends Thread {
private final BluetoothServerSocket serverSocket;
private String socketType;

public AcceptThread(boolean secure) {


BluetoothServerSocket tmp = null;
socketType = secure ? "Secure" : "Insecure";

try {
if (secure) {
tmp = bluetoothAdapter.listenUsingRfcommWithServiceRecord(
NAME_SECURE, MY_UUID_SECURE);
} else {
tmp = bluetoothAdapter
.listenUsingInsecureRfcommWithServiceRecord(

498
NAME_INSECURE, MY_UUID_INSECURE);
}
} catch (IOException e) {
}
serverSocket = tmp;
}

public void run() {


setName("AcceptThread" + socketType);

BluetoothSocket socket = null;

while (state != STATE_CONNECTED) {


try {
socket = serverSocket.accept();
} catch (IOException e) {
break;
}

// If a connection was accepted


if (socket != null) {
synchronized (ChatService.this) {
switch (state) {
case STATE_LISTEN:
case STATE_CONNECTING:
// start the connected thread.
connected(socket, socket.getRemoteDevice(),
socketType);
break;
case STATE_NONE:
case STATE_CONNECTED:
// Either not ready or already connected. Terminate
// new socket.
try {
socket.close();
} catch (IOException e) {
}
break;
}
}
}
}
}

499
public void cancel() {
try {
serverSocket.close();
} catch (IOException e) {
}
}
}

// runs while attempting to make an outgoing connection


private class ConnectThread extends Thread {
private final BluetoothSocket socket;
private final BluetoothDevice device;
private String socketType;

public ConnectThread(BluetoothDevice device, boolean secure) {


this.device = device;
BluetoothSocket tmp = null;
socketType = secure ? "Secure" : "Insecure";

try {
if (secure) {
tmp = device
.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
} else {
tmp = device

.createInsecureRfcommSocketToServiceRecord(MY_UUID_INSECURE);
}
} catch (IOException e) {
}
socket = tmp;
}

public void run() {


setName("ConnectThread" + socketType);

// Always cancel discovery because it will slow down a connection


bluetoothAdapter.cancelDiscovery();

// Make a connection to the BluetoothSocket


try {
socket.connect();
} catch (IOException e) {
try {

500
socket.close();
} catch (IOException e2) {
}
connectionFailed();
return;
}

// Reset the ConnectThread because we're done


synchronized (ChatService.this) {
connectThread = null;
}

// Start the connected thread


connected(socket, device, socketType);
}

public void cancel() {


try {
socket.close();
} catch (IOException e) {
}
}
}

// runs during a connection with a remote device


private class ConnectedThread extends Thread {
private final BluetoothSocket bluetoothSocket;
private final InputStream inputStream;
private final OutputStream outputStream;

public ConnectedThread(BluetoothSocket socket, String socketType) {


this.bluetoothSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;

try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
}

inputStream = tmpIn;
outputStream = tmpOut;
}

501
public void run() {
byte[] buffer = new byte[1024];
int bytes;

// Keep listening to the InputStream


while (true) {
try {
// Read from the InputStream
bytes = inputStream.read(buffer);

// Send the obtained bytes to the UI Activity


handler.obtainMessage(MainActivity.MESSAGE_READ, bytes, -1,
buffer).sendToTarget();
} catch (IOException e) {
connectionLost();
// Start the service over to restart listening mode
ChatService.this.start();
break;
}
}
}

// write to OutputStream
public void write(byte[] buffer) {
try {
outputStream.write(buffer);
handler.obtainMessage(MainActivity.MESSAGE_WRITE, -1, -1,
buffer).sendToTarget();
} catch (IOException e) {
}
}

public void cancel() {


try {
bluetoothSocket.close();
} catch (IOException e) {
}
}
}
}

activity_main.xml

502
<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

<ListView android:layout_height="0dp" android:layout_width="match_parent"


android:transcriptMode="alwaysScroll" android:stackFromBottom="true"
android:divider="@null" android:layout_weight="1" android:id="@+id/lvMainChat"/>

-<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="match_parent">

<EditText android:layout_height="wrap_content" android:layout_width="0dp"


android:layout_weight="1" android:id="@+id/etMain" android:inputType="none"
android:layout_gravity="bottom"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:id="@+id/btnSend" android:text="@string/send"/>

</LinearLayout>

</LinearLayout>

device_list.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="match_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"


android:visibility="gone" android:textColor="#fff"
android:text="@string/title_paired_devices" android:paddingLeft="5dp"
android:background="#666" android:id="@+id/tvDeviceListPairedDeviceTitle"/>

<ListView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/lvDeviceListPairedDevice" android:stackFromBottom="true"
android:layout_weight="1"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent"

503
android:visibility="gone" android:textColor="#fff"
android:text="@string/title_other_devices" android:paddingLeft="5dp"
android:background="#666" android:id="@+id/tvDeviceListNewDeviceTitle"/>

<ListView android:layout_height="wrap_content" android:layout_width="match_parent"


android:id="@+id/lvDeviceListNewDevice" android:stackFromBottom="true"
android:layout_weight="2"/>

<Button android:layout_height="wrap_content" android:layout_width="match_parent"


android:text="@string/button_scan" android:id="@+id/btnDeviceListScan"/>

</LinearLayout>

device_name.xml

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


<TextView android:textSize="18sp" android:padding="5dp"
android:layout_height="wrap_content" android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"/>

message.xml

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


<TextView android:textSize="18sp" android:padding="5dp"
android:layout_height="wrap_content" android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"/>

MENU

option_menu.xml

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

<menu xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<item android:title="@string/secure_connect"
android:showAsAction="ifRoom|withText" android:icon="@android:drawable/ic_menu_search"
android:id="@+id/secure_connect_scan"
tools:ignore="AppCompatResource" />

<item android:title="@string/insecure_connect"

504
android:showAsAction="ifRoom|withText" android:icon="@android:drawable/ic_menu_search"
android:id="@+id/insecure_connect_scan"
tools:ignore="AppCompatResource" />

<item android:title="@string/discoverable" android:showAsAction="ifRoom|withText"


android:icon="@android:drawable/ic_menu_mylocation" android:id="@+id/discoverable"
tools:ignore="AppCompatResource" />

</menu>

string.xml

<resources xmlns:xliff="http://schemas.android.com/tools">
<string name="app_name">My Application</string>
<string name="action_settings">Settings</string>

<string name="send">Send</string>

<string name="not_connected">You are not connected to a device</string>

<string name="bt_not_enabled_leaving">Bluetooth was not enabled. Leaving Bluetooth


Chat.</string>

<string name="title_connecting">Connecting...</string>

<string name="title_connected_to">
Connected to
<xliff:g id="device_name">%1$s</xliff:g>

</string>

<string name="title_not_connected">Not connected</string>

<string name="scanning">Scanning for devices...</string>

<string name="select_device">select a device to connect</string>

<string name="none_paired">No devices have been paired</string>

<string name="none_found">No devices found</string>

<string name="title_paired_devices">Paired Devices</string>

505
<string name="title_other_devices">Other Available Devices</string>

<string name="button_scan">Scan for devices</string>

<string name="secure_connect">Connect a device - Secure</string>

<string name="insecure_connect">Connect a device - Insecure</string>

<string name="discoverable">Make discoverable</string>

</resources>

Manifest.xml

<?xml version="1.0"?>

<manifest android:versionName="1.0" android:versionCode="1"


package="com.example.manju.myapplication"
xmlns:android="http://schemas.android.com/apk/res/android">

<uses-sdk android:targetSdkVersion="21" android:minSdkVersion="10"/>

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

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

<application android:theme="@style/AppTheme" android:label="@string/app_name"


android:icon="@mipmap/ic_launcher" android:allowBackup="true">

<activity android:name=".MainActivity" android:label="@string/app_name"


android:screenOrientation="portrait">

<intent-filter>

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

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

</intent-filter>

506
</activity>

<activity android:name=".DeviceListActivity"
android:theme="@android:style/Theme.Dialog" android:label="@string/select_device"
android:screenOrientation="portrait"/>

</application>

</manifest>

 Contacts View

ContactsView.java

import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;

public class ContactsView extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView contactView = (TextView) findViewById(R.id.contactview);

Cursor cursor = getContacts();

while (cursor.moveToNext()) {

String displayName = cursor.getString(cursor


.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
contactView.append("Name: ");
contactView.append(displayName);
contactView.append("\n");
}
// Closing the cursor

507
cursor.close();
}

private Cursor getContacts() {


// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME };
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
+ ("1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return getContentResolver().query(uri, projection, selection,
selectionArgs, sortOrder);
}

main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/contactview"/>
</LinearLayout>

Android manifest.xml

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

 WEB PAGE Download and save in SD CARD

MainActivity.java:

508
import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private Handler handler = new Handler() {


public void handleMessage(Message message) {
Bundle data = message.getData();
if (message.arg1 == RESULT_OK && data != null) {

String path = data.getString("absolutePath");


Toast.makeText(MainActivity.this, "Downloaded" + path,
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "Download failed.",
Toast.LENGTH_LONG).show();
}

};
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

public void onClick(View view) {


Intent intent = new Intent(this, DownloadService.class);
// Create a new Messenger for the communication back
Messenger messenger = new Messenger(handler);

509
intent.putExtra("MESSENGER", messenger);
intent.setData(Uri.parse("http://www.vogella.de/index.html"));
intent.putExtra("urlpath", "http://www.vogella.de/index.html");
startService(intent);
}

public void showToast(View view) {


Toast.makeText(this, "Still interactive", Toast.LENGTH_SHORT).show();
}
}

DownloadService.java

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

import android.app.Activity;
import android.app.IntentService;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Message;
import android.os.Messenger;
import android.util.Log;

public class DownloadService extends IntentService {

private int result = Activity.RESULT_CANCELED;

public DownloadService() {
super("DownloadService");
}

// Will be called asynchronously be Android


@Override
protected void onHandleIntent(Intent intent) {

try {

510
Thread.sleep(4000);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
Uri data = intent.getData();
String urlPath = intent.getStringExtra("urlpath");
String fileName = data.getLastPathSegment();
File output = new File(Environment.getExternalStorageDirectory(),
fileName);
if (output.exists()) {
output.delete();
}

InputStream stream = null;


FileOutputStream fos = null;
try {

URL url = new URL(urlPath);


stream = url.openConnection().getInputStream();
InputStreamReader reader = new InputStreamReader(stream);
fos = new FileOutputStream(output.getPath());
int next = -1;
while ((next = reader.read()) != -1) {
fos.write(next);
}
// Sucessful finished
result = Activity.RESULT_OK;

} catch (Exception e) {
e.printStackTrace();
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}

511
}
}

Bundle extras = intent.getExtras();


if (extras != null) {
Messenger messenger = (Messenger) extras.get("MESSENGER");
Message msg = Message.obtain();
msg.arg1 = result;
Bundle bundle = new Bundle();
bundle.putString("absolutePath", output.getAbsolutePath());
msg.setData(bundle);
try {
messenger.send(msg);
} catch (android.os.RemoteException e1) {
Log.w(getClass().getName(), "Exception sending message", e1);
}

}
}
}

WrongDownloadService.java

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

import android.app.Activity;
import android.app.Service;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.StrictMode;
import android.util.Log;

public class WrongDownloadService extends Service {

512
private int result = Activity.RESULT_CANCELED;

public WrongDownloadService() {
super();
}

// Runs in the main user interface thread


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Don't do this
// This will run in the main thread
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
Thread.sleep(4000);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
Uri data = intent.getData();
String urlPath = intent.getStringExtra("urlpath");
String fileName = data.getLastPathSegment();
File output = new File(Environment.getExternalStorageDirectory(),
fileName);
if (output.exists()) {
output.delete();
}

InputStream stream = null;


FileOutputStream fos = null;
try {

URL url = new URL(urlPath);


stream = url.openConnection().getInputStream();
InputStreamReader reader = new InputStreamReader(stream);
fos = new FileOutputStream(output.getPath());
int next = -1;
while ((next = reader.read()) != -1) {
fos.write(next);
}
// Sucessful finished
result = Activity.RESULT_OK;

513
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Bundle extras = intent.getExtras();


if (extras != null) {
Messenger messenger = (Messenger) extras.get("MESSENGER");

Message msg = Message.obtain();


msg.arg1 = result;
Bundle bundle = new Bundle();
bundle.putString("absolutePath", output.getAbsolutePath());
msg.setData(bundle);
try {
messenger.send(msg);
} catch (android.os.RemoteException e1) {
Log.w(getClass().getName(), "Exception sending message", e1);
}

}
return Service.START_NOT_STICKY;

@Override
public IBinder onBind(Intent intent) {
return null;
}
}

514
activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Start Service" android:onClick="onClick"
android:id="@+id/startService"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Start IntentService" android:onClick="onClick"
android:id="@+id/startIntentService"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Show Toast" android:onClick="showToast" android:id="@+id/button2"/>

</LinearLayout>

Android manifest.xml

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

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

<service android:name="DownloadService"> </service>

<service android:name="WrongDownloadService" android:process=":download"> </service>

 SHARE WORDS

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.view.View;

515
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onClick(View view) {


EditText editView = (EditText) findViewById(R.id.input);
String string = editView.getText().toString();

Intent intent = new Intent(Intent.ACTION_SEND);


intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, string);

startActivity(Intent.createChooser(intent, "Share with:"));


}
}

ShareReceiver.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class ShareReceiver extends Activity {

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.receiver);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
String string = extras.getString(Intent.EXTRA_TEXT);

516
Toast.makeText(this, string, Toast.LENGTH_LONG).show();
}
}

activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<EditText android:layout_height="wrap_content" android:layout_width="match_parent"


android:text="Practice, practice, practice, dear Developers!" android:id="@+id/input">

<requestFocus/>

</EditText>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Share" android:onClick="onClick"/>

</LinearLayout>

receiver.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

517
 Battery charge information
MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.os.BatteryManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

TextView textBatteryLevel = null;


String batteryLevelInfo = "Battery Level";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textBatteryLevel = (TextView) findViewById(R.id.txtBatteryInfo);

registerBatteryLevelReceiver();
}

@Override
protected void onDestroy() {
unregisterReceiver(battery_receiver);

super.onDestroy();
}

private BroadcastReceiver battery_receiver = new BroadcastReceiver() {


@Override
public void onReceive(Context context, Intent intent) {
boolean isPresent = intent.getBooleanExtra("present", false);
String technology = intent.getStringExtra("technology");
int plugged = intent.getIntExtra("plugged", -1);
int scale = intent.getIntExtra("scale", -1);

518
int health = intent.getIntExtra("health", 0);
int status = intent.getIntExtra("status", 0);
int rawlevel = intent.getIntExtra("level", -1);
int voltage = intent.getIntExtra("voltage", 0);
int temperature = intent.getIntExtra("temperature", 0);
int level = 0;

Bundle bundle = intent.getExtras();

Log.i("BatteryLevel", bundle.toString());

if (isPresent) {
if (rawlevel >= 0 && scale > 0) {
level = (rawlevel * 100) / scale;
}

String info = "Battery Level: " + level + "%\n";


info += ("Technology: " + technology + "\n");
info += ("Plugged: " + getPlugTypeString(plugged) + "\n");
info += ("Health: " + getHealthString(health) + "\n");
info += ("Status: " + getStatusString(status) + "\n");
info += ("Voltage: " + voltage + "\n");
info += ("Temperature: " + temperature + "\n");

setBatteryLevelText(info + "\n\n" + bundle.toString());


} else {
setBatteryLevelText("Battery not present!!!");
}
}
};

private String getPlugTypeString(int plugged) {


String plugType = "Unknown";

switch (plugged) {
case BatteryManager.BATTERY_PLUGGED_AC:
plugType = "AC";
break;
case BatteryManager.BATTERY_PLUGGED_USB:
plugType = "USB";
break;
}

return plugType;

519
}

private String getHealthString(int health) {


String healthString = "Unknown";

switch (health) {
case BatteryManager.BATTERY_HEALTH_DEAD:
healthString = "Dead";
break;
case BatteryManager.BATTERY_HEALTH_GOOD:
healthString = "Good";
break;
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
healthString = "Over Voltage";
break;
case BatteryManager.BATTERY_HEALTH_OVERHEAT:
healthString = "Over Heat";
break;
case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
healthString = "Failure";
break;
}

return healthString;
}

private String getStatusString(int status) {


String statusString = "Unknown";

switch (status) {
case BatteryManager.BATTERY_STATUS_CHARGING:
statusString = "Charging";
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
statusString = "Discharging";
break;
case BatteryManager.BATTERY_STATUS_FULL:
statusString = "Full";
break;
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
statusString = "Not Charging";
break;
}

520
return statusString;
}

private void setBatteryLevelText(String text) {


textBatteryLevel.setText(text);
}

private void registerBatteryLevelReceiver() {


IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);

registerReceiver(battery_receiver, filter);
}
}

activity_main.xml:

<?xml version="1.0"?>

<LinearLayout android:padding="10dp" android:orientation="vertical"


android:layout_height="match_parent" android:layout_width="match_parent"
android:id="@+id/LinearLayout1" xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:id="@+id/txtBatteryInfo" android:text="TextView"/>

</LinearLayout>

 SMS (Display of inbox, sent & draft)

MainActivity.java

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;

521
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements OnClickListener {

// GUI Widget
Button btnSent, btnInbox, btnDraft;
TextView lblMsg, lblNo;
ListView lvMsg;

// Cursor Adapter
SimpleCursorAdapter adapter;

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.messagebox);

// Init GUI Widget


btnInbox = (Button) findViewById(R.id.btnInbox);
btnInbox.setOnClickListener(this);

btnSent = (Button) findViewById(R.id.btnSentBox);


btnSent.setOnClickListener(this);

btnDraft = (Button) findViewById(R.id.btnDraft);


btnDraft.setOnClickListener(this);

lvMsg = (ListView) findViewById(R.id.lvMsg);

@Override
public void onClick(View v) {

if (v == btnInbox) {

// Create Inbox box URI


Uri inboxURI = Uri.parse("content://sms/inbox");

// List required columns

522
String[] reqCols = new String[] { "_id", "address", "body" };

// Get Content Resolver object, which will deal with Content


// Provider
ContentResolver cr = getContentResolver();

// Fetch Inbox SMS Message from Built-in Content Provider


Cursor c = cr.query(inboxURI, reqCols, null, null, null);

// Attached Cursor with adapter and display in listview


adapter = new SimpleCursorAdapter(this, R.layout.row, c,
new String[] { "body", "address" }, new int[] {
R.id.lblMsg, R.id.lblNumber });
lvMsg.setAdapter(adapter);

if (v == btnSent) {

// Create Sent box URI


Uri sentURI = Uri.parse("content://sms/sent");

// List required columns


String[] reqCols = new String[] { "_id", "address", "body" };

// Get Content Resolver object, which will deal with Content


// Provider
ContentResolver cr = getContentResolver();

// Fetch Sent SMS Message from Built-in Content Provider


Cursor c = cr.query(sentURI, reqCols, null, null, null);

// Attached Cursor with adapter and display in listview


adapter = new SimpleCursorAdapter(this, R.layout.row, c,
new String[] { "body", "address" }, new int[] {
R.id.lblMsg, R.id.lblNumber });
lvMsg.setAdapter(adapter);

if (v == btnDraft) {
// Create Draft box URI
Uri draftURI = Uri.parse("content://sms/draft");

523
// List required columns
String[] reqCols = new String[] { "_id", "address", "body" };

// Get Content Resolver object, which will deal with Content


// Provider
ContentResolver cr = getContentResolver();

// Fetch Sent SMS Message from Built-in Content Provider


Cursor c = cr.query(draftURI, reqCols, null, null, null);

// Attached Cursor with adapter and display in listview


adapter = new SimpleCursorAdapter(this, R.layout.row, c,
new String[] { "body", "address" }, new int[] {
R.id.lblMsg, R.id.lblNumber });
lvMsg.setAdapter(adapter);

}
}

messagebox.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout android:id="@+id/linearLayout1"
android:layout_width="match_parent" android:layout_weight="0"
android:layout_height="wrap_content">
<Button android:text="Inbox" android:id="@+id/btnInbox"
android:layout_height="wrap_content" android:layout_weight="0.5"
android:layout_width="match_parent"></Button>
<Button android:text="Sent Box" android:id="@+id/btnSentBox"
android:layout_height="wrap_content" android:layout_weight="0.5"
android:layout_width="match_parent"></Button>
<Button android:layout_weight="0.5" android:layout_height="wrap_content"
android:id="@+id/btnDraft" android:text="Draft"
android:layout_width="match_parent"></Button>
</LinearLayout>
<ListView android:layout_width="match_parent"
android:layout_weight="1" android:layout_height="match_parent"

524
android:id="@+id/lvMsg"></ListView>

</LinearLayout>

row.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:textAppearance="?android:attr/textAppearanceLarge"
android:text="TextView" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/lblMsg"></TextView>
<TextView android:textAppearance="?android:attr/textAppearanceMedium"
android:text="TextView" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textColor="#00f"
android:id="@+id/lblNumber"></TextView>

</LinearLayout>

Android manifest.xml

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

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

 Date Picker

MainActivity.java

import android.os.Bundle;
import android.widget.TextView;
import android.support.v7.app.AppCompatActivity;
import java.util.Calendar;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.view.View;
import android.view.View.OnClickListener;

525
import android.widget.Button;
import android.widget.DatePicker;

public class MainActivity extends AppCompatActivity {

private TextView Output;


private Button changeDate;

private int year;


private int month;
private int day;

static final int DATE_PICKER_ID = 1111;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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


changeDate = (Button) findViewById(R.id.changeDate);

// Get current date by calender

final Calendar c = Calendar.getInstance();


year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);

// Show current date

Output.setText(new StringBuilder()
// Month is 0 based, just add 1
.append(month + 1).append("-").append(day).append("-")
.append(year).append(" "));

// Button listener to show date picker dialog

changeDate.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

// On button click show datepicker dialog

526
showDialog(DATE_PICKER_ID);

});
}

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_PICKER_ID:

// open datepicker dialog.


// set date picker for current date
// add pickerListener listner to date picker
return new DatePickerDialog(this, pickerListener, year,
month,day);
}
return null;
}

private DatePickerDialog.OnDateSetListener pickerListener = new


DatePickerDialog.OnDateSetListener() {

// when dialog box is closed, below method will be called.


@Override
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {

year = selectedYear;
month = selectedMonth;
day = selectedDay;

// Show selected date


Output.setText(new StringBuilder().append(month + 1)
.append("-").append(day).append("-").append(year)
.append(" "));

}
};

527
activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Click To Change Date" android:id="@+id/changeDate"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Current/Selected Date (M-D-YYYY): "
android:textAppearance="?android:attr/textAppearanceLarge"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="" android:id="@+id/Output"
android:textAppearance="?android:attr/textAppearanceLarge"/>

</LinearLayout>

 Time Picker

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.util.Calendar;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.app.Dialog;
import android.app.TimePickerDialog;

public class MainActivity extends AppCompatActivity {

528
static final int TIME_DIALOG_ID = 1111;
private TextView output;
public Button btnClick;

private int hour;


private int minute;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

/********* display current time on screen Start ********/

final Calendar c = Calendar.getInstance();


// Current Hour
hour = c.get(Calendar.HOUR_OF_DAY);
// Current Minute
minute = c.get(Calendar.MINUTE);

// set current time into output textview


updateTime(hour, minute);

/********* display current time on screen End ********/

// Add Button Click Listener


addButtonClickListener();

public void addButtonClickListener() {

btnClick = (Button) findViewById(R.id.btnClick);

btnClick.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

showDialog(TIME_DIALOG_ID);

529
}

});

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case TIME_DIALOG_ID:

// set time picker as current time


return new TimePickerDialog(this, timePickerListener, hour,
minute,
false);

}
return null;
}

private TimePickerDialog.OnTimeSetListener timePickerListener = new


TimePickerDialog.OnTimeSetListener() {

@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minutes) {
// TODO Auto-generated method stub
hour = hourOfDay;
minute = minutes;

updateTime(hour,minute);

};

private static String utilTime(int value) {

if (value < 10)


return "0" + String.valueOf(value);
else
return String.valueOf(value);
}

530
private void updateTime(int hours, int mins) {

String timeSet = "";


if (hours > 12) {
hours -= 12;
timeSet = "PM";
} else if (hours == 0) {
hours += 12;
timeSet = "AM";
} else if (hours == 12)
timeSet = "PM";
else
timeSet = "AM";

String minutes = "";


if (mins < 10)
minutes = "0" + mins;
else
minutes = String.valueOf(mins);

// Append in a StringBuilder
String aTime = new StringBuilder().append(hours).append(':')
.append(minutes).append(" ").append(timeSet).toString();

output.setText(aTime);
}
}

activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Click To Change Time" android:id="@+id/btnClick"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"

531
android:text="Current Time (H:M): " android:id="@+id/lblTime"
android:textAppearance="?android:attr/textAppearanceLarge"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="" android:id="@+id/output"
android:textAppearance="?android:attr/textAppearanceLarge"/>

</LinearLayout>

 Check Internet Connectivity

MainActivity.java

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.net.ConnectivityManager;

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

public class MainActivity extends AppCompatActivity {

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final Button Save = (Button) findViewById(R.id.save);

Save.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
isInternetOn();
}

532
});
}

public final boolean isInternetOn() {

// get Connectivity Manager object to check connection


ConnectivityManager connec =
(ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);

// Check for network connections


if ( connec.getNetworkInfo(0).getState() ==
android.net.NetworkInfo.State.CONNECTED ||
connec.getNetworkInfo(0).getState() ==
android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() ==
android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() ==
android.net.NetworkInfo.State.CONNECTED ) {

// if connected with internet

Toast.makeText(this, " Connected ", Toast.LENGTH_LONG).show();


return true;

} else if ( connec.getNetworkInfo(0).getState() ==
android.net.NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() ==
android.net.NetworkInfo.State.DISCONNECTED ) {

Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show();


return false;
}
return false;
}
}

activity_main.xml

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

<LinearLayout android:layout_height="fill_parent"
android:layout_width="fill_parent" android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">

533
<Button android:layout_height="wrap_content" android:layout_width="wrap_content"
android:text="Click to check internet connectivity" android:id="@+id/save"> </Button>

<TextView android:layout_height="wrap_content" android:layout_width="fill_parent"


android:text="@string/hello"/>

</LinearLayout>

Android manifest.xml

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

 Camera

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.io.File;
import java.util.List;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements OnClickListener {

534
Button btnTackPic;
TextView tvHasCamera, tvHasCameraApp;
ImageView ivThumbnailPhoto;
Bitmap bitMap;
static int TAKE_PICTURE = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Get reference to views


tvHasCamera = (TextView) findViewById(R.id.tvHasCamera);
tvHasCameraApp = (TextView) findViewById(R.id.tvHasCameraApp);
btnTackPic = (Button) findViewById(R.id.btnTakePic);
ivThumbnailPhoto = (ImageView) findViewById(R.id.ivThumbnailPhoto);

// Does your device have a camera?


if(hasCamera()){
tvHasCamera.setBackgroundColor(0xFF00CC00);
tvHasCamera.setText("You have Camera");
}

// Do you have Camera Apps?


if(hasDefualtCameraApp(MediaStore.ACTION_IMAGE_CAPTURE)){
tvHasCameraApp.setBackgroundColor(0xFF00CC00);
tvHasCameraApp.setText("You have Camera Apps");
}

// add onclick listener to the button


btnTackPic.setOnClickListener(this);

// on button "btnTackPic" is clicked


@Override
public void onClick(View view) {

// create intent with ACTION_IMAGE_CAPTURE action


Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

// to save picture remove comment


/*File file = new File(Environment.getExternalStorageDirectory(),

535
"my-photo.jpg");
Uri photoPath = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoPath); */

// start camera activity


startActivityForResult(intent, TAKE_PICTURE);

// The Android Camera application encodes the photo in the return Intent
delivered to onActivityResult()
// as a small Bitmap in the extras, under the key "data"
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
intent) {

if (requestCode == TAKE_PICTURE && resultCode== RESULT_OK && intent !=


null){
// get bundle
Bundle extras = intent.getExtras();

// get
bitMap = (Bitmap) extras.get("data");
ivThumbnailPhoto.setImageBitmap(bitMap);

}
}

// method to check you have a Camera


private boolean hasCamera(){
return
getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}

// method to check you have Camera Apps


private boolean hasDefualtCameraApp(String action){
final PackageManager packageManager = getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);

return list.size() > 0;

536
}
}

activity_main.xml

<?xml version="1.0"?>

<LinearLayout android:orientation="vertical" tools:context=".MainActivity"


android:layout_margin="10dp" android:layout_height="match_parent"
android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Has Camera? " android:layout_marginBottom="5dp" android:textSize="18dp"
android:textColor="#FFF" android:background="#FF0000"
android:layout_gravity="center_horizontal" android:id="@+id/tvHasCamera"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Has Camera App?" android:textSize="18dp" android:textColor="#FFF"
android:background="#FF0000" android:layout_gravity="center_horizontal"
android:id="@+id/tvHasCameraApp"/>

<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:layout_gravity="center_horizontal" android:id="@+id/ivThumbnailPhoto"
android:src="@mipmap/ic_launcher"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Take a Picture" android:layout_gravity="center_horizontal"
android:id="@+id/btnTakePic"/>

</LinearLayout>

Android manifest.xml

<uses-feature android:name="android.hardware.camera"/>

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

537
 List view (Search engine)
MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

// List view
private ListView lv;

// Listview Adapter
ArrayAdapter<String> adapter;

// Search EditText
EditText inputSearch;

// ArrayList for Listview


ArrayList<HashMap<String, String>> productList;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Listview Data
String products[] = {"Afghanistan",
"Albania",
"Algeria",
"Andorra",

538
"Angola",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Australia",
"Austria",
"Azerbaijan",
"Bahamas",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bhutan",
"Bolivia",
"Bosnia and Herzegovina",
"Botswana",
"Brazil",
"Brunei",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canada",
"Cape Verde",
"Central African Republic",
"Chad",
"Chile",
"China",
"Colombi",
"Comoros",
"Congo (Brazzaville)",
"Congo",
"Costa Rica",
"Cote d'Ivoire",
"Croatia",
"Cuba",
"Cyprus",
"Czech Republic",
"Denmark",
"Djibouti",

539
"Dominica",
"Dominican Republic",
"East Timor (Timor Timur)",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Ethiopia",
"Fiji",
"Finland",
"France",
"Gabon",
"Gambia, The",
"Georgia",
"Germany",
"Ghana",
"Greece",
"Grenada",
"Guatemala",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Honduras",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iran",
"Iraq",
"Ireland",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"Korea, North",
"Korea, South",
"Kuwait",

540
"Kyrgyzstan",
"Laos",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Macedonia",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Mauritania",
"Mauritius",
"Mexico",
"Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Morocco",
"Mozambique",
"Myanmar",
"Namibia",
"Nauru",
"Nepal",
"Netherlands",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",

541
"Philippines",
"Poland",
"Portugal",
"Qatar",
"Romania",
"Russia",
"Rwanda",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Vincent",
"Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Serbia and Montenegro",
"Seychelles",
"Sierra Leone",
"Singapore",
"Slovakia",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"Spain",
"Sri Lanka",
"Sudan",
"Suriname",
"Swaziland",
"Sweden",
"Switzerland",
"Syria",
"Taiwan",
"Tajikistan",
"Tanzania",
"Thailand",
"Togo",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkey",
"Turkmenistan",
"Tuvalu",
"Uganda",

542
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Vatican City",
"Venezuela",
"Vietnam",
"Yemen",
"Zambia",
"Zimbabwe"};

lv = (ListView) findViewById(R.id.list_view);
inputSearch = (EditText) findViewById(R.id.inputSearch);

// Adding items to listview


adapter = new ArrayAdapter<String>(this, R.layout.list_item,
R.id.product_name, products);
lv.setAdapter(adapter);

/**
* Enabling Search Filter
* */
inputSearch.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int
arg3) {
// When user changed the Text
MainActivity.this.adapter.getFilter().filter(cs);
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub

@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub

543
}
});
}

activity_main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<!-- Editext for Search -->


<EditText android:id="@+id/inputSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search products.."
android:inputType="textVisiblePassword"/>

<!-- List View -->


<ListView
android:id="@+id/list_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

</LinearLayout>

list_item.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<!-- Single ListItem -->

<!-- Product Name -->


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

544
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:textSize="16dip"
android:textStyle="bold"/>

</LinearLayout>

 Android Uniquie ID

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import java.lang.reflect.Method;
import android.content.Context;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private static final String TAG = "UniqueId";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
protected void onResume() {
super.onResume();

// Get "Device Serial Number". The Android SystemProperties is apparently not


for public use,
// as it exists on-device but is NOT exposed in the SDK, so treat with a grain
of salt!

545
String serialNumber = "unknown";
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
serialNumber = (String) get.invoke(c, "ro.serialno", serialNumber);
} catch (Exception e) {
Log.e(TAG, "Failed to get serial number", e);
}
((TextView) findViewById(R.id.serial_number)).setText(serialNumber);

// Get "Android ID". According to the JavaDoc:


// "A 64-bit number (as a hex string) that is
// randomly generated on the device's first boot
// and should remain constant for the lifetime
// of the device. (The value may change if a
// factory reset is performed on the device.)"
String androidId = Settings.Secure.getString(getContentResolver(),
Settings.Secure.ANDROID_ID);
((TextView) findViewById(R.id.android_id)).setText(androidId);

// Get the mobile device id (IMEI or similar) if any


String imei = ((TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
((TextView) findViewById(R.id.imei)).setText(imei);
}
}

main.xml

<?xml version="1.0"?>

<TableLayout tools:context=".MainActivity" android:padding="5sp"


android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="@string/serial_number"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"

546
android:id="@+id/serial_number"/>

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="@string/imei"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


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

</TableRow>

<TableRow>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="@string/android_id"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


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

</TableRow>

</TableLayout>

string.xml

<string name="imei">IMEI (Mobile ID)</string>

<string name="android_id">Android ID</string>

<string name="serial_number">Dev Serial Num</string>

Android manifest.xml

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

547
 Telephony Manager

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import java.util.List;
import android.os.Bundle;
import android.telephony.CellLocation;
import android.telephony.NeighboringCellInfo;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.util.Log;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private static final String APP_NAME = "SignalLevelSample";


private static final int EXCELLENT_LEVEL = 75;
private static final int GOOD_LEVEL = 50;
private static final int MODERATE_LEVEL = 25;
private static final int WEAK_LEVEL = 0;

private static final int INFO_SERVICE_STATE_INDEX = 0;


private static final int INFO_CELL_LOCATION_INDEX = 1;
private static final int INFO_CALL_STATE_INDEX = 2;
private static final int INFO_CONNECTION_STATE_INDEX = 3;
private static final int INFO_SIGNAL_LEVEL_INDEX = 4;
private static final int INFO_SIGNAL_LEVEL_INFO_INDEX = 5;
private static final int INFO_DATA_DIRECTION_INDEX = 6;
private static final int INFO_DEVICE_INFO_INDEX = 7;

private static final int[] info_ids = { R.id.serviceState_info,


R.id.cellLocation_info, R.id.callState_info,
R.id.connectionState_info, R.id.signalLevel, R.id.signalLevelInfo,
R.id.dataDirection, R.id.device_info };

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

548
startSignalLevelListener();
displayTelephonyInfo();
}

@Override
protected void onPause() {
super.onPause();
stopListening();
}

@Override
protected void onResume() {
super.onResume();
startSignalLevelListener();
}

@Override
protected void onDestroy() {
stopListening();
super.onDestroy();
}

private void setTextViewText(int id, String text) {


((TextView) findViewById(id)).setText(text);
}

private void setSignalLevel(int id, int infoid, int level) {


int progress = (int) ((((float) level) / 31.0) * 100);
String signalLevelString = getSignalLevelString(progress);
((ProgressBar) findViewById(id)).setProgress(progress);
((TextView) findViewById(infoid)).setText(signalLevelString);
Log.i("signalLevel ", "" + progress);
}

private String getSignalLevelString(int level) {


String signalLevelString = "Weak";
if (level > EXCELLENT_LEVEL)
signalLevelString = "Excellent";
else if (level > GOOD_LEVEL)
signalLevelString = "Good";
else if (level > MODERATE_LEVEL)
signalLevelString = "Moderate";
else if (level > WEAK_LEVEL)
signalLevelString = "Weak";

549
return signalLevelString;
}

private void stopListening() {


TelephonyManager tm = (TelephonyManager)
getSystemService(TELEPHONY_SERVICE);
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
}

private void setDataDirection(int id, int direction) {


int resid = getDataDirectionRes(direction);
((ImageView) findViewById(id)).setImageResource(resid);
}

private int getDataDirectionRes(int direction) {


int resid = R.drawable.data_none;

switch (direction) {
case TelephonyManager.DATA_ACTIVITY_IN:
resid = R.drawable.data_in;
break;
case TelephonyManager.DATA_ACTIVITY_OUT:
resid = R.drawable.data_out;
break;
case TelephonyManager.DATA_ACTIVITY_INOUT:
resid = R.drawable.data_both;
break;
case TelephonyManager.DATA_ACTIVITY_NONE:
resid = R.drawable.data_none;
break;
default:
resid = R.drawable.data_none;
break;
}
return resid;
}

private void startSignalLevelListener() {


TelephonyManager tm = (TelephonyManager)
getSystemService(TELEPHONY_SERVICE);
int events = PhoneStateListener.LISTEN_SIGNAL_STRENGTH
| PhoneStateListener.LISTEN_DATA_ACTIVITY
| PhoneStateListener.LISTEN_CELL_LOCATION
| PhoneStateListener.LISTEN_CALL_STATE

550
| PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR
| PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
| PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR
| PhoneStateListener.LISTEN_SERVICE_STATE;
tm.listen(phoneStateListener, events);
}

private void displayTelephonyInfo() {


TelephonyManager tm = (TelephonyManager)
getSystemService(TELEPHONY_SERVICE);
GsmCellLocation loc = (GsmCellLocation) tm.getCellLocation();
// Reorganize it to do one getSomeData, logString it in pairs, with code
guards
if (loc == null) {
return;
}
int cellid = loc.getCid();
int lac = loc.getLac();
String deviceid = tm.getDeviceId();
String phonenumber = tm.getLine1Number();
String softwareversion = tm.getDeviceSoftwareVersion();
String operatorname = tm.getNetworkOperatorName();
String simcountrycode = tm.getSimCountryIso();
String simoperator = tm.getSimOperatorName();
String simserialno = tm.getSimSerialNumber();
String subscriberid = tm.getSubscriberId();
String networktype = getNetworkTypeString(tm.getNetworkType());
String phonetype = getPhoneTypeString(tm.getPhoneType());
logString("CellID: " + cellid);
logString("LAC: " + lac);
logString("Device ID: " + deviceid);
logString("Phone Number: " + phonenumber);
logString("Software Version: " + softwareversion);
logString("Operator Name: " + operatorname);
logString("SIM Country Code: " + simcountrycode);
logString("SIM Operator: " + simoperator);
logString("SIM Serial No.: " + simserialno);
logString("Sibscriber ID: " + subscriberid);
String deviceinfo = "";
deviceinfo += ("CellID: " + cellid + "\n");
deviceinfo += ("LAC: " + lac + "\n");
deviceinfo += ("Device ID: " + deviceid + "\n");
deviceinfo += ("Phone Number: " + phonenumber + "\n");
deviceinfo += ("Software Version: " + softwareversion + "\n");

551
deviceinfo += ("Operator Name: " + operatorname + "\n");
deviceinfo += ("SIM Country Code: " + simcountrycode + "\n");
deviceinfo += ("SIM Operator: " + simoperator + "\n");
deviceinfo += ("SIM Serial No.: " + simserialno + "\n");
deviceinfo += ("Subscriber ID: " + subscriberid + "\n");
deviceinfo += ("Network Type: " + networktype + "\n");
deviceinfo += ("Phone Type: " + phonetype + "\n");
List<NeighboringCellInfo> cellinfo = tm.getNeighboringCellInfo();
if (null != cellinfo) {
for (NeighboringCellInfo info : cellinfo) {
deviceinfo += ("\tCellID: " + info.getCid() + ", RSSI: "
+ info.getRssi() + "\n");
}
}
setTextViewText(info_ids[INFO_DEVICE_INFO_INDEX], deviceinfo);
}

private String getNetworkTypeString(int type) {


String typeString = "Unknown";
switch (type) {
case TelephonyManager.NETWORK_TYPE_EDGE:
typeString = "EDGE";
break;
case TelephonyManager.NETWORK_TYPE_GPRS:
typeString = "GPRS";
break;
case TelephonyManager.NETWORK_TYPE_UMTS:
typeString = "UMTS";
break;
default:
typeString = "UNKNOWN";
break;
}
return typeString;
}

private String getPhoneTypeString(int type) {


String typeString = "Unknown";
switch (type) {
case TelephonyManager.PHONE_TYPE_GSM:
typeString = "GSM";
break;
case TelephonyManager.PHONE_TYPE_NONE:
typeString = "UNKNOWN";

552
break;
default:
typeString = "UNKNOWN";
break;
}
return typeString;
}

private int logString(String message) {


return Log.i(APP_NAME, message);
}

private final PhoneStateListener phoneStateListener = new PhoneStateListener()


{

@Override
public void onCallForwardingIndicatorChanged(boolean cfi) {
Log.i(APP_NAME, "onCallForwardingIndicatorChanged " + cfi);
super.onCallForwardingIndicatorChanged(cfi);
}

@Override
public void onCallStateChanged(int state, String incomingNumber) {
String callState = "UNKNOWN";
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
callState = "IDLE";
break;
case TelephonyManager.CALL_STATE_RINGING:
callState = "Ringing (" + incomingNumber + ")";
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
callState = "Offhook";
break;
}
setTextViewText(info_ids[INFO_CALL_STATE_INDEX], callState);
Log.i(APP_NAME, "onCallStateChanged " + callState);
super.onCallStateChanged(state, incomingNumber);
}

@Override
public void onCellLocationChanged(CellLocation location) {
String locationString = location.toString();
setTextViewText(info_ids[INFO_CELL_LOCATION_INDEX], locationString);

553
Log.i(APP_NAME, "onCellLocationChanged " + locationString);
super.onCellLocationChanged(location);
}

@Override
public void onDataActivity(int direction) {
String directionString = "none";
switch (direction) {
case TelephonyManager.DATA_ACTIVITY_IN:
directionString = "IN";
break;
case TelephonyManager.DATA_ACTIVITY_OUT:
directionString = "OUT";
break;
case TelephonyManager.DATA_ACTIVITY_INOUT:
directionString = "INOUT";
break;
case TelephonyManager.DATA_ACTIVITY_NONE:
directionString = "NONE";
break;
default:
directionString = "UNKNOWN: " + direction;
break;
}

setDataDirection(info_ids[INFO_DATA_DIRECTION_INDEX], direction);
Log.i(APP_NAME, "onDataActivity " + directionString);
super.onDataActivity(direction);
}

@Override
public void onDataConnectionStateChanged(int state) {
String connectionState = "Unknown";
switch (state) {
case TelephonyManager.DATA_CONNECTED:
connectionState = "Connected";
break;
case TelephonyManager.DATA_CONNECTING:
connectionState = "Connecting";
break;
case TelephonyManager.DATA_DISCONNECTED:
connectionState = "Disconnected";
break;

554
case TelephonyManager.DATA_SUSPENDED:
connectionState = "Suspended";
break;
default:

connectionState = "Unknown: " + state;


break;
}

setTextViewText(info_ids[INFO_CONNECTION_STATE_INDEX],
connectionState);

Log.i(APP_NAME, "onDataConnectionStateChanged " + connectionState);

super.onDataConnectionStateChanged(state);
}

@Override
public void onMessageWaitingIndicatorChanged(boolean mwi) {
Log.i(APP_NAME, "onMessageWaitingIndicatorChanged " + mwi);
super.onMessageWaitingIndicatorChanged(mwi);
}

@Override
public void onServiceStateChanged(ServiceState serviceState) {
String serviceStateString = "UNKNOWN";
switch (serviceState.getState()) {
case ServiceState.STATE_IN_SERVICE:
serviceStateString = "IN SERVICE";
break;
case ServiceState.STATE_EMERGENCY_ONLY:
serviceStateString = "EMERGENCY ONLY";
break;
case ServiceState.STATE_OUT_OF_SERVICE:
serviceStateString = "OUT OF SERVICE";
break;
case ServiceState.STATE_POWER_OFF:
serviceStateString = "POWER OFF";
break;
default:

serviceStateString = "UNKNOWN";
break;
}

555
setTextViewText(info_ids[INFO_SERVICE_STATE_INDEX],
serviceStateString);

Log.i(APP_NAME, "onServiceStateChanged " + serviceStateString);

super.onServiceStateChanged(serviceState);
}

@Override
public void onSignalStrengthChanged(int asu) {
Log.i(APP_NAME, "onSignalStrengthChanged " + asu);
setSignalLevel(info_ids[INFO_SIGNAL_LEVEL_INDEX],
info_ids[INFO_SIGNAL_LEVEL_INFO_INDEX], asu);
super.onSignalStrengthChanged(asu);
}
};
}

activity_main.xml

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

<ScrollView android:scrollbarAlwaysDrawVerticalTrack="false"
android:scrollbarStyle="insideOverlay" android:orientation="vertical"
android:layout_height="wrap_content" android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

-<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


android:layout_width="fill_parent">

-<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="fill_parent">

<TextView style="@style/labelStyleRight" android:text="Service State"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<TextView style="@style/textStyle" android:id="@+id/serviceState_info"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

556
</LinearLayout>

-<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="fill_parent">

<TextView style="@style/labelStyleRight" android:text="Cell Location"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<TextView style="@style/textStyle" android:id="@+id/cellLocation_info"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="fill_parent">

<TextView style="@style/labelStyleRight" android:text="Call State"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<TextView style="@style/textStyle" android:id="@+id/callState_info"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="fill_parent">

<TextView style="@style/labelStyleRight" android:text="Connection State"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<TextView style="@style/textStyle" android:id="@+id/connectionState_info"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

557
<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="fill_parent">

<TextView style="@style/labelStyleRight" android:text="Signal Level"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:layout_weight="0.5">

<ProgressBar style="@style/progressStyle" android:id="@+id/signalLevel"


android:layout_height="wrap_content"
android:layout_width="wrap_content" />

<TextView style="@style/textSmallStyle" android:id="@+id/signalLevelInfo"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

</LinearLayout>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="fill_parent">

<TextView style="@style/labelStyleRight" android:text="Data"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<ImageView style="@style/imageStyle" android:id="@+id/dataDirection"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

<TextView style="@style/labelStyleLeft" android:id="@+id/device_info"


android:layout_width="wrap_content"
android:layout_height="wrap_content" />

558
</LinearLayout>

</ScrollView>

Android manifest.xml

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

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

 Video Capture

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity implements OnClickListener {


public static int VIDEO_CAPTURED = 1;

Button captureVideoButton;
Button playVideoButton;

VideoView videoView;
Uri videoFileUri;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

captureVideoButton = (Button) this.findViewById(R.id.CaptureVideoButton);


playVideoButton = (Button) this.findViewById(R.id.PlayVideoButton);
captureVideoButton.setOnClickListener(this);

559
playVideoButton.setOnClickListener(this);
playVideoButton.setEnabled(false);
videoView = (VideoView) this.findViewById(R.id.VideoView);
}

public void onClick(View v) {


if (v == captureVideoButton) {
Intent captureVideoIntent = new
Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(captureVideoIntent, VIDEO_CAPTURED);
} else if (v == playVideoButton) {
videoView.setVideoURI(videoFileUri);
videoView.start();
}
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {


if (resultCode == RESULT_OK && requestCode == VIDEO_CAPTURED) {
videoFileUri = data.getData();
playVideoButton.setEnabled(true);
}
}
}

activity_main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:text="Capture Video" android:id="@+id/CaptureVideoButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Play Video" android:id="@+id/PlayVideoButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<VideoView android:id="@+id/VideoView" android:layout_width="wrap_content"
android:layout_height="wrap_content"></VideoView>
</LinearLayout>

Android manifest.xml

560
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-
permission>

 Image, Video & Audio

MainActivity.java

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private static final int REQUEST_AUDIO = 1;


private static final int REQUEST_VIDEO = 2;
private static final int REQUEST_IMAGE = 3;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button images = (Button)findViewById(R.id.imageButton);


images.setOnClickListener(this);
Button videos = (Button)findViewById(R.id.videoButton);
videos.setOnClickListener(this);
Button audio = (Button)findViewById(R.id.audioButton);
audio.setOnClickListener(this);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{

561
if(resultCode == Activity.RESULT_OK) {
Uri selectedContent = data.getData();
if(requestCode == REQUEST_IMAGE) {
//Display the image
}
if(requestCode == REQUEST_VIDEO) {
//Play the video clip
}
if(requestCode == REQUEST_AUDIO) {
//Play the audio clip
}
}
}

@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
switch(v.getId()) {
case R.id.imageButton:
intent.setType("image/*");
startActivityForResult(intent, REQUEST_IMAGE);
return;
case R.id.videoButton:
intent.setType("video/*");
startActivityForResult(intent, REQUEST_VIDEO);
return;
case R.id.audioButton:
intent.setType("audio/*");
startActivityForResult(intent, REQUEST_AUDIO);
return;
default:
return;
}
}
}

activity_main.xml

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


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

562
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/imageButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Images"
/>
<Button
android:id="@+id/videoButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Video"
/>
<Button
android:id="@+id/audioButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Audio"
/>
</LinearLayout>

 Screen Resolution information

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {

563
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/** An object to get Screen display metrics */


DisplayMetrics metrics = new DisplayMetrics();

/** Getting the screen display metrics */


getWindowManager().getDefaultDisplay().getMetrics(metrics);

/** Getting reference to TextView object of the main.xml file */


TextView tvMetrics = (TextView) findViewById(R.id.tv_metrics);

/** Getting the screen density in dpi */


String density = Integer.toString(metrics.densityDpi);

/** Getting the screen width and height in pixels */


String resolution = Integer.toString(metrics.widthPixels) + "x" +
Integer.toString(metrics.heightPixels);

/** Converting Screen resolution in pixels into dp */


float dp_w = ( metrics.widthPixels * 160 ) / metrics.xdpi;

/** Converting Screen resolution in pixels into dp */


float dp_h = ( metrics.heightPixels * 160 ) / metrics.ydpi;

/** Getting the screen width and height in dp */


String resolution_dp = Float.toString((int)dp_w) + "x" +
Float.toString((int)dp_h);

/** Setting the density, width and height of the screen to the TextView
object */
tvMetrics.setText("Density : "+density + "\n" + "Resolution in pixels : "
+ resolution + "\nResolution in dp : " + resolution_dp );

}
}

activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"

564
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:layout_height="wrap_content" android:layout_width="fill_parent"


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

</LinearLayout>

 Open Dial Pad

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/** Referring to the button object of the main.xml layout */


Button btn = (Button) findViewById(R.id.btn);

/** Defining a click event listener */


OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
/** Creating an intent with the dialer's action name */
/** Since the intent is created with activity's action name, the
intent is an implicit intent */
Intent intent = new Intent("android.intent.action.DIAL");

/** Starting the Dialer activity */


startActivity(intent);
}

565
};

/** Setting click event listener for the buttonS */


btn.setOnClickListener(listener);
}
}

activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<Button android:layout_height="wrap_content" android:layout_width="fill_parent"


android:text="@string/dialer" android:id="@+id/btn"/>

</LinearLayout>

string.xml

<string name="dialer">Open Dialer</string>

 URL browser search engine

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

566
public class MainActivity extends AppCompatActivity {

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/** Getting a reference to the button object of the main.xml */


Button btn = (Button) findViewById(R.id.btn_browse);

OnClickListener listener = new OnClickListener() {

@Override
public void onClick(View v) {
/** Getting a reference to the textedit object of the main.xml */
EditText txt = (EditText) findViewById(R.id.te_url);

/** Creating a view action to display the website */


Intent intent = new Intent("android.intent.action.VIEW");

/** Setting up a uri object with a web address */


Uri data = Uri.parse("http://"+txt.getText().toString());

/** Setting web address to the intent object as data */


intent.setData(data);

/** Start an activity that matches intent action and intent data
*/
startActivity(intent);

}
};

btn.setOnClickListener(listener);

}
}

activity_main.xml

567
<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<EditText android:layout_height="wrap_content" android:layout_width="fill_parent"


android:inputType="text" android:hint="@string/hnt_te_url" android:id="@+id/te_url"/>

<Button android:layout_height="wrap_content" android:layout_width="fill_parent"


android:id="@+id/btn_browse" android:text="@string/lbl_btn_browse"/>

</LinearLayout>

string.xml

<string name="hnt_te_url">Enter a website here ...</string>

<string name="lbl_btn_browse">Browse</string>

Android manifest.xml

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

 Calculator

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

Button button0 , button1 , button2 , button3 , button4 , button5 , button6 ,


button7 , button8 , button9 , buttonAdd , buttonSub , buttonDivision ,
buttonMul , button10 , buttonC , buttonEqual ;

568
EditText edt1 ;

float mValueOne , mValueTwo ;

boolean mAddition , mSubtract ,mMultiplication ,mDivision ;

@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);
button10 = (Button) findViewById(R.id.button10);
buttonAdd = (Button) findViewById(R.id.buttonadd);
buttonSub = (Button) findViewById(R.id.buttonsub);
buttonMul = (Button) findViewById(R.id.buttonmul);
buttonDivision = (Button) findViewById(R.id.buttondiv);
buttonC = (Button) findViewById(R.id.buttonC);
buttonEqual = (Button) findViewById(R.id.buttoneql);
edt1 = (EditText) findViewById(R.id.edt1);

button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"1");
}
});

button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"2");
}

569
});

button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"3");
}
});

button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"4");
}
});

button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"5");
}
});

button6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"6");
}
});

button7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"7");
}
});

button8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"8");
}
});

570
button9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"9");
}
});

button0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+"0");
}
});

buttonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

if (edt1 == null){
edt1.setText("");
}else {
mValueOne = Float.parseFloat(edt1.getText() + "");
mAddition = true;
edt1.setText(null);
}
}
});

buttonSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mValueOne = Float.parseFloat(edt1.getText() + "");
mSubtract = true ;
edt1.setText(null);
}
});

buttonMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mValueOne = Float.parseFloat(edt1.getText() + "");
mMultiplication = true ;
edt1.setText(null);
}

571
});

buttonDivision.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mValueOne = Float.parseFloat(edt1.getText()+"");
mDivision = true ;
edt1.setText(null);
}
});

buttonEqual.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mValueTwo = Float.parseFloat(edt1.getText() + "");

if (mAddition == true){

edt1.setText(mValueOne + mValueTwo +"");


mAddition=false;
}

if (mSubtract == true){
edt1.setText(mValueOne - mValueTwo+"");
mSubtract=false;
}

if (mMultiplication == true){
edt1.setText(mValueOne * mValueTwo+"");
mMultiplication=false;
}

if (mDivision == true){
edt1.setText(mValueOne / mValueTwo+"");
mDivision=false;
}
}
});

buttonC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText("");

572
}
});

button10.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText()+".");
}
});
}
}

activity_main.xml

<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:id="@+id/relative1">

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edt1"/>

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:id="@+id/button1"
android:layout_marginTop="94dp"
android:layout_below="@+id/edt1"
android:layout_toStartOf="@+id/button4"
android:layout_alignRight="@+id/button4"
android:layout_alignEnd="@+id/button4" />

<Button

573
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:id="@+id/button2"
android:layout_alignTop="@+id/button1"
android:layout_toLeftOf="@+id/button3"
android:layout_toStartOf="@+id/button3" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"
android:id="@+id/button3"
android:layout_alignTop="@+id/button2"
android:layout_centerHorizontal="true" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4"
android:id="@+id/button4"
android:layout_below="@+id/button1"
android:layout_toLeftOf="@+id/button2" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"
android:id="@+id/button5"
android:layout_alignBottom="@+id/button4"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6"
android:id="@+id/button6"
android:layout_below="@+id/button3"

574
android:layout_alignLeft="@+id/button3"
android:layout_alignStart="@+id/button3" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="7"
android:id="@+id/button7"
android:layout_below="@+id/button4"
android:layout_toLeftOf="@+id/button2" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8"
android:id="@+id/button8"
android:layout_below="@+id/button5"
android:layout_alignLeft="@+id/button5"
android:layout_alignStart="@+id/button5" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="9"
android:id="@+id/button9"
android:layout_below="@+id/button6"
android:layout_alignLeft="@+id/button6"
android:layout_alignStart="@+id/button6" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/buttonadd"
android:layout_alignTop="@+id/button3"
android:layout_toRightOf="@+id/button3"
android:layout_marginLeft="46dp"
android:layout_marginStart="46dp"
android:layout_alignRight="@+id/edt1"
android:layout_alignEnd="@+id/edt1" />

575
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:id="@+id/buttonsub"
android:layout_below="@+id/buttonadd"
android:layout_alignLeft="@+id/buttonadd"
android:layout_alignStart="@+id/buttonadd"
android:layout_alignRight="@+id/buttonadd"
android:layout_alignEnd="@+id/buttonadd" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*"
android:id="@+id/buttonmul"
android:layout_below="@+id/buttonsub"
android:layout_alignLeft="@+id/buttonsub"
android:layout_alignStart="@+id/buttonsub"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="."
android:id="@+id/button10"
android:layout_below="@+id/button7"
android:layout_toLeftOf="@+id/button2" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:id="@+id/button0"
android:layout_below="@+id/button8"
android:layout_alignLeft="@+id/button8"
android:layout_alignStart="@+id/button8" />

576
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C"
android:id="@+id/buttonC"
android:layout_below="@+id/button9"
android:layout_alignLeft="@+id/button9"
android:layout_alignStart="@+id/button9" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/"
android:id="@+id/buttondiv"
android:layout_below="@+id/buttonmul"
android:layout_alignLeft="@+id/buttonmul"
android:layout_alignStart="@+id/buttonmul"
android:layout_alignRight="@+id/buttonmul"
android:layout_alignEnd="@+id/buttonmul" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="="
android:id="@+id/buttoneql"
android:layout_below="@+id/button0"
android:layout_marginTop="37dp"
android:layout_alignRight="@+id/buttondiv"
android:layout_alignEnd="@+id/buttondiv"
android:layout_alignLeft="@+id/button10"
android:layout_alignStart="@+id/button10" />

</RelativeLayout>

 Battery level

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.os.BatteryManager;

577
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private TextView batteryPercent;


private void getBatteryPercentage() {
BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
context.unregisterReceiver(this);
int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int level = -1;
if (currentLevel >= 0 && scale > 0) {
level = (currentLevel * 100) / scale;
}
batteryPercent.setText("Battery Level Remaining: " + level + "%");
}
};
IntentFilter batteryLevelFilter = new
IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}

/* @Override*/
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
batteryPercent = (TextView) this.findViewById(R.id.batteryLevel);
getBatteryPercentage();
}

// @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

578
activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity" android:layout_height="match_parent"


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

<TextView android:layout_height="fill_parent" android:layout_width="fill_parent"


android:textSize="20dip" android:gravity="center_vertical|center_horizontal"
android:id="@+id/batteryLevel"> </TextView>

</RelativeLayout>

 Airplane mode

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@SuppressWarnings("deprecation")
public void airPlanemodeON(View v) {
boolean isEnabled = Settings.System.getInt(this.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) == 1;
if (isEnabled == false) {
modifyAirplanemode(true);
Toast.makeText(getApplicationContext(), "Airplane Mode ON",

579
Toast.LENGTH_LONG).show();
}
}

public void airPlanemodeOFF(View v) {


boolean isEnabled = Settings.System.getInt(this.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) == 1;
if (isEnabled == true)// means this is the request to turn ON AIRPLANE mode
{
modifyAirplanemode(false);
Toast.makeText(getApplicationContext(), "Airplane Mode OFF",
Toast.LENGTH_LONG).show();
}
}

public void modifyAirplanemode(boolean mode) {


Settings.System.putInt(getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, mode ? 1 : 0);// Turning ON/OFF
Airplane mode.

Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);// creating


intent and Specifying action for AIRPLANE mode.
intent.putExtra("state", !mode);// indicate the "state" of airplane mode is
changed to ON/OFF
sendBroadcast(intent);// Broadcasting and Intent

}
}

activity_main.xml

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

<RelativeLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Airplane Mode ON" android:onClick="airPlanemodeON"
android:layout_marginTop="34dp" android:layout_centerHorizontal="true"
android:layout_alignParentTop="true" android:id="@+id/ModeON"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"

580
android:text="Airplane Mode OFF" android:onClick="airPlanemodeOFF"
android:layout_marginTop="116dp" android:layout_centerHorizontal="true"
android:id="@+id/ModeOFF" android:layout_below="@+id/buttonStop"/>

</RelativeLayout>

Android manifest.xml

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

 Android Features Check

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView value = (TextView) findViewById(R.id.res);
String result = "";
Context context = this;
PackageManager packageManager = context.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
result += "Camera: YES";
}else{
result += "Camera: NO";
}
if (packageManager
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {
result += "\nFront facing camera: YES";
}else{
result += "\nFront facing camera: NO";

581
}
if (packageManager
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
result += "\nCamera support flash: YES";
}else{
result += "\nCamera support flash: NO";
}
if (packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
result += "\nBluetooth: YES";
}else{
result += "\nBluetooth: NO";
}
if (packageManager.hasSystemFeature(PackageManager.FEATURE_NFC)) {
result += "\nNFC: YES";
}else{
result += "\nNFC: NO";
}
if (packageManager.hasSystemFeature(PackageManager.FEATURE_MICROPHONE)) {
result += "\nMicrophone: YES";
}else{
result += "\nMicrophone: NO";
}
if (packageManager
.hasSystemFeature(PackageManager.FEATURE_SENSOR_ACCELEROMETER)) {
result += "\nAccelerometer sensor: YES";
}else{
result += "\nAccelerometer sensor: NO";
}
if (packageManager
.hasSystemFeature(PackageManager.FEATURE_SENSOR_BAROMETER)) {
result += "Barometer (air pressure sensor) :YES";
}else{
result += "Barometer (air pressure sensor) :NO";
}
if (packageManager
.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
result += "\nMagnetometer (compass): YES";
}else{
result += "\nMagnetometer (compass): NO";
}
if (packageManager
.hasSystemFeature(PackageManager.FEATURE_SENSOR_GYROSCOPE)) {
result += "\nGyroscope: YES";
}else{

582
result += "\nGyroscope: NO";
}
if (packageManager
.hasSystemFeature(PackageManager.FEATURE_SENSOR_LIGHT)) {
result += "\nLight sensor: YES";
}else{
result += "\nLight sensor: YES";
}
if (packageManager
.hasSystemFeature(PackageManager.FEATURE_SENSOR_PROXIMITY)) {
result += "\nProximity sensor: YES";
} else {
result += "\nProximity sensor: NO";
}
value.setText(result);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity" android:layout_height="match_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:id="@+id/res" android:layout_marginLeft="50dip"
android:layout_marginTop="20dip"/>

</RelativeLayout>

 Web View from Youtube

583
MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

String frameVideo = "<html><body>Video From YouTube<br><iframe width=\"420\"


height=\"315\" src=\"https://www.youtube.com/embed/47yJ2XCRLZs\" frameborder=\"0\"
allowfullscreen></iframe></body></html>";

WebView displayYoutubeVideo = (WebView) findViewById(R.id.mWebView);


displayYoutubeVideo.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
WebSettings webSettings = displayYoutubeVideo.getSettings();
webSettings.setJavaScriptEnabled(true);
displayYoutubeVideo.loadData(frameVideo, "text/html", "utf-8");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

584
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity" android:layout_height="match_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Embed and Play YouTube Video in Android WebView Tutorial and Example"/>

<WebView android:layout_height="match_parent" android:layout_width="match_parent"


android:id="@+id/mWebView"> </WebView>

</RelativeLayout>

Android manifest.xml

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

 How to launch alam application using intent

MainActivity.java

import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;

585
import android.provider.AlarmClock;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void browser1(View view) {


Intent i = new Intent(AlarmClock.ACTION_SET_ALARM);
startActivity(i);
}
}

activity_main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="alarm"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:onClick="browser1" />
</LinearLayout>

Android manifest.xml

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

586
 Battery Information

MainActivity.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.widget.TextView;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

private TextView batteryLevel, batteryVoltage, batteryTemperature,


batteryTechnology, batteryStatus, batteryHealth;

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

batteryLevel = (TextView)findViewById(R.id.batterylevel);
batteryVoltage = (TextView)findViewById(R.id.batteryvoltage);
batteryTemperature = (TextView)findViewById(R.id.batterytemperature);
batteryTechnology = (TextView)findViewById(R.id.batterytechology);
batteryStatus = (TextView)findViewById(R.id.batterystatus);
batteryHealth = (TextView)findViewById(R.id.batteryhealth);

this.registerReceiver(this.myBatteryReceiver,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}

private BroadcastReceiver myBatteryReceiver


= new BroadcastReceiver(){

@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub

587
if (arg1.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
batteryLevel.setText("Level: "
+ String.valueOf(arg1.getIntExtra("level", 0)) + "%");
batteryVoltage.setText("Voltage: "
+ String.valueOf((float)arg1.getIntExtra("voltage", 0)/1000) +
"V");
batteryTemperature.setText("Temperature: "
+ String.valueOf((float)arg1.getIntExtra("temperature", 0)/10)
+ "c");
batteryTechnology.setText("Technology: " +
arg1.getStringExtra("technology"));

int status = arg1.getIntExtra("status",


BatteryManager.BATTERY_STATUS_UNKNOWN);
String strStatus;
if (status == BatteryManager.BATTERY_STATUS_CHARGING){
strStatus = "Charging";
} else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING){
strStatus = "Dis-charging";
} else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING){
strStatus = "Not charging";
} else if (status == BatteryManager.BATTERY_STATUS_FULL){
strStatus = "Full";
} else {
strStatus = "Unknown";
}
batteryStatus.setText("Status: " + strStatus);

int health = arg1.getIntExtra("health",


BatteryManager.BATTERY_HEALTH_UNKNOWN);
String strHealth;
if (health == BatteryManager.BATTERY_HEALTH_GOOD){
strHealth = "Good";
} else if (health == BatteryManager.BATTERY_HEALTH_OVERHEAT){
strHealth = "Over Heat";
} else if (health == BatteryManager.BATTERY_HEALTH_DEAD){
strHealth = "Dead";
} else if (health == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE){
strHealth = "Over Voltage";
} else if (health ==
BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE){
strHealth = "Unspecified Failure";
} else{
strHealth = "Unknown";

588
}
batteryHealth.setText("Health: " + strHealth);

}
}

};
}

activity_main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Battery Info."
/>
<TextView
android:id="@+id/batterylevel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Battery Level:"
/>
<TextView
android:id="@+id/batteryvoltage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Battery Voltage:"
/>
<TextView
android:id="@+id/batterytemperature"
android:layout_width="fill_parent"
android:layout_height="wrap_content"

589
android:text="Battery Temperature:"
/>
<TextView
android:id="@+id/batterytechology"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Technology:"
/>
<TextView
android:id="@+id/batterystatus"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Status:"
/>
<TextView
android:id="@+id/batteryhealth"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Health:"
/>
</LinearLayout>

 Change the name of the application

Note: If you want to change the application name (from MyApplication to MyApplication5496), you
have to replace the statement

<string name="app_name">My Application</string>

in string.xml by the statement

<string name="app_name">My Application5496</string>

 Brightness Control

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.content.ContentResolver;
import android.os.Bundle;
import android.provider.Settings.SettingNotFoundException;

590
import android.provider.Settings.System;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


private SeekBar brightbar;

// Variable to store brightness value


private int brightness;
// Content resolver used as a handle to the system's settings
private ContentResolver cResolver;
// Window object, that will store a reference to the current window
private Window window;

TextView txtPerc;

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Instantiate seekbar object


brightbar = (SeekBar) findViewById(R.id.brightbar);

txtPerc = (TextView) findViewById(R.id.txtPercentage);

// Get the content resolver


cResolver = getContentResolver();

// Get the current window


window = getWindow();

// Set the seekbar range between 0 and 255


brightbar.setMax(255);
// Set the seek bar progress to 1
brightbar.setKeyProgressIncrement(1);

try {
// Get the current system brightness

591
brightness = System.getInt(cResolver, System.SCREEN_BRIGHTNESS);
} catch (SettingNotFoundException e) {
// Throw an error case it couldn't be retrieved
Log.e("Error", "Cannot access system brightness");
e.printStackTrace();
}

// Set the progress of the seek bar based on the system's brightness
brightbar.setProgress(brightness);

// Register OnSeekBarChangeListener, so it can actually change values


brightbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
// Set the system brightness using the brightness variable value
System.putInt(cResolver, System.SCREEN_BRIGHTNESS, brightness);
// Get the current window attributes
LayoutParams layoutpars = window.getAttributes();
// Set the brightness of this window
layoutpars.screenBrightness = brightness / (float) 255;
// Apply attribute changes to this window
window.setAttributes(layoutpars);
}

public void onStartTrackingTouch(SeekBar seekBar) {


// Nothing handled here
}

public void onProgressChanged(SeekBar seekBar, int progress,


boolean fromUser) {
// Set the minimal brightness level
// if seek bar is 20 or any value below
if (progress <= 20) {
// Set the brightness to 20
brightness = 20;
} else // brightness is greater than 20
{
// Set brightness variable based on the progress bar
brightness = progress;
}
// Calculate the brightness percentage
float perc = (brightness / (float) 255) * 100;
// Set the brightness percentage
txtPerc.setText((int) perc + "%");
}

592
});
}
}

activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="fill_parent"


android:text="Slide the bar to change the brightness:"/>

<SeekBar android:layout_height="wrap_content" android:layout_width="fill_parent"


android:layout_marginRight="30dip" android:layout_marginLeft="30dip"
android:id="@+id/brightbar"> </SeekBar>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="0%" android:id="@+id/txtPercentage"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_gravity="center"/>

</LinearLayout>

Android manifest.xml

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

 Wifi State Acess information

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

593
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {


private WifiManager mainWifi;
private WifiReceiver receiverWifi;
private Button btnRefresh;
ListAdapter adapter;
ListView lvWifiDetails;
List<ScanResult> wifiList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

lvWifiDetails = (ListView) findViewById(R.id.lvWifiDetails);


btnRefresh = (Button) findViewById(R.id.btnRefresh);
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
scanWifiList();

btnRefresh.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
scanWifiList();

}
});
}

private void setAdapter() {


adapter = new ListAdapter(getApplicationContext(), wifiList);
lvWifiDetails.setAdapter(adapter);
}

594
private void scanWifiList() {
mainWifi.startScan();
wifiList = mainWifi.getScanResults();

setAdapter();

class WifiReceiver extends BroadcastReceiver {


public void onReceive(Context c, Intent intent) {
}
}
}

ListAdapter.java

import java.util.List;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ListAdapter extends BaseAdapter {

Context context;
LayoutInflater inflater;
List<ScanResult> wifiList;

public ListAdapter(Context context, List<ScanResult> wifiList) {


this.context = context;
this.wifiList = wifiList;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return wifiList.size();
}

595
@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
View view = convertView;
if (view == null) {
view = inflater.inflate(R.layout.dataset, null);
holder = new Holder();
holder.tvDetails = (TextView) view.findViewById(R.id.tvDetails);

view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
holder.tvDetails.setText("SSID :: " + wifiList.get(position).SSID
+ "\nStrength :: " + wifiList.get(position).level
+ "\nBSSID :: " + wifiList.get(position).BSSID
+ "\nChannel :: "
+ convertFrequencyToChannel(wifiList.get(position).frequency)
+ "\nFrequency :: " + wifiList.get(position).frequency
+ "\nCapability :: " + wifiList.get(position).capabilities);

return view;
}

public static int convertFrequencyToChannel(int freq) {


if (freq >= 2412 && freq <= 2484) {
return (freq - 2412) / 5 + 1;
} else if (freq >= 5170 && freq <= 5825) {
return (freq - 5170) / 5 + 34;
} else {
return -1;
}
}

596
class Holder {
TextView tvDetails;

}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.9"
android:orientation="vertical" >

<ListView
android:id="@+id/lvWifiDetails"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.1"
android:orientation="vertical" >

<Button
android:id="@+id/btnRefresh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:text="Refresh" />
</LinearLayout>

597
</LinearLayout>

dataset.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/tvDetails"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#000000" />

</LinearLayout>

Android manifest.xml

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

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

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

 Battery level in percentage (picture)

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

598
import android.content.IntentFilter;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {


@Override
public void onReceive(Context c, Intent i) {
int level = i.getIntExtra("level", 0);
ProgressBar pb = (ProgressBar) findViewById(R.id.progressbar);
pb.setProgress(level);
TextView tv = (TextView) findViewById(R.id.textfield);
tv.setText("Battery Level: " + Integer.toString(level) + "%");
}

};

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerReceiver(mBatInfoReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
}
}

activity_main.xml

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

<LinearLayout android:orientation="vertical" android:layout_height="fill_parent"


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

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:layout_marginTop="40dip" android:layout_gravity="center"
android:id="@+id/textfield"/>

<ProgressBar android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_marginTop="20dip"
android:layout_gravity="center" android:id="@+id/progressbar"

599
android:minWidth="200dip" android:minHeight="100dip" android:maxWidth="300dip"
android:maxHeight="500dip" android:max="100"
style="?android:attr/progressBarStyleHorizontal"/>

</LinearLayout>

 Insert and GET CONTACT

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents.Insert;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements OnClickListener {


private EditText edtName, edtNumber;
private static final int CALL_CONTACT_PICKER = 200;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtName = (EditText) findViewById(R.id.edtName);
edtNumber = (EditText) findViewById(R.id.edtPhone);
findViewById(R.id.btnInsert).setOnClickListener(this);
findViewById(R.id.btnGetContact).setOnClickListener(this);
}

@Override
public void onClick(View v) {

600
switch (v.getId()) {
case R.id.btnInsert:
Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
i.setType(Contacts.CONTENT_ITEM_TYPE);
i.putExtra(Insert.NAME, edtName.getText().toString());
i.putExtra(Insert.PHONE, edtNumber.getText().toString());
startActivity(i);
break;
case R.id.btnGetContact:
Intent callContactPickerIntent = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
// filters contact with phone numbers
callContactPickerIntent

.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(callContactPickerIntent,
CALL_CONTACT_PICKER);
break;
default:
break;
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{

if (resultCode == RESULT_OK) {
Cursor cursor = null;

Uri result = data.getData();


// String id = result.getLastPathSegment();

cursor = getContentResolver().query(result, null, null, null, null);


// String contactId=cursor.get;
if (cursor == null) {

Toast.makeText(this, "Selection Fail", Toast.LENGTH_LONG)


.show();
return;
}
if (!cursor.moveToFirst()) {

cursor.close();

601
Toast.makeText(this, "Selection Fail", Toast.LENGTH_LONG)
.show();
return;
}
String contactName = cursor
.getString(cursor

.getColumnIndex((ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
.toString().trim()));
String contactNumber = cursor
.getString(cursor

.getColumnIndex((ContactsContract.CommonDataKinds.Phone.NUMBER)));
switch (requestCode) {

case CALL_CONTACT_PICKER:
Toast.makeText(this,
"Name :" + contactName + "Number :" + contactNumber,
Toast.LENGTH_LONG).show();
break;

default:
break;

}
cursor.close();

} else {
// gracefully handle failure
Log.w("Auto Respond", "Warning: activity result not ok");
}
}

activity_main.xml

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

<LinearLayout android:stretchColumns="1" android:orientation="vertical"


android:gravity="center" android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

602
<EditText android:layout_height="wrap_content" android:layout_width="match_parent"
android:hint="Name" android:id="@+id/edtName"/>

<EditText android:layout_height="wrap_content" android:layout_width="match_parent"


android:hint="Number" android:id="@+id/edtPhone" android:inputType="phone"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:id="@+id/btnInsert" android:text="Insert Contact"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:id="@+id/btnGetContact" android:text="Get Contact"/>

</LinearLayout>

 IP Address

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.text.format.Formatter;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

Button button;
TextView textview;
String IPaddress;
Boolean IPValue;
@Override

603
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button)findViewById(R.id.button1);
textview = (TextView)findViewById(R.id.textView1);

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

NetwordDetect();

}
});

//Check if Internet Network is active


private void NetwordDetect() {

boolean WIFI = false;

boolean MOBILE = false;

ConnectivityManager CM = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo[] networkInfo = CM.getAllNetworkInfo();

for (NetworkInfo netInfo : networkInfo) {

if (netInfo.getTypeName().equalsIgnoreCase("WIFI"))

if (netInfo.isConnected())

WIFI = true;

if (netInfo.getTypeName().equalsIgnoreCase("MOBILE"))

if (netInfo.isConnected())

604
MOBILE = true;
}

if(WIFI == true)

{
IPaddress = GetDeviceipWiFiData();
textview.setText(IPaddress);

if(MOBILE == true)
{

IPaddress = GetDeviceipMobileData();
textview.setText(IPaddress);

public String GetDeviceipMobileData(){


try {
for (Enumeration<NetworkInterface> en =
NetworkInterface.getNetworkInterfaces();
en.hasMoreElements();) {
NetworkInterface networkinterface = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr =
networkinterface.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (Exception ex) {
Log.e("Current IP", ex.toString());
}
return null;
}

605
public String GetDeviceipWiFiData()
{

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);

@SuppressWarnings("deprecation")

String ip =
Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

return ip;

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout
tools:context="com.displayipaddress_android_examples.com.MainActivity"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:textAppearance="?android:attr/textAppearanceLarge" android:text="IP Address
display Here" android:layout_marginTop="188dp" android:layout_centerHorizontal="true"
android:layout_alignParentTop="true" android:id="@+id/textView1"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Click here to get current device " android:layout_marginTop="22dp"
android:layout_centerHorizontal="true" android:id="@+id/button1"
android:layout_below="@+id/textView1"/>

</RelativeLayout>

606
Android manifest.xml

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

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

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

 ZoomInOut WebView

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

WebView Webview;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Webview = (WebView)findViewById(R.id.webView1);
WebSettings webSetting = Webview.getSettings();

//This function enable Zoom in Zoom out Feature on WebView


webSetting.setBuiltInZoomControls(true);

Webview.setWebViewClient(new WebViewClient());
Webview.loadUrl("http://google.com");
}

private class WebViewClient extends android.webkit.WebViewClient


{
@Override

607
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
return super.shouldOverrideUrlLoading(view, url);
}
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<WebView android:layout_height="match_parent" android:layout_width="match_parent"


android:layout_centerHorizontal="true" android:layout_alignParentTop="true"
android:id="@+id/webView1"/>

</RelativeLayout>

Android manifest.xml

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

 Enable GPS Location Service

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;

608
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

Button button;
Context context;
Intent intent1, intent2;
TextView textview;
LocationManager locationManager ;
boolean GpsStatus ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

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

context = getApplicationContext();

CheckGpsStatus();

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

intent1 = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);


startActivity(intent1);

}
});

public void CheckGpsStatus(){

locationManager =
(LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

GpsStatus =

609
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

if(GpsStatus == true)
{
textview.setText("Location Services Is Enabled");
}else {
textview.setText("Location Services Is Disabled");
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Click Here to Enable Disable GPS location service programmatically in
android" android:layout_marginTop="70dp" android:layout_centerHorizontal="true"
android:layout_alignTop="@+id/textView1" android:id="@+id/button1"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="location service Stauts Shows Here" android:layout_marginTop="132dp"
android:layout_centerHorizontal="true" android:id="@+id/textView1"
android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center"
android:layout_alignParentTop="true"/>

</RelativeLayout>

Android manifest.xml

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

<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"/>

 BLUETOOTH

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import java.util.Set;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private static final int REQUEST_ENABLE_BT = 1;


private Button onBtn;
private Button offBtn;
private Button listBtn;
private Button findBtn;
private TextView text;
private BluetoothAdapter myBluetoothAdapter;
private Set<BluetoothDevice> pairedDevices;
private ListView myListView;
private ArrayAdapter<String> BTArrayAdapter;

611
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// take an instance of BluetoothAdapter - Bluetooth radio


myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(myBluetoothAdapter == null) {
onBtn.setEnabled(false);
offBtn.setEnabled(false);
listBtn.setEnabled(false);
findBtn.setEnabled(false);
text.setText("Status: not supported");

Toast.makeText(getApplicationContext(),"Your device does not support


Bluetooth",
Toast.LENGTH_LONG).show();
} else {
text = (TextView) findViewById(R.id.text);
onBtn = (Button)findViewById(R.id.turnOn);
onBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
on(v);
}
});

offBtn = (Button)findViewById(R.id.turnOff);
offBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
off(v);
}
});

listBtn = (Button)findViewById(R.id.paired);
listBtn.setOnClickListener(new OnClickListener() {

@Override

612
public void onClick(View v) {
// TODO Auto-generated method stub
list(v);
}
});

findBtn = (Button)findViewById(R.id.search);
findBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
find(v);
}
});

myListView = (ListView)findViewById(R.id.listView1);

// create the arrayAdapter that contains the BTDevices, and set it to the
ListView
BTArrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1);
myListView.setAdapter(BTArrayAdapter);
}
}

public void on(View view){


if (!myBluetoothAdapter.isEnabled()) {
Intent turnOnIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(turnOnIntent, REQUEST_ENABLE_BT);

Toast.makeText(getApplicationContext(),"Bluetooth turned on" ,


Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(getApplicationContext(),"Bluetooth is already on",
Toast.LENGTH_LONG).show();
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(requestCode == REQUEST_ENABLE_BT){

613
if(myBluetoothAdapter.isEnabled()) {
text.setText("Status: Enabled");
} else {
text.setText("Status: Disabled");
}
}
}

public void list(View view){


// get paired devices
pairedDevices = myBluetoothAdapter.getBondedDevices();

// put it's one to the adapter


for(BluetoothDevice device : pairedDevices)
BTArrayAdapter.add(device.getName()+ "\n" + device.getAddress());

Toast.makeText(getApplicationContext(),"Show Paired Devices",


Toast.LENGTH_SHORT).show();

final BroadcastReceiver bReceiver = new BroadcastReceiver() {


public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// When discovery finds a device
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Get the BluetoothDevice object from the Intent
BluetoothDevice device =
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// add the name and the MAC address of the object to the arrayAdapter
BTArrayAdapter.add(device.getName() + "\n" + device.getAddress());
BTArrayAdapter.notifyDataSetChanged();
}
}
};

public void find(View view) {


if (myBluetoothAdapter.isDiscovering()) {
// the button is pressed when it discovers, so cancel the discovery
myBluetoothAdapter.cancelDiscovery();
}
else {
BTArrayAdapter.clear();
myBluetoothAdapter.startDiscovery();

614
registerReceiver(bReceiver, new
IntentFilter(BluetoothDevice.ACTION_FOUND));
}
}

public void off(View view){


myBluetoothAdapter.disable();
text.setText("Status: Disconnected");

Toast.makeText(getApplicationContext(),"Bluetooth turned off",


Toast.LENGTH_LONG).show();
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(bReceiver);
}

activity_main.xml

<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:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/Text" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="30dp" >

615
<Button
android:id="@+id/turnOn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/on" />

<Button
android:id="@+id/turnOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/off" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="80dp" >

<Button
android:id="@+id/paired"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/List" />

<Button
android:id="@+id/search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Find" />

<ListView
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="200dp" >

</ListView>

</LinearLayout>

</RelativeLayout>

616
String.xml

<string name="Text">Status: -</string>

<string name="on">Turn On</string>

<string name="off">Turn Off</string>

<string name="List">List paired Devices</string>

<string name="Find">Search new Devices / Cancel</string>

Android manifest.xml

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

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

 CHECK GPS LOCATION SERVICE

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.content.Context;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

Button button;
TextView textview;
Context context;
LocationManager locationManager ;
boolean GpsStatus ;
@Override
protected void onCreate(Bundle savedInstanceState) {

617
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button)findViewById(R.id.button1);
textview = (TextView)findViewById(R.id.textView1);

context = getApplicationContext();

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

CheckGpsStatus() ;

if(GpsStatus == true)
{
textview.setText("Location Services Is Enabled");
}else {
textview.setText("Location Services Is Disabled");
}

}
});
}

public void CheckGpsStatus(){

locationManager =
(LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

GpsStatus =
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity"

618
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Click Here to Check GPS location services is enabled or not in Android"
android:layout_centerVertical="true" android:layout_centerHorizontal="true"
android:id="@+id/button1"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="GPS Status" android:layout_centerHorizontal="true"
android:id="@+id/textView1" android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginBottom="48dp" android:layout_above="@+id/button1"/>

</RelativeLayout>

Android manifest.xml

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

 View video from internet

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

VideoView videoview ;
MediaController mediacontroller;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

619
videoview = (VideoView)findViewById(R.id.videoView1);
mediacontroller = new MediaController(MainActivity.this);

videoview.setVideoPath(
"http://www.android-examples.com/wp-
content/uploads/2016/01/sample_video.3gp");

mediacontroller.setAnchorView(videoview);

videoview.setMediaController(mediacontroller);

videoview.start();

}
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout android:background="#02bf95" tools:context=".MainActivity"


android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<VideoView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_centerVertical="true"
android:layout_centerHorizontal="true" android:id="@+id/videoView1"/>

</RelativeLayout>

Android manifest.xml

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

620
 Play music from internet

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import java.io.IOException;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

Button buttonStop,buttonStart ;

String AudioURL = "http://www.android-examples.com/wp-


content/uploads/2016/04/Thunder-rumble.mp3";

MediaPlayer mediaplayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

buttonStart = (Button)findViewById(R.id.button1);
buttonStop = (Button)findViewById(R.id.button2);

mediaplayer = new MediaPlayer();


mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

buttonStart.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

try {

mediaplayer.setDataSource(AudioURL);
mediaplayer.prepare();

621
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

mediaplayer.start();

}
});

buttonStop.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

mediaplayer.stop();

}
});
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"

622
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Stop Music From URL" android:layout_centerHorizontal="true"
android:layout_below="@+id/button1" android:id="@+id/button2"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Start Music From URL" android:layout_centerHorizontal="true"
android:id="@+id/button1" android:layout_marginTop="157dp"
android:layout_alignParentTop="true"/>

</RelativeLayout>

Android manifest.xml

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

 Phone MODEL and Name

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


String DeviceModel, DeviceName;
TextView model, device;
Button getboth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

623
device = (TextView)findViewById(R.id.textView2);

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

getboth.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

DeviceModel= android.os.Build.MODEL;
DeviceName= android.os.Build.MANUFACTURER;

model.setText(DeviceModel);
device.setText(DeviceName);

}
});

}
}

activity_main.xml

<?xml version="1.0"?>

<RelativeLayout tools:context=".MainActivity"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:textAppearance="?android:attr/textAppearanceLarge" android:text="Device Model"
android:layout_marginTop="165dp" android:layout_centerHorizontal="true"
android:layout_alignParentTop="true" android:id="@+id/textView1"/>

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content"


android:textAppearance="?android:attr/textAppearanceLarge" android:text="Device Name"
android:layout_centerHorizontal="true" android:id="@+id/textView2"

624
android:layout_centerVertical="true"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content"


android:text="Click here to get android mobile phone model programmatically"
android:layout_marginTop="38dp" android:layout_centerHorizontal="true"
android:id="@+id/button1" android:layout_below="@+id/textView2"/>

</RelativeLayout>

 Set Volume (alarm, ringtone, notification)

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.widget.SeekBar;

public class MainActivity extends AppCompatActivity {

SeekBar alarm, mediaPlayer, ringer, notification ;


AudioManager audioManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

alarm = (SeekBar)findViewById(R.id.seekBar1);
mediaPlayer = (SeekBar)findViewById(R.id.seekBar2);
ringer = (SeekBar)findViewById(R.id.seekBar3);
notification = (SeekBar)findViewById(R.id.seekBar4);

audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

alarm.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM));

mediaPlayer.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));

ringer.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_RING));

625
notification.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION))
;

alarm.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

audioManager.setStreamVolume(AudioManager.STREAM_ALARM, i, 0);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
});

mediaPlayer.setOnSeekBarChangeListener(new
SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
});

626
ringer.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

audioManager.setStreamVolume(AudioManager.STREAM_RING, i, 0);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
});

notification.setOnSeekBarChangeListener(new
SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, i,
0);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
});
}
}

activity_main.xml

627
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="Set Alarm Volume"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginTop="10dp" />

<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/seekBar1"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:text="Set Media Player Volume"
android:textAppearance="?android:attr/textAppearanceLarge" />

<SeekBar
android:id="@+id/seekBar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"

628
android:layout_marginTop="10dp" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/seekBar2"
android:layout_centerHorizontal="true"
android:text="Set Ringer Volume"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginTop="10dp" />

<SeekBar
android:id="@+id/seekBar3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginTop="10dp" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/seekBar3"
android:layout_centerHorizontal="true"
android:text="Set Notification Volume"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginTop="10dp" />

<SeekBar
android:id="@+id/seekBar4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView4"
android:layout_marginTop="10dp" />

</RelativeLayout>

 Intent

629
MainActivity.java

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//set click listener to camera button


findViewById(R.id.btnCamera).setOnClickListener(new View.OnClickListener() {

//perform camera open action


@Override
public void onClick(View v) {

Intent i = new Intent();


i.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
startActivity(i);
}
});
final EditText et = (EditText) findViewById(R.id.etNo);
//set click listener to Gallery button
findViewById(R.id.btnGallery).setOnClickListener(new View.OnClickListener() {

//perform Gallery open action


@Override
public void onClick(View v) {

630
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse("content://media/external/images/media/"));
startActivity(i);
}
});

//set click listener to CallLog button


findViewById(R.id.btnCallLog).setOnClickListener(new View.OnClickListener() {

//perform CallLog open action


@Override
public void onClick(View v) {

Intent i = new Intent();


i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse("content://call_log/calls/"));
startActivity(i);
}

});

//set click listener to Browser button


findViewById(R.id.btnBrowser).setOnClickListener(new View.OnClickListener() {

//perform Browser open action


@Override
public void onClick(View v) {

Intent i = new Intent();


i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse("http://www.google.com/"));
startActivity(Intent.createChooser(i, "Title"));
}
});

//set click listener to Contact button


findViewById(R.id.btnContact).setOnClickListener(new View.OnClickListener() {

//perform Contact open action


@Override
public void onClick(View v) {

631
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse("content://contacts/people/"));
startActivity(i);
}
});

//set click listener to Call button


findViewById(R.id.btnCall).setOnClickListener(new View.OnClickListener() {

//perform Call open action


@Override
public void onClick(View v) {

// AndroidManifest.xml -> Permissions -> Add ->


// Uses Permission -> android.permission.CALL_PHONE -> Save
Intent i = new Intent();
i.setAction(Intent.ACTION_CALL);
i.setData(Uri.parse("tel:"+et.getText()));
startActivity(i);
}
});

//set click listener to Dial button


findViewById(R.id.btnDial).setOnClickListener(new View.OnClickListener() {

//perform Dial open action


@Override
public void onClick(View v) {

Intent i = new Intent();


i.setAction(Intent.ACTION_DIAL);
i.setData(Uri.parse("tel:"+et.getText()));
startActivity(i);

Intent I = new Intent(Intent.ACTION_DIAL, Uri


.parse("tel:" + et.getText()));
startActivity(i);

startActivity(new Intent(Intent.ACTION_DIAL, Uri


.parse("tel:" + et.getText())));

}
});

632
}
}

activity_main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/black"
android:orientation="vertical" >

<!-- EDIT TEXT with the hint of "Enter Phone No." -->
<EditText
android:id="@+id/etNo"
android:layout_width="match_parent"
android:layout_height="60dp"
android:hint="Enter phone no."
android:inputType="phone" />

<!-- BUTTON for the option Call -->


<Button
android:id="@+id/btnCall"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text="Call" />

<!-- BUTTON for the option Camera -->


<Button
android:id="@+id/btnCamera"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text="Camera" />

<!-- BUTTON for the option Contacts -->


<Button
android:id="@+id/btnContact"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text="Contact" />

<!-- BUTTON for the option Browser -->

633
<Button
android:id="@+id/btnBrowser"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text="Browser" />

<!-- BUTTON for the option Call log -->


<Button
android:id="@+id/btnCallLog"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text="Call Log" />

<!-- BUTTON for the option Gallery -->


<Button
android:id="@+id/btnGallery"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text="Gallery" />

<!-- BUTTON for the option Dialpad -->


<Button
android:id="@+id/btnDial"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text="Dialpad" />

</LinearLayout>

Android manifest.xml

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


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

 How to open pdf file from assets

MainActivity.java

634
import android.content.Intent;
import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.content.Context;
import android.util.Log;
;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CopyReadPDFFromAssets();

private void CopyReadPDFFromAssets() {


AssetManager assetManager = getAssets();

InputStream in = null;
OutputStream out = null;
File file = new File(getFilesDir(), "006JavaScript.pdf");
try {
in = assetManager.open("006JavaScript.pdf");
out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);

copyPdfFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch (Exception e) {
Log.e("exception", e.getMessage());
}

Intent intent = new Intent(Intent.ACTION_VIEW);


intent.setDataAndType(
Uri.parse("file://" + getFilesDir() + "/006JavaScript.pdf"),

635
"application/pdf");

startActivity(intent);
}

private void copyPdfFile(InputStream in, OutputStream out) throws IOException {


byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
}
}

Android manifest.xml

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

You have to create assests folder and place 006JavaScript.pdf in it

 Expandable list view

MainActivity.java

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.SimpleExpandableListAdapter;
import android.widget.Toast;

public class MainActivity extends ExpandableListActivity {

636
private ExpandableListAdapter mAdapter;
ExpandableListView expand;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();


List<List<Map<String, String>>> childData = new ArrayList<List<Map<String,
String>>>();

/* ******************** Start Group ********************* */


Map<String, String> curgroupMap1 = new HashMap<String, String>();
groupData.add(curgroupMap1);
curgroupMap1.put("parent", "Master 1");

List<Map<String,String>> children1 =new ArrayList<Map<String,String>>();


/* *** ChildData ***/
Map<String, String> curChildMap1 = new HashMap<String, String>();
children1.add(curChildMap1);
curChildMap1.put("child", "Bank");

/* *** ChildData ***/


Map<String, String> curChildMap2 = new HashMap<String, String>();
children1.add(curChildMap2);
curChildMap2.put("child", "Executive");

/* *** ChildData ***/


Map<String, String> curChildMap3 = new HashMap<String, String>();
children1.add(curChildMap3);
curChildMap3.put("child", "Customer");

/* ***ChildData ***/
Map<String, String> curChildMap4 = new HashMap<String, String>();
children1.add(curChildMap4);
curChildMap4.put("child", "State");

/* ***ChildData ***/
Map<String, String> curChildMap5 = new HashMap<String, String>();
children1.add(curChildMap5);
curChildMap5.put("child", "City");

childData.add(children1);

637
/* *************************End Group **************************/

/* ******************** Start Group ********************* */


Map<String, String> curgroupMap2 = new HashMap<String, String>();
groupData.add(curgroupMap2);
curgroupMap2.put("parent", "Master 2");
List<Map<String,String>> children2 =new ArrayList<Map<String,String>>();

/* *** ChildData ***/


Map<String, String> curChildMap6 = new HashMap<String, String>();
children2.add(curChildMap6);
curChildMap6.put("child", "Android");

/* *** ChildData ***/


Map<String, String> curChildMap7 = new HashMap<String, String>();
children2.add(curChildMap7);
curChildMap7.put("child", "iPhone");

/* *** ChildData ***/


Map<String, String> curChildMap8 = new HashMap<String, String>();
children2.add(curChildMap8);
curChildMap8.put("child", "Windows");

childData.add(children2);

/* *************************End Group **************************/

mAdapter = new SimpleExpandableListAdapter(


this,
groupData,
android.R.layout.simple_expandable_list_item_1,
new String[] { "parent" },
new int[] { android.R.id.text1, android.R.id.text2 },
childData,
android.R.layout.simple_expandable_list_item_2,
new String[] {"child"},
new int[] { android.R.id.text1 }
);
setListAdapter(mAdapter);

expand = getExpandableListView();

expand.setOnChildClickListener(new OnChildClickListener() {

638
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id)
{
// TODO Auto-generated method stub

switch (groupPosition)
{
case 0 :
switch(childPosition)
{
case 0 :
Toast.makeText(getBaseContext(), "Bank",
Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(getBaseContext(), "Executive",
Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(getBaseContext(), "Customer",
Toast.LENGTH_SHORT).show();
break;
case 3 :
Toast.makeText(getBaseContext(), "State",
Toast.LENGTH_SHORT).show();
break;
case 4 :
Toast.makeText(getBaseContext(), "City",
Toast.LENGTH_SHORT).show();
break;
}
break;
case 1:
switch(childPosition)
{
case 0 :
Toast.makeText(getBaseContext(), "Android",
Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(getBaseContext(), "iPhone",
Toast.LENGTH_SHORT).show();

639
break;
case 2:
Toast.makeText(getBaseContext(), "Windows",
Toast.LENGTH_SHORT).show();
break;
}
break;
}

return false;
}
});
}
}

activity_main.xml

<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" >

</RelativeLayout>

Java language is needed to create a dynamic and interactive user interface.

XML language is needed to design the user interface.

Android Manifest.xml file stores essential information about the android application
and provides essential information about your app to the Android system, information
the system must have before it can run any of the app's code.

 Send EMAIL

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.net.Uri;

640
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

Button Send;
EditText TO, CC, SUBJECT, MSG;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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


TO = (EditText) findViewById(R.id.editText1);
CC = (EditText) findViewById(R.id.editText2);
SUBJECT = (EditText) findViewById(R.id.editText3);
MSG = (EditText) findViewById(R.id.editText4);

Send.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {


// TODO Auto-generated method stub

String to = TO.getText().toString();
String cc = CC.getText().toString();
String subject = SUBJECT.getText().toString();
String msg = MSG.getText().toString();

sendEmail(to, cc, subject, msg);

TO.setText(null);
CC.setText(null);
SUBJECT.setText(null);
MSG.setText(null);
}
});
}

641
private void sendEmail(String emailAddresses, String carbonCopies,
String subject, String message)
{
Intent emailIntent = new Intent(Intent.ACTION_SEND);

emailIntent.setData(Uri.parse("mailto:"));
String to = emailAddresses;
String cc = carbonCopies;

emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
emailIntent.putExtra(Intent.EXTRA_CC, cc);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, message);
emailIntent.setType("message/rfc822");

startActivity(Intent.createChooser(emailIntent, "Email"));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}

activity_main.xml

<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" >

<EditText
android:id="@+id/editText1"
android:hint="To"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:ems="13"
android:inputType="textEmailAddress" >

642
<requestFocus />
</EditText>

<EditText
android:id="@+id/editText2"
android:hint="cc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:ems="13"
android:inputType="textEmailAddress" />

<EditText
android:id="@+id/editText3"
android:hint="Subject"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="150dp"
android:ems="13" />

<EditText
android:id="@+id/editText4"
android:hint="Message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="200dp"
android:ems="13"
android:inputType="textMultiLine" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="280dp"
android:text="Send E-Mail" />

643
</RelativeLayout>

Android manifest.xml

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

 Add Calender Event

MainActivity.java

import android.annotation.TargetApi;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import java.util.Calendar;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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


button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

//add event to calendar


addCalendarEvent();
}

});

644
}

public void addCalendarEvent(){

Calendar cal = Calendar.getInstance();


Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", cal.getTimeInMillis());
intent.putExtra("allDay", true);
intent.putExtra("rrule", "FREQ=YEARLY");
intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
intent.putExtra("title", "Test Event");
intent.putExtra("description", "This is a sample description");
startActivity(intent);
}
}

activity_main.xml

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Android Calender" />

<Button
android:id="@+id/btn1"
android:layout_below="@+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/event" />

645
</RelativeLayout>

Android manifest.xml

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


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

String.xml

<string name="event">Add Calender Event</string>

 Automatic image slider

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ViewFlipper
android:id="@+id/viewflipper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoStart="true"
android:flipInterval="2000" >

646
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/picture1" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/picture2" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/picture3" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/picture4" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/picture4" />
</ViewFlipper>

</RelativeLayout>

 AutoRunning of text view (Android)

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >

<TextView
android:layout_width="wrap_content"

647
android:layout_height="wrap_content"
android:text="Hello"
android:textStyle="bold|italic"
android:layout_gravity="center_horizontal" />

<TextView
android:id="@+id/shadowtext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="http://android-er.blogspot.com/"
android:textStyle="bold"
android:textSize="50sp"
android:textColor="#0000ff"

android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:scrollHorizontally="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever" />

</LinearLayout>

 Android loan calculator

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.text.DecimalFormat;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private EditText mLoanAmount, mInterestRate, mLoanPeriod;


private TextView mMontlyPaymentResult, mTotalPaymentsResult;

/** Initializes the app when it is first created. */


@Override

648
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLoanAmount = (EditText)findViewById(R.id.loan_amount);
mInterestRate = (EditText)findViewById(R.id.interest_rate);
mLoanPeriod = (EditText)findViewById(R.id.loan_period);
mMontlyPaymentResult = (TextView)findViewById(R.id.monthly_payment_result);
mTotalPaymentsResult = (TextView)findViewById(R.id.total_payments_result);
}

public void showLoanPayments(View clickedButton) {

double loanAmount = Integer.parseInt(mLoanAmount.getText().toString());


double interestRate = (Integer.parseInt(mInterestRate.getText().toString()));
double loanPeriod = Integer.parseInt(mLoanPeriod.getText().toString());
double r = interestRate/1200;
double r1 = Math.pow(r+1,loanPeriod);

double monthlyPayment = (double) ((r+(r/(r1-1))) * loanAmount);


double totalPayment = monthlyPayment * loanPeriod;

mMontlyPaymentResult.setText(new
DecimalFormat("##.##").format(monthlyPayment));
mTotalPaymentsResult.setText(new DecimalFormat("##.##").format(totalPayment));
}
}

activity_main.xml

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


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1"
android:shrinkColumns="1">
<TableRow>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loan_amount_prompt"
android:gravity="right"/>
<EditText android:id="@+id/loan_amount"
android:inputType="numberDecimal"
android:layout_height="wrap_content">
<requestFocus></requestFocus>

649
</EditText>
</TableRow>
<TableRow>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/interest_rate_prompt"
android:gravity="right"/>
<EditText android:id="@+id/interest_rate"
android:inputType="numberDecimal"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loan_period_prompt"
android:gravity="right"/>
<EditText android:id="@+id/loan_period"
android:inputType="number"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<Button android:text="@string/loan_button_text"
android:layout_span="2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showLoanPayments"/>
</TableRow>
<TableRow android:layout_marginTop="20dp">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/monthly_payment_prompt"
android:gravity="right"/>
<TextView android:id="@+id/monthly_payment_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff0000"
android:gravity="left"/>
</TableRow>
<TableRow>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/total_payments_prompt"
android:gravity="right"/>
<TextView android:id="@+id/total_payments_result"
android:layout_width="wrap_content"

650
android:layout_height="wrap_content"
android:textColor="#ff0000"
android:gravity="left"/>
</TableRow>
</TableLayout>

strings.xml

<resources>
<string name="hello_world">Hello world!</string>
<string name="menu_settings">Settings</string>
<string name="loan_amount_prompt">Loan amount:&#160;&#160;</string>
<string name="interest_rate_prompt">Interest rate:&#160;&#160;</string>
<string name="loan_period_prompt">Months:&#160;&#160;</string>
<string name="loan_button_text">Calculate Payments</string>
<string name="monthly_payment_prompt">Monthly payment:&#160;&#160;</string>
<string name="total_payments_prompt">Total payments:&#160;&#160;</string>

</resources>

 How to play music in list view in android

MainActivity.java

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

// variable declaration
private ListView mainList;
private MediaPlayer mp;
private final String[] listContent = { "chimes", "chord", "ding" };

private final int[] resID = { R.raw.chimes, R.raw.chord, R.raw.ding,

651
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initializing variables
mp = new MediaPlayer();
mainList = (ListView) findViewById(R.id.listView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listContent);
mainList.setAdapter(adapter);

mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
playSong(position);

}
});

public void playSong(int songIndex) {


// Play song
mp.reset();// stops any current playing song
mp = MediaPlayer.create(getApplicationContext(), resID[songIndex]);// create's
// new
// mediaplayer
// with
// song.

mp.start(); // starting mediaplayer

@Override
public void onDestroy() {
super.onDestroy();
mp.release();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

652
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

activity_main.xml

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.audio.MainActivity" >

<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" >
</ListView>

</RelativeLayout>

raw folder

653
chimes.mp3 chord.mp3 ding.mp3

 Change image when we click on buttons in Android

MainActivity.java

import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

//mess method is declared in XML file


//This function will call when we click on any button
//and we have to pass View object in this method
//which will take id of clicked button

public void mess(View v)


{
//initialize image view object
ImageView im=(ImageView)findViewById(R.id.imageView1);
//get clicked button id from view object
switch(v.getId())
{
case R.id.button1:
//if button1 is clicked than set image1
im.setImageResource(R.drawable.image1);
break;
case R.id.button2:
//if button2 is clicked than set image2
im.setImageResource(R.drawable.image2);
break;
}

654
}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#458"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="200dp"
android:layout_height="200dp"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="First Image "
android:onClick="mess"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Second Image"
android:onClick="mess"/>
</LinearLayout>

 Play music when we click on full screen image in Android

MainActivity.java

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

655
public class MainActivity extends Activity {
protected static final String TAG = "MainActivity";
/** Called when the activity is first created. */
Button meowBtn;
MediaPlayer mPlayer;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
meowBtn = (Button) findViewById(R.id.button1);
mPlayer = MediaPlayer.create(MainActivity.this, R.raw.chimes);
meowBtn.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {


try {
mPlayer.start();
} catch (Exception e) {
Log.e(TAG, "error: " + e.getMessage(), e);
}

});
}

protected void onDestroy() {


super.onDestroy();
// TODO Auto-generated method stub
if (mPlayer != null) {
mPlayer.release();
mPlayer = null;
}

}
}

activity_main.xml

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


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

656
android:orientation="vertical" >

<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/image1" />

</LinearLayout>

 Display of table in XML in Android

activity_main.xml

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


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tableLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="*"
android:stretchColumns="*" >

<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >

<TextView
android:id="@+id/textView11"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_span="6"
android:gravity="center"
android:text="Weather Report"
android:textSize="18dp"
android:textStyle="bold" >
</TextView>
</TableRow>

<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"

657
android:layout_height="wrap_content" >

<TextView
android:id="@+id/TextView21"
android:text="" >
</TextView>

<TextView
android:id="@+id/TextView22"
android:gravity="center"
android:text="M"
android:textStyle="bold"
android:typeface="serif" >
</TextView>

<TextView
android:id="@+id/TextView23"
android:gravity="center"
android:text="T"
android:textStyle="bold"
android:typeface="serif" >
</TextView>

<TextView
android:id="@+id/TextView24"
android:gravity="center"
android:text="W"
android:textStyle="bold"
android:typeface="serif" >
</TextView>

<TextView
android:id="@+id/TextView25"
android:gravity="center"
android:text="T"
android:textStyle="bold"
android:typeface="serif" >
</TextView>

<TextView
android:id="@+id/textView26"
android:gravity="center"
android:text="F"
android:textStyle="bold"
android:typeface="serif" >

658
</TextView>
</TableRow>

<TableRow
android:id="@+id/tableRow3"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView31"
android:text="Day High"
android:textStyle="bold" >
</TextView>

<TextView
android:id="@+id/textView32"
android:gravity="center_horizontal"
android:text="34°C" >
</TextView>

<TextView
android:id="@+id/textView33"
android:gravity="center_horizontal"
android:text="35°C" >
</TextView>

<TextView
android:id="@+id/textView34"
android:gravity="center_horizontal"
android:text="34°C" >
</TextView>

<TextView
android:id="@+id/textView35"
android:gravity="center_horizontal"
android:text="35°C" >
</TextView>

<TextView
android:id="@+id/textView36"
android:gravity="center_horizontal"
android:text="33°C" >
</TextView>
</TableRow>

659
<TableRow
android:id="@+id/tableRow4"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView41"
android:text="Day Low"
android:textStyle="bold" >
</TextView>

<TextView
android:id="@+id/textView42"
android:gravity="center_horizontal"
android:text="28°C" >
</TextView>

<TextView
android:id="@+id/textView43"
android:gravity="center_horizontal"
android:text="27°C" >
</TextView>

<TextView
android:id="@+id/textView44"
android:gravity="center_horizontal"
android:text="29°C" >
</TextView>

<TextView
android:id="@+id/textView45"
android:gravity="center_horizontal"
android:text="26°C" >
</TextView>

<TextView
android:id="@+id/textView46"
android:gravity="center_horizontal"
android:text="29°C" >
</TextView>
</TableRow>

<TableRow
android:id="@+id/tableRow5"
android:layout_width="match_parent"

660
android:layout_height="wrap_content"
android:gravity="center" >

<TextView
android:id="@+id/textView8"
android:text="Conditions"
android:textStyle="bold" >
</TextView>

<ImageView
android:id="@+id/imageView1"
android:src="@drawable/monday" >
</ImageView>

<ImageView
android:id="@+id/imageView2"
android:src="@drawable/tuesday" >
</ImageView>

<ImageView
android:id="@+id/imageView3"
android:src="@drawable/wednesday" >
</ImageView>

<ImageView
android:id="@+id/imageView4"
android:src="@drawable/thursday" >
</ImageView>

<ImageView
android:id="@+id/imageView5"
android:src="@drawable/friday" >
</ImageView>
</TableRow>

</TableLayout>

 BMI Calculator in Android

MainActivity.java

import android.os.Bundle;

661
import android.app.Activity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final EditText e1 = (EditText) findViewById(R.id.et1);


final EditText e2 = (EditText) findViewById(R.id.et2);
final TextView tv4 = (TextView) findViewById(R.id.tv4);

findViewById(R.id.ib1).setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

String str1 = e1.getText().toString();


String str2 = e2.getText().toString();

if (TextUtils.isEmpty(str1)) {
e1.setError("Please enter your weight");
e1.requestFocus();
return;
}

if (TextUtils.isEmpty(str2)) {
e2.setError("Please enter your height");
e2.requestFocus();
return;
}

float weight = Float.parseFloat(str1);


float height = Float.parseFloat(str2) / 100;

float bmiValue = calculateBMI(weight, height);

String bmiInterpretation = interpretBMI(bmiValue);

662
tv4.setText(String.valueOf(bmiValue + "-" + bmiInterpretation));

}
});

private float calculateBMI (float weight, float height) {

return (float) (weight / (height * height));


}

// interpret what BMI means


private String interpretBMI(float bmiValue) {

if (bmiValue < 16) {


return "Severely underweight";
} else if (bmiValue < 18.5) {

return "Underweight";
} else if (bmiValue < 25) {

return "Normal";
} else if (bmiValue < 30) {

return "Overweight";
} else {
return "Obese";
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/green_back"
android:fadingEdge="horizontal"

663
android:orientation="vertical" >

<TextView
android:id="@+id/tv1"
android:layout_width="124dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingLeft="15dp"
android:paddingTop="40dp"
android:shadowColor="@android:color/black"
android:shadowDx="4"
android:shadowDy="4"
android:text="BMI"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/white"
android:textSize="50sp"
android:typeface="serif" />

<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Calculator"
android:textColor="@android:color/white"
android:textSize="20dp"
android:textStyle="bold" />

<TextView
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingTop="30dp"
android:text="WEIGHT (KG)"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@android:color/white"
android:textStyle="bold|italic"
android:typeface="serif" />

<EditText
android:id="@+id/et1"
android:layout_width="96dp"
android:layout_height="wrap_content"

664
android:layout_gravity="center"
android:hint="IN KGs"
android:ems="10"
android:fadingEdgeLength="10dp"
android:inputType="numberDecimal"
android:textAlignment="center" >

<requestFocus />
</EditText>

<TextView
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingTop="30dp"
android:text="HEIGHT (CM)"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@android:color/white"
android:textStyle="bold|italic"
android:typeface="serif" />

<EditText
android:id="@+id/et2"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:hint="IN CMs"
android:ems="10"
android:inputType="numberDecimal"
>
</EditText>

<Button
android:id="@+id/ib1"
android:layout_width="158dp"
android:layout_height="51dp"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:fadingEdge="vertical"
android:longClickable="true"
android:nextFocusRight="@color/colorPrimary"
android:text="Calculate"
android:visibility="visible" />

665
<TextView
android:id="@+id/tv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingTop="20dp"
android:text=""
android:textSize="20dp"
android:textStyle="bold"
android:textColor="@color/colorPrimary"/>

</LinearLayout>

colors.xml

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


<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>

 Check SD Card is present or not in android

MainActivity.java

import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.support.v4.app.ActivityCompat;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

Button button ;

666
TextView textView;
Boolean SDcard ;
public static final int RequestPermissionCode = 1 ;
int RequestCheckResult ;
boolean RequestTF ;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

PermissionStatus();

if(RequestTF){

SDCardCheck();
}
else {

EnableRuntimePermission();
}

}
});
}

public void SDCardCheck(){

SDcard =
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_M
OUNTED);

if(SDcard)
{
textView.setText("SD CARD IS AVAILABLE");
}
else
{

667
textView.setText("SD CARD NOT AVAILABLE");
}
}

public void PermissionStatus(){

RequestCheckResult =
ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE);

if (RequestCheckResult == PackageManager.PERMISSION_GRANTED){

RequestTF = true;

} else {

RequestTF = false;

public void EnableRuntimePermission(){

if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE))
{

Toast.makeText(MainActivity.this,"WRITE_EXTERNAL_STORAGE permission allows


us to Access SD CARD app", Toast.LENGTH_LONG).show();

} else {

ActivityCompat.requestPermissions(MainActivity.this,new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE},
RequestPermissionCode);

}
}

@Override
public void onRequestPermissionsResult(int RC, String per[], int[] PResult) {

switch (RC) {

668
case RequestPermissionCode:

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


PackageManager.PERMISSION_GRANTED) {

Toast.makeText(MainActivity.this,"Permission Granted, Now your


application can access WRITE_EXTERNAL_STORAGE.", Toast.LENGTH_LONG).show();

} else {

Toast.makeText(MainActivity.this,"Permission Canceled, Now your


application cannot access WRITE_EXTERNAL_STORAGE.", Toast.LENGTH_LONG).show();

}
break;
}
}

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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click here to detect whether the sd card is available or not"
android:id="@+id/button"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="SD CARD STATUS"
android:id="@+id/textView"
android:layout_above="@+id/button"

669
android:layout_centerHorizontal="true"
android:layout_marginBottom="38dp"
android:gravity="center"/>

</RelativeLayout>

Permission that should be added to Manifest.xml

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

 Get current device language (Detect) in android

MainActivity.java

import java.util.Locale;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

String Language;
Button GetLanguageButton;
TextView DisplayLanguageTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

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

GetLanguageButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

Language = Locale.getDefault().getDisplayLanguage().toString();

670
DisplayLanguageTextView.setText(Language);

}
});

}
}

activity_main.xml

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:text="Click here to Get current device language in android
programmatically" />

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="168dp"
android:text="Default Text"
android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

671
 Detect battery is charging, not charging, discharge and full and show on screen on button
click in android

MainActivity.java

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

TextView textview;
Button button;
IntentFilter intentfilter;
int deviceStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button)findViewById(R.id.button1);
textview = (TextView)findViewById(R.id.textView1);

intentfilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

MainActivity.this.registerReceiver(broadcastreceiver,intentfilter);

}
});

672
}

private BroadcastReceiver broadcastreceiver = new BroadcastReceiver() {


@Override
public void onReceive(Context context, Intent intent) {

deviceStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS,-1);

if(deviceStatus == BatteryManager.BATTERY_STATUS_CHARGING){

textview.setText("Battery Status = Charging ");

if(deviceStatus == BatteryManager.BATTERY_STATUS_DISCHARGING){

textview.setText("Battery Status = Discharging ");

if (deviceStatus == BatteryManager.BATTERY_STATUS_FULL){

textview.setText("Battery Status = Battery Full ");

if(deviceStatus == BatteryManager.BATTERY_STATUS_UNKNOWN){

textview.setText("Battery Status = Unknown ");


}

if (deviceStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING){

textview.setText("Battery Status = Not Charging ");

}
};
}

activity_main.xml

673
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Status"
android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="Click here to Get battery status in android programmatically" />

</RelativeLayout>

 Battery Health in android

MainActivity.java

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;

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

public class MainActivity extends Activity {

TextView textview;
Button button;
Context context;
IntentFilter intentfilter;
int status;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textview = (TextView)findViewById(R.id.textView1);
button = (Button)findViewById(R.id.button1);

intentfilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

MainActivity.this.registerReceiver(broadcastreceiver,intentfilter);

}
});
}

BroadcastReceiver broadcastreceiver = new BroadcastReceiver() {


@Override
public void onReceive(Context context, Intent intent) {

status = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,0);

if(status == BatteryManager.BATTERY_HEALTH_COLD){

textview.setText("Battery health = Cold");

}
if (status == BatteryManager.BATTERY_HEALTH_DEAD){

675
textview.setText("Battery health = Dead");

}
if (status == BatteryManager.BATTERY_HEALTH_GOOD){

textview.setText("Battery health = Good");

}
if (status == BatteryManager.BATTERY_HEALTH_OVERHEAT){

textview.setText("Battery health = Over Heat");

}
if (status == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE){

textview.setText("Battery health = Over Voltage");

}
if(status == BatteryManager.BATTERY_HEALTH_UNKNOWN){

textview.setText("Battery health = Unknown");

}
if(status == BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE){

textview.setText("Battery health = Unspecified failure");

}
}
};

activity_main.xml

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"

676
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="184dp"
android:text="Battery health"
android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="17dp"
android:text="Click here to Check/Get battery health in android
programmatically" />

</RelativeLayout>

 Get screen dimensions in pixels in android

MainActivity.java

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.TextView;

public class MainActivity extends Activity {

TextView one,two;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

677
one = (TextView)findViewById(R.id.textView2);
two = (TextView)findViewById(R.id.textView4);

DisplayMetrics displayMetrics = new DisplayMetrics();


WindowManager windowmanager = (WindowManager)
getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
int deviceWidth = displayMetrics.widthPixels;
int deviceHeight = displayMetrics.heightPixels;

one.setText(String.valueOf(deviceWidth));
two.setText(String.valueOf(deviceHeight));

}
}

activity_main.xml

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"

678
android:layout_centerHorizontal="true"
android:layout_marginTop="176dp"
android:text="Width in Pixels"
android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/textView1"
android:layout_below="@+id/textView2"
android:layout_marginTop="24dp"
android:text="Height in Pixels"
android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/textView3"
android:layout_marginTop="16dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

 Print © android .com in android

activity_main.xml

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="\u00A9 2016 android.blogspot.in"

android:textSize="25dp" />

679
 How to parse xml file in Assert folder in Android using Dom Parser

MainActivity.java

import android.os.Bundle;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.app.Activity;
import android.widget.TextView;

public class MainActivity extends Activity {


TextView textView;
InputStream inputStream;
DocumentBuilderFactory dbFactory;
DocumentBuilder docBuilder;
Document doc;
Element element;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView1);
try {
inputStream = getAssets().open("employeesdetails.xml");

dbFactory = DocumentBuilderFactory.newInstance();
docBuilder = dbFactory.newDocumentBuilder();
doc = docBuilder.parse(inputStream);

element = doc.getDocumentElement();
element.normalize();

NodeList nList = doc.getElementsByTagName("employee");


for (int i = 0; i < nList.getLength(); i++) {

Node node = nList.item(i);


if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element2 = (Element) node;
textView.setText(textView.getText() + "\nEmployee Id : "
+ getValuefromTagName("employee_id", element2) + "\n");
textView.setText(textView.getText() + "Employee Name : "
+ getValuefromTagName("employee_name", element2) + "\n");
textView.setText(textView.getText() + "Employee Salary: "
+ getValuefromTagName("employee_salary", element2) +
"\n");
textView.setText(textView.getText()
+ "===========================");
}
}

680
} catch (Exception e) {
e.printStackTrace();
}

private static String getValuefromTagName(String tag, Element element) {


NodeList nodeList = element.getElementsByTagName(tag).item(0)
.getChildNodes();
Node node = (Node) nodeList.item(0);
return node.getNodeValue();
}

activity_main.xml

<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:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="86dp"
android:layout_marginTop="77dp"
android:text="TextView" />

</RelativeLayout>

New → folder → assets folder

employeesdetails.xml (assets folder)

<?xml version="1.0"?>
<employee_list>
<employee>
<employee_id>1001</employee_id>
<employee_name>Android </employee_name>
<employee_salary>50000</employee_salary>
</employee>
<employee>
<employee_id>1002</employee_id>
<employee_name>Surya </employee_name>
<employee_salary>60000</employee_salary>
</employee>
<employee>
<employee_id>1003</employee_id>
<employee_name>Narayana </employee_name>
<employee_salary>40000</employee_salary>
</employee>

681
</employee_list>

 StrikeTextView in Android

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.StrikethroughSpan;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

SpannableString Strickstr = new SpannableString("Albert Einstein");


Strickstr.setSpan(new StrikethroughSpan(), 0, Strickstr.length(),
Spanned.SPAN_PARAGRAPH);
TextView StrickstrTv = (TextView) findViewById(R.id.striketxt);
StrickstrTv.setText(Strickstr);

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

activity_main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/striketxt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"

682
android:text=""
android:textSize="25px" />

</LinearLayout>

 Underline TextView in Android

MainActivity.java

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.text.SpannableString;

import android.text.Spanned;

import android.text.style.UnderlineSpan;

import android.view.Menu;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

SpannableString str = new SpannableString("Steve Jobs");

str.setSpan(new UnderlineSpan(), 0, str.length(),

Spanned.SPAN_PARAGRAPH);

TextView txtView = (TextView) findViewById(R.id.underlinetxt);

txtView.setText(str);

@Override

public boolean onCreateOptionsMenu(Menu menu) {

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

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

return true;

activity_main.xml

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/underlinetxt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
android:textSize="25px" />

</LinearLayout>

 Slideshow with next and prev buttons in Android

MainActivity.java

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

ViewFlipper viewFlipper;

Button next;

Button previous;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

684
viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper);

next = (Button) findViewById(R.id.next);

previous = (Button) findViewById(R.id.previous);

next.setOnClickListener(this);

previous.setOnClickListener(this);

@Override

public void onClick(View v) {

if (v == next) {

viewFlipper.showNext();

else if (v == previous) {

viewFlipper.showPrevious();

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">
<ViewFlipper
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/viewFlipper">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView"

685
android:src="@drawable/picture1"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView2"
android:src="@drawable/picture2"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView3"
android:src="@drawable/picture3"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView4"
android:src="@drawable/picture4"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView5"
android:src="@drawable/picture5"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView6"
android:src="@drawable/picture1"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView7"
android:src="@drawable/picture2"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView8"
android:src="@drawable/picture3"/>
<ImageView
android:layout_width="fill_parent"

686
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView9"
android:src="@drawable/picture4"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView10"
android:src="@drawable/picture4"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView11"
android:src="@drawable/picture5"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:id="@+id/imageView12"
android:src="@drawable/picture1"/>
</ViewFlipper>
<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
<Button
android:id="@+id/previous"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Prev"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_alignTop="@+id/next"/>
</RelativeLayout>

687
Kotlin versus Java

Kotlin Java

Compilation time Slow Pretty fast

Null safety Yes No

Development speed Fast Faster than Kotlin

Lambda expression Yes No

Community support Limited Very large

Exceptions → indicate a problem in your code during its execution.

 ArithmeticException → which is thrown when you divide a number by zero.

 ArrayIndexOutOfBoundExceptions → which is thrown when an array has been accessed

with an illegal index.

 SecurityException → which is thrown by the security manager to indicate a security

violation.

 NullPointerException → which is thrown when you invoke a method or property on a null

object.

688
Unit Description

dp Density Independent Pixel 1dp is equivalent to one pixel on a 160dpi screen.

sp Scale Independent Pixel. This is very similar to dp but just that this is recommended for specifying font

sizes.

pt Point. A point is defined to be 1/72 of an inch.

px Pixel. Corresponds to actual pixels on the screen

Method Description
onStartCommand()  This method is called when any other component, like say an activity,
requests the service to be started, by calling startService().
 It is your responsibility to stop the service when the corresponding
work is done by using stopSelf() or stopService() methods.

onBind()  Calls this method when another component wants to bind with the
service by calling bindService().
 To implement this, you must provide an interface that clients use in
order to communicate with the service. It returns an IBinder object.
If you don’t want to allow binding, then return null.

onUnbind() The system calls this method when all clients are disconnected from a
particular interface published by the service.
onRebind() Calls this method when new clients are connected to the service after it had
previously been notified that all are disconnected in onUnbind(Intent).
onCreate() The system calls this method when the service is created first using
onStartCommand() or onBind(). It is required to perform a one-time set-
up.
onDestroy() This method is called when the service is no longer used and is being
destroyed. Your service should implement this in order to clean up any
resources such as threads, registered listeners, receivers, etc.

689
Android versus iOS

Android iOS
Development Complexity High Low
Cost Costs more due to higher Costs less
testing period
Programming language Java and Kotlin Require Objective C or Swift for
Native development
Security Not very secure Highly secured
Speed Faster mean download Much faster than Android

Android Name Version Year of Release

Android 1.5 Android Cupcake 2009

1.6 Donut 2009

2.0-2.1 Eclair 2009

2.2 – 2.2.3 Froyo 2010

2.3 – 2.3.7 Gingerbread 2010

3.0 – 3.2.6 Honeycomb 2011

4.0 – 4.0.4 Ice Cream Sandwich 2011

4.1 – 4.3.1 Jelly Bean 2012

4.4 – 4.4.4 KitKat 2013

5.0 – 5.1.1 Lollipop 2014

6.0 – 6.0.1 Marshmallow 2015

7.0 – 7.1.2 Nougat 2016

8.0 – 8.1 Oreo 2017

9.0 Pie 2018

690
Linus Benedict Torvalds is a Finnish-American software engineer who is the creator and,
historically, the main developer of the Linux kernel, used by Linux distributions and other
operating systems such as Android and Chrome OS.

Source of information:

 https://www.wikipedia.org/
 https://www.google.com/

691

You might also like