Skip to main content
AAnnddrrooiidd AApppplliiccaattiioonn 
DDeevveellooppmmeenntt TTuuttoorriiaall
Background 
Introduction to Android 
Overview of Sensors 
Programming Tutorial 1: Tracking location with 
GPS and Google Maps 
Overview of Networking 
Programming Tutorial 2: Downloading from the 
Internet 
Programming Tutorial 3: Sending/Receiving SMS 
Messages 
Questions/Comments 
Resources 
TTooppiiccss
Introduction to Android 
A brief guide to the Android Application Development Environment
Software platform from Google and the 
Open Handset Alliance 
July 2005, Google acquired Android, Inc. 
November 2007, Open Handset Alliance 
formed to develop open standards for 
mobile devices 
October 2008, Android available as open 
source 
December 2008, 14 new members joined 
Android project 
BBaacckkggrroouunndd
April 30, 2009: Official 1.5 Cupcake 
release 
September 15, 2009: 1.6 SDK Donut 
release 
October 26, 2009: 2.0 SDK Éclair release 
◦ Updates to the Éclair release: 
 2.0.1 on December 3, 2009 
 2.1 on January 12, 2010 
UUppddaattee HHiissttoorryy
PPllaattffoorrmm VVeerrssiioonnss
Built-in Apps ≡ Apps created in SDK 
Leverage Linux kernel to interface with 
hardware 
Open source platform promotes 
development from global community 
AAnnddrrooiidd aanndd tthhee HHaarrddwwaarree
Reuse and replacement of components 
Dalvik virtual machine 
Integrated browser 
Optimized graphics 
SQLite 
Media support 
GSM Telephony 
Bluetooth, EDGE, 3G, and WiFi 
Camera, GPS, compass, and accelerometer 
Rich development environment 
AAnnddrrooiidd FFeeaattuurreess
AAnnddrrooiidd AArrcchhiitteeccttuurree
Apps are written in Java 
Bundled by Android Asset Packaging Tool 
Every App runs its own Linux process 
Each process has it’s own Java Virtual 
Machine 
Each App is assigned a unique Linux user 
ID 
Apps can share the same user ID to see 
each other’s files 
AApppplliiccaattiioonn FFuunnddaammeennttaallss
 Activity 
◦ Present a visual user interface for one focused endeavor the user can 
undertake 
◦ Example: a list of menu items users can choose from 
 Services 
◦ Run in the background for an indefinite period of time 
◦ Example: calculate and provide the result to activities that need it 
 Broadcast Receivers 
◦ Receive and react to broadcast announcements 
◦ Example: announcements that the time zone has changed 
 Content Providers 
◦ Store and retrieve data and make it accessible to all applications 
◦ Example: Android ships with a number of content providers for common 
data types (e.g., audio, video, images, personal contact information, etc.) 
 Intents 
◦ Hold the content of a message 
◦ Example: convey a request for an activity to present an image to the user 
or let the user edit some text 
AApppplliiccaattiioonn CCoommppoonneennttss
http://developer.android.com/sdk/installing.html 
Preparing your system and system 
requirements 
Downloading and Installing the SDK 
Installing ADT plug-in for Eclipse 
Adding Platforms and Components 
Exploring the SDK 
Completing tutorials 
Troubleshooting 
IInnssttaallllaattiioonn
Overview of Sensors 
The Android Sensor Platform and how to use it
Developer’s are able to access “goodies” 
Hardware capabilities made available 
OOppeenn SSoouurrccee PPllaattffoorrmm
Feature Description 
Camera A class that enables your application to interact with the camera to snap a photo, acquire images 
for a preview screen, and modify parameters used to govern how the camera operates. 
Sensor Class representing a sensor. Use getSensorList(int) to get the list of available Sensors. 
SensorManager A class that permits access to the sensors available within the Android platform. 
SensorEventListener 
An interface used for receiving notifications from the SensorManager when sensor values have 
changed. An application implements this interface to monitor one or more sensors available in the 
hardware. 
SensorEvent This class represents a sensor event and holds information such as the sensor type (e.g., 
accelerometer, orientation, etc.), the time-stamp, accuracy and of course the sensor's data. 
MediaRecorder 
A class, used to record media samples, that can be useful for recording audio activity within a 
specific location (such as a baby nursery). Audio clippings can also be analyzed for identification 
purposes in an access-control or security application. For example, it could be helpful to open the 
door to your time-share with your voice, rather than having to meet with the realtor to get a key. 
GeomagneticField This class is used to estimated estimate magnetic field at a given point on Earth, and in particular, 
to compute the magnetic declination from true north. 
FaceDetector 
A class that permits basic recognition of a person's face as contained in a bitmap. Using this as a 
device lock means no more passwords to remember — biometrics capability on a cell phone. 
HHaarrddwwaarree--oorriieenntteedd FFeeaattuurreess
Sensor type (Sensor class) 
◦ Orientation, accelerometer, light, magnetic field, 
proximity, temperature, etc. 
Sampling rate 
◦ Fastest, game, normal, user interface. 
◦ When an application requests a specific sampling 
rate, it is really only a hint, or suggestion, to the 
sensor subsystem. There is no guarantee of a 
particular rate being available. 
Accuracy 
◦ High, low, medium, unreliable. 
SSeennssoorr aanndd SSeennssoorrMMaannaaggeerr
Programming Tutorial 
Simulating an Android application that accesses positioning sensors
Must have Eclipse IDE installed 
Must have Android SDK installed 
Must have knowledge of Java 
Must have the external Google Maps 
library installed in your SDK environment. 
The Maps library is included with the 
Google APIs add-on, which you can install 
using the Android SDK and AVD Manager. 
PPrreeppaarriinngg ffoorr tthhee TTuuttoorriiaall
 A Google Maps API key is required to integrate Google Maps into your Android 
application. 
 To apply for a key: 
1. Locate the SDK debug certificate in the default folder of "C:Documents and 
Settings<username>Local SettingsApplication DataAndroid". The filename of the 
debug keystore is debug.keystore. 
2. Copy the debug.keystore file to a folder named C:Android. 
3. Open the command window and navigate to C:Program 
FilesJava<JDK_version_number>bin to locate the Keytool.exe. 
4. Execute the following to extract the MD5 fingerprint: 
keytool.exe -list -alias androiddebugkey -keystore "C:Androiddebug.keystore" -storepass 
android -keypass android 
1. Copy the MD5 certificate fingerprint and navigate your web browser to: 
http://code.google.com/android/maps-api-signup.html. 
2. Follow the instructions on the page to complete the application and obtain the 
Google Maps key. 
For more information on using Google Maps in Android application development: 
http://mobiforge.com/developing/story/using-google-maps-android 
GGeett aa GGooooggllee MMaappss AAPPII KKeeyy
Defines the system image and device 
settings used by the Emulator 
To create an AVD in Eclipse: 
1. Select Window > Android SDK and AVD Manager. 
The Android SDK and AVD Manager displays. 
1. Make sure the entry for Virtual Devices is selected 
and click New. 
The Create new AVD window displays. 
1. Enter a Name for the AVD. 
2. Select Google APIs (API level 3) as the Target. 
3. Click Create AVD. 
4. Close the Android SDK and AVD Manager. 
Create an Android VViirrttuuaall DDeevviiccee ((AAVVDD))
To create the project in Eclipse: 
1. Select File > New > Project. 
2. Select Android Project in the Android folder and 
click Next. 
3. Enter GPSSimulator as the Project Name. 
4. Select Google APIs (Platform 1.5) as the Build 
Target. 
5. Enter GPSSimulator as the Application name. 
6. Enter com.android.gpssimulator as the Package 
name. 
7. Enter GPSSimulator as the Activity name. 
8. Click Finish. 
CCrreeaattee tthhee AAnnddrrooiidd PPrroojjeecctt
TThhee NNeeww AAnnddrrooiidd PPrroojjeecctt
Add permissions for GPS 
To modify the AndroidManifest.xml file: 
1. Click on the res folder in the GPSSimulator 
project. 
2. Double-click AndroidManifest.xml to display the 
GPSSimulator Manifest. 
3. Enter the following lines before the application 
tag. 
<uses-permission 
android:name=“android.permission.ACCESS_FINE_LOCATION” /> 
1. Save the changes to the file. 
xm Modify the AndroidManifest.xmll FFiillee
public class GPSSimulator extends Activity 
{ 
private LocationManager lm; 
private LocationListener locationListener; 
// Called when the activity is first created. 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
// use the LocationManager class to obtain GPS locations 
lm = (LocationManager) 
getSystemService(Context.LOCATION_SERVICE); 
locationListener = new MyLocationListener(); 
lm.requestLocationUpdates( 
LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
} 
} 
AAdddd LLooccaattiioonnMMaannaaggeerr ttoo ggeett 
UUppddaatteess
private class MyLocationListener implements LocationListener { 
@Override 
public void onLocationChanged(Location loc) { 
if (loc != null) { 
Toast.makeText(getBaseContext(), 
"Location changed : Lat: " + loc.getLatitude() + 
" Lng: " + loc.getLongitude(), 
Toast.LENGTH_SHORT).show(); 
} 
} 
@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 
} 
} 
AAdddd MMyyLLooccaattiioonnLLiisstteenneerr
To test in Eclipse: 
1. Switch to DDMS view. 
2. Find the Location Controls in the Emulator 
Control tab. 
3. Click the GPX tab and click Load GPX. 
4. Locate and select the GPX file. 
5. Click Play to begin sending coordinates to the 
Emulator. 
TTeesstt tthhee GGPPSSSSiimmuullaattoorr
Update the Manifest with two lines. 
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.android.GPSSimulator"> 
<uses-permission 
android:name="android.permission.INTERNET" /> 
<uses-permission 
android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<application android:icon="@drawable/icon" 
android:label="@string/app_name"> 
<uses-library android:name="com.google.android.maps" /> 
<activity android:name=".GPS" android:label="@string/app_name"> 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
</activity> 
</application> 
</manifest> 
AAdddd aabbiilliittyy ttoo uussee GGooooggllee MMaappss
<?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" 
> 
<com.google.android.maps.MapView 
android:id="@+id/mapview1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:enabled="true" 
android:clickable="true" 
android:apiKey=“Your API Key Here" /> 
</LinearLayout> 
AAdddd MMaappVViieeww ttoo mmaaiinn..xxmmll
public class GPSSimulator extends MapActivity { 
private LocationManager lm; 
private LocationListener locationListener; 
private MapView mapView; 
private MapController mc; 
// Called when the activity is first created. 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
// use the LocationManager class to obtain GPS locations 
lm = (LocationManager) 
getSystemService(Context.LOCATION_SERVICE); 
locationListener = new MyLocationListener(); 
lm.requestLocationUpdates( 
LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
mapView = (MapView) findViewById(R.id.mapview1); 
mc = mapView.getController(); 
} 
@Override 
protected boolean isRouteDisplayed() { 
return false; 
} 
private class MyLocationListener implements LocationListener { 
@Override 
public void onLocationChanged(Location loc) { 
if (loc != null) { 
Toast.makeText(getBaseContext(), 
"Location changed : Lat: " + loc.getLatitude() + 
" Lng: " + loc.getLongitude(), 
Toast.LENGTH_SHORT).show(); 
GeoPoint p = new GeoPoint( 
(int) (loc.getLatitude() * 1E6), 
(int) (loc.getLongitude() * 1E6)); 
mc.animateTo(p); 
mc.setZoom(16); 
mapView.invalidate(); 
} 
} 
@Override 
public void onProviderDisabled(String provider) { 
} 
@Override 
public void onProviderEnabled(String provider) { 
} 
@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
} 
} 
} 
MMooddiiffyy GGPPSSSSiimmuullaattoorr ttoo uussee 
GGooooggllee MMaappss
VViieeww tthhee LLooccaattiioonn oonn tthhee MMaapp
 The Internet, is based on a 
layered architecture called 
the TCP/IP stack. 
 Link Layer 
◦ Protocols: ARP and RARP 
 Internet Layer 
◦ Protocols: IP, ping, etc. 
 Transport 
◦ Protocols: TCP and UDP 
 Application Layer 
◦ Protocols: HTTP, FTP, DNS, etc. 
IInntteerrnneett LLaayyeerrss
A server machine is identified on the Internet by 
some IP address 
Daemons are the processes running in the 
background which are listening all the time for 
connection requests from clients on a particular 
port number. 
Once a connection request comes into the server 
on a given port, the corresponding daemon can 
choose to accept it, and if so, a connection is 
established. 
Then the application layer protocol is typically used 
for the client to get or send data to the server. 
Client-Server Communication
Programming Tutorial 2 
Accessing a website from the Android Emulator
Required Packages
LLaayyoouutt
View object may have an integer ID associated 
with it 
android:id="@+id/my_button“ 
To get the reference of the view object in activity 
Button myButton = 
(Button)findViewById(R.id.my_button); 
LLiinnkk AAccttiivviittyy aanndd VViieeww
View.OnClickListener() 
◦ Interface definition for a callback to be invoked 
when a view is clicked. 
onClick(View v) 
◦ Called when a view has been clicked. Inside 
this function you can specify what actions to 
perform on a click. 
AAddddiinngg EEvveenntt ttoo VViieeww OObbjjeecctt
SSttrriinnggss..xxmmll
AAnnddrrooiiddMMaanniiffeesstt..xxmmll
If you are using the emulator then there are 
limitations. Each instance of the emulator 
runs behind a virtual router/firewall service 
that isolates it from your development 
machine's network interfaces and settings 
and from the internet. 
Communication with the emulated device 
may be blocked by a firewall program running 
on your machine. 
Reference 
NNeettwwoorrkk SSeettttiinnggss
BBeehhiinndd PPrrooxxyy SSeerrvveerr
BBeehhiinndd PPrrooxxyy SSeerrvveerr
BBeehhiinndd PPrrooxxyy SSeerrvveerr
BBeehhiinndd PPrrooxxyy SSeerrvveerr
BBeehhiinndd PPrrooxxyy SSeerrvveerr
BBeehhiinndd PPrrooxxyy SSeerrvveerr
Step1 Add permissions to AndroidManifest.xml 
<uses-permission android:name="android.permission.INTERNET" /> 
Step 2 Import files 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLConnection; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
AApppp ttoo DDoowwnnllooaadd jjppgg ffiillee
Step 3 Writing OpenHttpConnection() 
◦ To open a connection to a HTTP server using OpenHttpConnection() 
◦ We first create an instance of the URL class and initialize it with the URL 
of the server 
◦ When the connection is established, you pass this connection to an 
URLConnection object. To check if the connection established is using a 
HTTP protocol. 
◦ The URLConnection object is then cast into an HttpURLConnection 
object and you set the various properties of the HTTP connection. 
◦ Next, you connect to the HTTP server and get a response from the 
server. If the response code is HTTP_OK, you then get the InputStream 
object from the connection so that you can begin to read incoming data 
from the server 
◦ The function then returns the InputStream object obtained. 
AApppp ttoo DDoowwnnllooaadd jjppgg ffiillee
public class HttpDownload extends Activity { 
/** Called when the activity is first 
created.*/ 
@Override 
public void onCreate(Bundle 
savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
} 
private InputStream OpenHttpConnection(String 
urlString) throws IOException { 
InputStream in = null; 
int response = -1; 
URL url = new URL(urlString); 
URLConnection conn = url.openConnection(); 
if (!(conn instanceof HttpURLConnection)) 
throw new IOException("Not an HTTP 
connection"); 
try{ 
HttpURLConnection httpConn = 
(HttpURLConnection) conn; 
httpConn.setAllowUserInteraction(false); 
httpConn.setInstanceFollowRedirects(true); 
httpConn.setRequestMethod("GET"); 
httpConn.connect(); 
response = httpConn.getResponseCode(); 
if (response == 
HttpURLConnection.HTTP_OK) { 
in = httpConn.getInputStream(); 
} 
} catch (Exception ex) { 
throw new IOException("Error 
connecting"); 
} 
return in; 
} 
} 
AApppp ttoo DDoowwnnllooaadd jjppgg ffiillee
 Step 4 Modify the Main.xml code 
<?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" 
> 
<ImageView 
android:id="@+id/img" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
/> 
<TextView 
android:id="@+id/text" 
android:textStyle="bold" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
/> 
</LinearLayout> 
AApppp ttoo DDoowwnnllooaadd jjppgg ffiillee
 Step 5 writing 
DownloadImage() 
◦ The DownloadImage() function 
takes in a string containing the 
URL of the image to download. 
◦ It then calls the 
OpenHttpConnection() function 
to obtain an InputStream object 
for reading the image data. 
◦ The InputStream object is sent 
to the decodeStream() method 
of the BitmapFactory class. 
◦ The decodeStream() method 
decodes an InputStream object 
into a bitmap. 
◦ The decoded bitmap is then 
returned by the 
DownloadImage() function. 
private Bitmap DownloadImage(String URL) { 
Bitmap bitmap = null; 
InputStream in = null; 
try { 
in = OpenHttpConnection(URL); 
bitmap = BitmapFactory.decodeStream(in); 
in.close(); 
} catch (IOException e1) { 
e1.printStackTrace(); 
} 
return bitmap; 
} 
AApppp ttoo DDoowwnnllooaadd jjppgg ffiillee
 Step 6 Test the DownloadImage() function, modify the 
onCreate() event as follows 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
Bitmap bitmap = DownloadImage( 
"http://www.streetcar.org/mim/cable/images/cable-01.jpg"); 
img = (ImageView) findViewById(R.id.img); 
img.setImageBitmap(bitmap); 
}
Step 7:Output 
AApppp ttoo DDoowwnnllooaadd jjppgg ffiillee
Programming Tutorial 3 
Transmitting SMS messages across the network
Intents request for an action to be 
performed and supports interaction 
among the Android components. 
◦ For an activity it conveys a request to present 
an image to the user 
◦ For broadcast receivers, the Intent object 
names the action being announced. 
Intent Filter Registers Activities, Services 
and Broadcast Receivers(as being capable 
of performing an action on a set of data). 
IInntteenntt aanndd IInntteennttFFiilltteerr
 STEP 1 
◦ In the 
AndroidManifest.xml file, 
add the two permissions - 
SEND_SMS and 
RECEIVE_SMS. 
 STEP 2 
◦ In the main.xml, add Text 
view to display "Enter the 
phone number of 
recipient“ and "Message" 
◦ EditText with id 
txtPhoneNo and 
txtMessage 
◦ Add the button ID "Send 
SMS“ 
SSMMSS SSeennddiinngg
• Step 3 Import Classes and Interfaces 
import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsManager; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
SSMMSS SSeennddiinngg
 Step 4 Write the SMS class 
public class SMS extends Activity { 
Button btnSendSMS; 
EditText txtPhoneNo; 
EditText txtMessage; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo); 
txtMessage = (EditText) findViewById(R.id.txtMessage); 
btnSendSMS.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
String phoneNo = txtPhoneNo.getText().toString(); 
String message = txtMessage.getText().toString(); 
if (phoneNo.length()>0 && message.length()>0) 
sendSMS(phoneNo, message); 
else 
Toast.makeText(getBaseContext(), 
"Please enter both phone number and message.", 
Toast.LENGTH_SHORT).show(); 
} 
}); 
} 
} 
SSMMSS SSeennddiinngg 
Input from the 
user (i.e., the 
phone no, text 
message and 
sendSMS is 
implemented).
Step 5 
◦ To send an SMS message, you use the 
SmsManager class. And to instantiate this class 
call getDefault() static method. 
◦ The sendTextMessage() method sends the SMS 
message with a PendingIntent. 
◦ The PendingIntent object is used to identify a 
target to invoke at a later time. 
private void sendSMS(String phoneNumber, String message) { 
PendingIntent pi = PendingIntent.getActivity(this, 0, 
new Intent(this, SMS.class), 0); 
SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(phoneNumber, null, message, pi, null); 
} 
SSMMSS SSeennddiinngg
SSMMSS SSeennddiinngg
Step 1 
RReecceeiivviinngg SSMMSS
Step 2 
◦ In the AndroidManifest.xml file add the <receiver> element so 
that incoming SMS messages can be intercepted by the 
SmsReceiver class. 
<receiver android:name=".SmsReceiver"> 
<intent-filter> 
<action android:name= 
"android.provider.Telephony.SMS_RECEIVED" /> 
</intent-filter> 
</receiver> 
RReecceeiivviinngg SSMMSS
Step 3 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 
RReecceeiivviinngg SSMMSS
 Step 4 
public class SmsReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
//---get the SMS message passed in--- 
Bundle bundle = intent.getExtras(); 
SmsMessage[] msgs = null; 
String str = ""; 
if (bundle != null){ 
//---retrieve the SMS message received--- 
Object[] pdus = (Object[]) bundle.get("pdus"); 
msgs = new SmsMessage[pdus.length]; 
for (int i=0; i<msgs.length; i++) { 
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
str += "SMS from " + msgs[i].getOriginatingAddress(); 
str += " :"; 
str += msgs[i].getMessageBody().toString(); 
str += "n"; 
} 
//---display the new SMS message--- 
Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
} 
} 
} 
RReecceeiivviinngg SSMMSS 
In the SmsReceiver class, 
extend the 
BroadcastReceiver class 
and override the 
onReceive() method. The 
message is attached to the 
Intent 
The messages are stored in a 
object array PDU format. To 
extract each message, you 
use the static 
createFromPdu() method from 
the SmsMessage class. The 
SMS message is then 
displayed using the Toast 
class
RReecceeiivviinngg SSMMSS
What is Android? 
What are the sensor and networking 
capabilities in Android? 
How to use location data and Google 
maps in Android? 
How to access websites? 
How to send SMS messages across the 
network? 
Questions/Comments? 
CCoonncclluussiioonnss