Upload
kamini-kanchan
View
181
Download
0
Embed Size (px)
Citation preview
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 1/266
Introduction to
Android ApplicationDevelopment
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 2/266
Goals for the week
• Introduce Android architecture and SDK
• Get hands-on experience with tools
• Create a few demo apps, and gain skills and
knowledge to develop your own
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 3/266
Android devices
Wide range of:
•Manufacturers
•Providers
•Screen sizes
•Screen densities
•Keyboards
•Network capabilities
•Tablets and phonesFriday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 4/266
Android Technology
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 5/266
A software stack for mobile devices
Includes:
•Operating system•Middleware
•Key applications
•SDK for writing apps
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 6/266
Android Architecture
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 7/266
Built-in applications
• Mail client
•Messaging (SMS) program
• Calendar and contacts
• Maps
• Web browser
• Others (depending on distribution)
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 8/266
Application framework
• Open development platform
•Design encourages component re-use
• Includes:
• Views (controls)
•Content providers
• Resource manager
• Activity manager
• Notification manager
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 9/266
Core Libraries
• System C library (libc)
•Media Libraries
• Surface manager
• LibWebCore
• SGL (2D graphics engine)
•3D libraries (OpenGL ES)
• FreeType
• SQLite
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 10/266
Android runtime
• Core libraries with most of Java’s librarycapability
• Dalvik VM: Executes Dalvik bytecode
• Each app runs in its own process
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 11/266
Dal-what?
• Dalvik VM != JVM
•Dalvik VM is optimized for smartphone
hardware
• VM is register-based, not stack-based
•Runs its own bytecode: Dalvik Executable
(.dex) format; minimal memory footprint
• Utility converts Java bytecode into .dex
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 12/266
Linux kernel
• Linux 2.6 kernel
• Security, memory management, process
management, networking
•Abstraction layer between hardware and
rest of software stack
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 13/266
ApplicationFundamentals
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 14/266
Each app lives in its own world
• Each app runs in its own Linux process
• Each process has its own Dalvik virtualmachine
•Each app is assigned a unique Linux user ID
• Files are visible only to that one application
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 15/266
Application components
and re-use• Individual components of one app can be
used by another, if permission is given
• App 1 can launch a component of App 2,
giving the appearance of embedding
•Apps have no single entry point; built
instead as individual components
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 16/266
Activities
• A UI for one focused task for the user
•Examples:• Choose an item from a catalog
• Compose a text message
• Choose somebody to send a message to
•Each app has one or more activities
• They work together, but each is independent
• One activity usually starts the next
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 17/266
ActivitiesChoose a hotel Describe the hotel Choose a room
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 18/266
Activities
• Each is given a default window to draw in
•Usually fills the screen
• Can create other windows (like a dialog or
pop-up)
• Can create new full-screen views within thesame activity
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 19/266
Activity stack
• Activity A calls startActivity()
• Activity B starts and covers the screen
• User presses hardware Back button
• Activity B finishes, exposing Activity A
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 20/266
Activity stack
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 21/266
Launching an activity from
Home
Text
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 22/266
Difference between
HOME and BACK
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 23/266
Activity lifecycle events
Activities have three main states:
• active
• paused• stopped
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 24/266
Activity lifecycle
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 25/266
Intents
•Asynchronous messages that:
• launch an activity,
• launch a service,
• or notify a broadcast receiver.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 26/266
Example: View a web
page
Action and data
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 27/266
Intent object
• Component name
• Action
• Data (URL)
• Category
• Extras
• Flags
A bundle of information passed in
an intent, optionally containing:
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 28/266
Explicit intents
Often used to start one activity from
another within the same application.
Component name
Extra data
Context reference
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 29/266
Implicit intents
No specific application or activity is named.
Usually for activating components in other apps.
Android uses intent filters to figure out which
activity to launch, according to action, data,
and category .
Apps declare intent filters for each activity in
the manifest.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 30/266
Choosing an activity for an
intent
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 31/266
Two ways to start an
activity
• startActivity(intent);
•No result returned from child
• startActivityForResult(intent, requestCode);• Child returns a result (as int and another intent)
• Child calls setResult(int)
• Caller implements onActivityResult() to get the result
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 32/266
Application manifestAndroidManifest.xml
Names the application ID(package)
Lists theactivities, and
their attributes
Sets otheroptional
parameters
Declares requiredpermissions
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 33/266
Activities and tasks
Task: what the user experiences as a single “application”
A group of activities, managed as a stack.
Normally, activites are only pushed/poppped, never
re-arranged.
The entire stack (task) goes foreground/
background as a unit.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 34/266
Flags and attributes affect
stack and task behavior
• Activities normally belong to the same task
• FLAG_ACTIVITY_NEW_TASK: System
puts the new activity in a different task
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 35/266
What happens to a task in
the background?• Normally, system clears all activities except
the root activity if it’s been in the
background “a long time”.
• Boolean attributes to control this:
•alwaysRetainTaskState (root activity)
• clearTaskOnLaunch (root activity)
• finishOnTaskLaunch
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 36/266
Three ways to shut down
an activity
this.finish();
this.finishActivity(int requestCode);
User presses BACK key
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 37/266
Returning to the root
activity
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 38/266
Ending a task
The root activity finishes, either by the
user pressing BACK or the activity
calling finish() on itself.
Android itself manages the lifetime of the application!
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 39/266
Refresher on Java
conce ts
• Nested classes
• Anonymous inner classes
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 40/266
Nested classes
• Logically group classes that are used only in one
place.• Increase encapsulation.
• Can make code more readable and maintainable.
• Static vs non-static
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 41/266
Anonymous inner classes
public class OuterClass { public void startThread1() { Runnable mRunnable = new Runnable() { @Override
public void run() { // do something here
} };
Thread t = new Thread(mRunnable); t.start();
};
public void startThread2() { Thread t = new Thread(new Runnable() {
@Override public void run() { // do something here
} });
t.start(); };
}
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 42/266
Access to local variables
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 43/266
Lab: Hello, Negotiator!(in three parts)
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 44/266
Application resources
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 45/266
main.xml
strings.xml
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 46/266
Application resources
Two different devices, both using default resources:
Two different devices, one using alternative resources:
Resources should always be externalized.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 47/266
Organizing resources
Source and resource folder structure
Precompiler
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 48/266
Specifying alternative
resourcesResource folder naming convention
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 49/266
View and ViewGroup
All UIs are built with a combination of
Views and ViewGroups.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 50/266
Control views (Widgets)
• Button
• TextView
• EditText
• CheckBox
• ImageView
• ListView
• RadioButton
• Spinner
• ...your own custom View
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 51/266
Creating a custom View
Extend View directly, or extend an existing Widget:
In the XML layout, use the full class name of
your custom view:
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 52/266
UI event listeners
Each interface has one callback method:
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 53/266
Implementing an event listener
In your Activity class:
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 54/266
Implementing an event listener
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() { public void onClick(View v) {
// do something when the button is clicked }
};
protected void onCreate(Bundle savedValues) { ... // Capture our button from layout Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above button.setOnClickListener( mCorkyListener); ...
}
As an anonymous class, and a field:
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 55/266
Implementing an event listener
As an anonymous class, directly:
protected void onCreate(Bundle savedValues) {
... // Capture our button from layout Button button = (Button)findViewById(R.id.corky); // Register the onClick listener with the implementation above button.setOnClickListener(new OnClickListener() { public void onClick(View v) { // do something when the button is clicked }
}); ...
}
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 56/266
Event handler return values
Some have no return value (void)
Others return a boolean indicating whether
the event was (should be) consumed.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 57/266
Layouts
Friday, December 17, 2010
L t iti hild t l
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 58/266
Layouts position child controlsfor the UI.
Major layout classes:
•FrameLayout
•LinearLayout
•RelativeLayout
•TableLayout
Layouts can re-size and re-position controls to
give a good presentation on different screen sizes
and orientations.
Friday, December 17, 2010
D fi l h XML
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 59/266
Define layouts either in XMLor in Java code.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 60/266
Common View attributes
Friday, December 17, 2010
Parent view group defines which
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 61/266
Parent view group defines whichlayout parameters are available
for each child .
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 62/266
Units of measure
• Pixels (px)
• Density-independent pixels (dip or dp)• Based on 160 dpi; 160 dp is always one inch
• Scale-indepent pixels (sp)• Like dp, but scaled by font-size preference
• Points (pt)
• 1/72 of an inch
• Millimeters (mm)
• Inches (in)
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 63/266
References in value strings
• Literal value
• Reference to a resource in our own package
• Reference to a resource in another package
android:padding="50dp"
android:background="#888888"
android:background="@drawable/myImage"
android:background="@color/blue"
android:background="@android:drawable/someDrawable"
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 64/266
id
Generate a new ID value called someNewId and assign it to this item.
Use an existing ID (in our own resources).
Use an existing ID (in the standard Android namespace).
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 65/266
layout_height and layout_width
Set the height of this item to match the height of its parent.
Make this item just high enough to enclose its content.
Set the height of this item to exactly 42 device-independent pixels.
Friday, December 17, 2010
layout margin and padding
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 66/266
layout_margin and padding
Leave 24dp of space all around the edges of this item when
laying it out, if possible.
Leave 24dp of space at the top edge of this item when laying it
out, if possible.
Leave 24dp of all around the contents of this item, if possible.
Friday, December 17, 2010
it d l t it
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 67/266
gravity and layout_gravity
android:gravity=
Center the content of this item within the item horizontally.
Center the content of this item within the item, both vertically
and horizontally.
Center this item within its parent, both vertically and horizontally.
Friday, December 17, 2010
background
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 68/266
background
Set this item’s background to a solid white color.
Set this item’s background to transparent (alpha = 00).
Set this item’s background to a color named pricelineDarkBlue,
which is defined in an XML resource file.
Set this item’s background to a Drawable called mySpecialBackground,
which might be a bitmap image or an XML-defined shape.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 69/266
frameLayout
Friday, December 17, 2010
LinearLayout
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 70/266
LinearLayout
Stacks child views in a vertical or horizontal line.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" android:gravity="center"
android:background="@color/pricelineDarkBlue"> <Button android:text="Larry"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<Button android:text="Curly" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <Button android:text="Moe"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</LinearLayout>
Friday, December 17, 2010
Li L i f l
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 71/266
LinearLayout is usefuland flexible.
• Horizontal and vertical LinearLayouts can
be nested to create complex layouts.
• Wrap several controls in a LinearLayout to
align or format them as a group.
•Pay close attention to gravity and
layout_gravity attributes.
Friday, December 17, 2010
T bl L
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 72/266
TableLayout
Friday, December 17, 2010
RelativeLayout
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 73/266
RelativeLayout
Friday, December 17, 2010
L ft d i ht li t ith
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 74/266
Left- and right-alignment withRelativeLayout
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/pricelineDarkBlue">
<Button android:text="Larry" android:id="@+id/larry"
android:layout_alignParentLeft="true" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <Button android:text="Curly"
android:layout_toRightOf="@id/larry" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <Button android:text="Moe"
android:layout_alignParentRight="true" android:layout_width="wrap_content"
android:layout_height="wrap_content"/></RelativeLayout>
Friday, December 17, 2010
S llVi
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 75/266
ScrollView
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 76/266
Optimizing layouts
• Avoid unnecessary nesting
• Avoid using too many views (not more than80!)
• Avoid deep nesting (fewer than 10 levels!)
• Run the layoutopt utility on your layoutsto get recommendations for optimization
Friday, December 17, 2010
I fl l
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 77/266
Inflating a layout
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 78/266
Includes
One layout can include another.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 79/266
View stubs: lazy includes
Friday, December 17, 2010
Adding to a layout at
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 80/266
Adding to a layout at
runtime
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 81/266
Context
Context: Interface to global information
about an application environment
Base class of Activity, Service, and Application
getString()
getResources()getApplicationInfo()
getTheme()etc.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 82/266
Lab: ZipLookupPart One
Friday, December 17, 2010
M
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 83/266
Menus
Friday, December 17, 2010
Expanded menus
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 84/266
Expanded menus
Friday, December 17, 2010
C t t
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 85/266
Context menu
Friday, December 17, 2010
D fi i
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 86/266
Defining a menu
Create an XML in the /res/menu directory.
Friday, December 17, 2010
U i i h i i
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 87/266
Using a menu in the activity
Inflate the
menu XML
Handle the
selection event
Friday, December 17, 2010
ListView
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 88/266
ListView
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 89/266
ListView and ListAdapter
ListView shows the list; the data comes from
ListAdapter.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 90/266
Standard adapters
ArrayAdapter<T>
BaseAdapter
SimpleAdapter
CursorAdapter
These all implement Adapter
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 91/266
Using ArrayAdapter
For each item, populates a single
TextView with the value returnedby toString().
Data is defined as an array of objects.
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 92/266
Extending ArrayAdapter
Friday, December 17, 2010
Using SimpleAdapter
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 93/266
Using SimpleAdapter
Data is a defined as a List of Maps.Rows can have more than one field.
Friday, December 17, 2010
Extending BaseAdapter
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 94/266
Extending BaseAdapter
Friday, December 17, 2010
O h f Ad
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 95/266
Other uses of Adapter
Gallery, ListView, and Spinner all
extend AdapterView
Gallery: Horizontally-scrolling list locked at the center
Spinner: Drop-down list of items, like a combo box
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 96/266
Lab: Navigator
Friday, December 17, 2010
N ifi i
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 97/266
Notifications
• Toast Notification
Brief pop-up message from the background
• Status Bar Notification
Persistent reminder from the background thatrequests a response
• Dialog Notification
Pop-up, modal message from the activity
Friday, December 17, 2010
T
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 98/266
Toast
Friday, December 17, 2010
T
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 99/266
Toast
Friday, December 17, 2010
C
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 100/266
Custom toast view
Friday, December 17, 2010
S b ifi i
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 101/266
Status bar notifications
Status bar icons
Icon with ticker message
Notifications window
(pull down the status bar)
Some are Ongoing.
Friday, December 17, 2010
Creating a notification
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 102/266
Creating a notification
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager)
getSystemService(ns);
int icon = R.drawable.notification_icon;
CharSequence tickerText = "Hello";
long when = System .currentTimeMillis();
Notification notification = new Notification(icon, tickerText,
when);
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle,
contentText, contentIntent);
private static final int HELLO_ID = 1;
mNotificationManager.notify(HELLO_ID, notification);
Get notification manager ref
Instantiate notification
Define expanded message,intent
Pass to NotificationManager
Friday, December 17, 2010
O h ifi i f
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 103/266
Other notification features
• Update existing notification
•Custom expanded viewLayout takes the place of standard title and text
• Add sound
•Add vibration
• Add flashing lights
Friday, December 17, 2010
Di l
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 104/266
Dialogs
• AlertDialog
•ProgressDialog
• DatePickerDialog
• TimePickerDialog
Create a dialog from within onCreateDialog(int).
Friday, December 17, 2010
C ti di l
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 105/266
Creating dialogs
static final int DIALOG_PAUSED_ID = 0; static final int DIALOG_GAMEOVER_ID = 1;
protected Dialog onCreateDialog(int id) {
Dialog dialog; switch (id) {
case DIALOG_PAUSED_ID: // do the work to define the pause Dialog
break; case DIALOG_GAMEOVER_ID:
// do the work to define the game-over Dialog break;
default: // unknown dialog
dialog = null; }
return dialog;} public void showPausedDialog() {
showDialog(DIALOG_PAUSED_ID); }
Friday, December 17, 2010
C ti Al tDi l
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 106/266
Creating an AlertDialog
Friday, December 17, 2010
Al t di l ith li t
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 107/266
Alert dialog with list
Friday, December 17, 2010
Si l di l
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 108/266
Simple progress dialog
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 109/266
Lab: Hello, NegotiatorWho Cannot Be
Ignored!
(Parts 1 and 2)
Friday, December 17, 2010
St l d Th
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 110/266
Styles and Themes
Same idea as cascading style sheets (CSS)
Instead of this:
You can do this:
Friday, December 17, 2010
Defining styles
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 111/266
Defining styles
Styles can inherit from other styles.
Some styles are built-in. (@android:style/*)
Custom styles go in one or more <resources> xml.
Friday, December 17, 2010
Style inheritance
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 112/266
Style inheritance
Inherit from your own styles using dot-notation.
Friday, December 17, 2010
Style vs theme
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 113/266
Style vs. theme
In layout.xml, style appliesto a specific View, only.
In <activity> tag inmanifest.xml, style appliesto all views in the activity.
In <application> tag inmanifest.xml, style appliesto all views in the entire
application.
Friday, December 17, 2010
Some built in themes
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 114/266
Some built-in themes
You can use these directly, or extend them.
Theme
Theme.NoTitleBarTheme.NoTitleBar.Fullscreen
Theme.Light
Theme.Black
Theme.TranslucentTheme.Dialog
Theme.Dialog.Alert
Friday, December 17, 2010
Dialog themes
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 115/266
Dialog themes
res/values/styles.xml:
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 116/266
Lab: Hello, NegotiatorWho Cannot Be
Ignored!
(Part 3)
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 117/266
Drawables
Friday, December 17, 2010
Drawable
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 118/266
Drawable
• BitmapDrawable
• ShapeDrawable
• PictureDrawable
• LayerDrawable
• etc.
Something that can be drawn.
Friday, December 17, 2010
Three ways to create a
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 119/266
Drawable
• Image saved in project resources
• XML file that defines Drawable properties
• In code, using class constructors
Friday, December 17, 2010
Using image resources
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 120/266
Using image resources
Id is image filename, without the extension
Acceptable characters: [a-z0-9_.]
Friday, December 17, 2010
Two ways to load from
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 121/266
code
or, as Drawable:
as ImageView:
Friday, December 17, 2010
Creating from resource XML
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 122/266
Creating from resource XML
Can be used for any Drawable
subclass that supports inflate().
Example: ShapeDrawable from Negotiator app:
Friday, December 17, 2010
Using a ShapeDrawable in a
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 123/266
custom View
Friday, December 17, 2010
NinePatch Drawable
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 124/266
NinePatch Drawable
Stretchable bitmap image that resizes itself cleanly.
Example: Backgrounds of standard Android buttons
Standard PNG image with extra 1-pixel border lines
Save with .9 extension in res/drawable
Friday, December 17, 2010
Caution: Each resource has
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 125/266
only one stateResources res = getResources();
Drawable myImage1 = res.getDrawable(R.drawable.my_image);
Drawable myImage2 = res.getDrawable(R.drawable.my_image); // The following line changes the alpha for both myImage1 and myImage2.
myImage1.setAlpha(128);
Friday, December 17, 2010
Solution: mutate() method
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 126/266
Solution: mutate() method
Resources res = getResources();
Drawable myImage1 = res.getDrawable(R.drawable.my_image);
Drawable myImage2 = res.getDrawable(R.drawable.my_image); // The following line changes the alpha for only myImage1.
myImage1.mutate().setAlpha(128);
Friday, December 17, 2010
Selector drawable
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 127/266
Selector drawable
This could be used as the background of a button:
Friday, December 17, 2010
Color state list
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 128/266
Color state list
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 129/266
Animation
Friday, December 17, 2010
Animation types
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 130/266
Animation types
• Frame animation: Rapid sequence of pre-
created frames that give the illusion of motion
• Tween animation: Series of transformations
on a View object, defined as start and end
Friday, December 17, 2010
Frame animation
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 131/266
Frame animationBased on AnimationDrawable class
XML file goes in res/drawable:
Friday, December 17, 2010
Frame animation
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 132/266
Frame animation
Friday, December 17, 2010
When to call start()
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 133/266
When to call start()
• Don’t call in onCreate();
AnimationDrawable isn’t fully attached tothe window yet
• Consider onWindowFocusChanged() for
animation that starts immediately
Friday, December 17, 2010
Negotiator opening screen
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 134/266
Negotiator opening screen
Friday, December 17, 2010
Tween animation
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 135/266
Tween animation
• Gradually change certain properties of a
View object
• Alpha, scale, translate, rotate
• Specify, either in code or XML:
•Start and end states
• Total time
• Interpolation curve
Friday, December 17, 2010
Sample animation resource
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 136/266
<set android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.4"
android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700" android:duration="400"
android:fillBefore="false" /> <rotate
android:fromDegrees="0"
android:toDegrees="-45" android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%" android:startOffset="700" android:duration="400" />
</set>
Friday, December 17, 2010
Applying an animation
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 137/266
Applying an animation
or
Friday, December 17, 2010
Interpolators
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 138/266
p
Define the rate of change of an animation.
AccelerateInterpolator
AccelerateDecelerateInterpolator
LinearInterpolator
BounceInterpolatorOvershootInterpolator
Friday, December 17, 2010
Animation timing
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 139/266
Animation timing
• A set of animations can be sequential orsimultaneous
• Simultaneous: Animations have same start
times
•Sequential: Time the second one to begin
after the first one ends
Friday, December 17, 2010
Sequential animations
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 140/266
Sequential animations
<set android:interpolator="@android:anim/linear_interpolator"> <scale android:fromXScale="1.4"
android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:startOffset="0" android:duration="500" /> <rotate
android:fromDegrees="0"
android:toDegrees="-45" android:toYScale="0.0"
android:startOffset="500" android:duration="500" />
</set>
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 141/266
Lab: ZipLookupPart Two (Animation)
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 142/266
Concurrency
Friday, December 17, 2010
Threading Practices
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 143/266
g
• Don’t block the main thread
•Perform all UI operations on main thread!
• Put long-running, non-network tasks in the
background
• Consider using asynchronous pattern formost I/O
Friday, December 17, 2010
Threads in Android
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 144/266
• Use standard Java Thread objects (and
Runnable interfaces)
• Convenience classes for managing threads• Example: Handler for processing messages on the main
thread
Friday, December 17, 2010
What’s wrong with this?
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 145/266
g
public void onClick(View v) {
Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
Friday, December 17, 2010
OK, how about this?
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 146/266
,
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
}).start();
}
Friday, December 17, 2010
Access the UI thread from
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 147/266
a background thread
• Activity.runOnUiThread(Runnable)
• View.post(runnable)
• View.postDelayed(Runnable, long)
• Handler
Friday, December 17, 2010
This is one solution
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 148/266
This is one solution
Friday, December 17, 2010
Use AsyncTask
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 149/266
y
Friday, December 17, 2010
Sample HTTP client
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 150/266
p
Don’t run this on the main thread;
plug it into AsyncTask instead.
Friday, December 17, 2010
Compatibility acrossA d id i
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 151/266
Android versions
Friday, December 17, 2010
Android API levels
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 152/266
API levels also have
nicknames like Cupcake and
Gingerbread.
Use Build.VERSION.SDK_INT
to detect API level at
runtime.
Friday, December 17, 2010
API levels in the manifest
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 153/266
minSdkVersion
Minimum API Level required for the app to run.
targetSdkVersion
API Level on which the app is designed to run.
maxSdkVersion
Maximum API Level on which the app is able to run.(Deprecated .)
Friday, December 17, 2010
Platform version
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 154/266
Compile against the lowest possible version
that your app can support.
Friday, December 17, 2010
Using features in newer
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 155/266
Android versions• Check runtime platform using Build class
• Use Java reflection to load new classesand/or execute new methods
• Suggestion: Put reflection code in a
separate class
Friday, December 17, 2010
Reflection example
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 156/266
p
Friday, December 17, 2010
Designing for performance
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 157/266
g g p
Device has:
•Limited computing power
• Limited storage
• Limited battery life
Even if app runs fast enough, consider power!
Friday, December 17, 2010
Optimization tips
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 158/266
p p
• Write good, well-structured and well-
layered code to begin with.
• Avoid design decisions that will limitperformance -- things that will be hard to
change later.
• Don’t guess; measure performance beforeand after optimization.
Friday, December 17, 2010
Specific tips
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 159/266
p p
• Avoid creating objects!
• Re-use objects within a loop
• Avoid creating short-term temporaryobjects
• Prefer static over virtual (15%-20% faster)
• Avoid internal getters and setters (3x-7x
slower than direct field access)
Friday, December 17, 2010
Design for responsiveness
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 160/266
• An app can be fast, yet still
be unresponsive
• ANR dialog if app can’trespond to user input within
5 seconds
• The main (UI) thread isprecious -- protect it!
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 161/266
Location Services
Friday, December 17, 2010
android.location package
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 162/266
• Get instance of LocationManager system
service
•Query for list of all installed
LocationProviders
• Register/unregister for periodic updates
from a given provider
• Register/unregister for a given Intent to fire
when we get close to something
Friday, December 17, 2010
Location awarenesschallenges
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 163/266
challenges
• Several different location sources, all
returning different data
• The user might be moving
• For each provider, accuracy varies over
time
Friday, December 17, 2010
Requesting updates from aspecific provider
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 164/266
specific provider
Call requestLocationUpdates() once for
each provider of interest.Friday, December 17, 2010
Typical application flow
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 165/266
Friday, December 17, 2010
Quick fix: last knownlocation
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 166/266
location
Returns a cached location instantly --
but it might be old!
Friday, December 17, 2010
Power-saving tips
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 167/266
• Reduce the size of the update window
• Set the updates to return less frequently
• Use only the Network provider, rather than
the GPS provider
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 168/266
Using abd, DDMS andLogCat
Friday, December 17, 2010
adb: Android Debug Bridge
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 169/266
Client-server program in 3 pieces:
• Command-line client (adb)
• Server: background process on the PC
• Daemon: background process on the
emulator or device
3 pieces communicate over TCP sockets.
Friday, December 17, 2010
Sample adb commands
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 170/266
• adb devices
• adb install something.apk
• adb uninstall appid
• adb push <local> <remote>
• adb pull <remote> <local>
• adb logcat
Friday, December 17, 2010
Remote adb shell
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 171/266
Friday, December 17, 2010
DDMS: Dalvik DebugMonitor Server
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 172/266
Monitor Server
• Uses adb path to connect to device
• Can connect via TCP to debug port of anyrunning VM
• Functions as “router” to connect Eclipse
debugger to selected VM
Friday, December 17, 2010
Starting DDMS
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 173/266
From Eclipse:
Switch to DDMS perspective
From command line:
Friday, December 17, 2010
DDMS standalone
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 174/266
Friday, December 17, 2010
Eclipse DDMS perspective
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 175/266
Friday, December 17, 2010
Sample DDMS features
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 176/266
• LogCat (in a window)
•Threads and allocations
• File explorer
• Screen capture
• Force a GC
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 177/266
Profiling ApplicationPerformance
Friday, December 17, 2010
Execution trace files
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 178/266
Generate a trace file
Copy to development machine
adb pull /sdcard/calc.trace .
Friday, December 17, 2010
Analyze a trace file
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 179/266
traceview calc
Timeline panel:
Friday, December 17, 2010
Profile panel
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 180/266
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 181/266
Services
Friday, December 17, 2010
Service
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 182/266
• An application component that doesn’t
have a user interface
• Runs on the main thread of the app, in thebackground, indefinitely
• Activities can bind to the service, start it,
stop it, and exchange data with it
• Can interact directly with other apps
Friday, December 17, 2010
What a Service isn’t:
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 183/266
• A separate application or process
• A way to run things in a separate thread
Friday, December 17, 2010
Service lifecycle
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 184/266
Friday, December 17, 2010
Service lifecycle methods
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 185/266
•void onCreate()
• void onStart(Intent intent)
• void onDestroy()
Friday, December 17, 2010
Other Service callbacks
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 186/266
• IBinder onBind(Intent intent)
•boolean onUnbind(Intent intent)
• void onRebind(Intent intent)
IBinder: Communications channel used by clients tointeract with the service
Friday, December 17, 2010
Binding to a service
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 187/266
• Clients call Context.bindService()
• Creates the service if not already running
• Returns an IBinder object
• Service remains running at least until all clients
disconnect
Friday, December 17, 2010
Service permissions
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 188/266
• Manifest contains a <service> tag
• Service can declare its own, home-made<permission> item in this tag
• If so, any app that wants to connect needs
a matching <uses-permission> tag
Friday, December 17, 2010
Simple example: Service runningin same process as its clients
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 189/266
p
Friday, December 17, 2010
Simple example (continued)
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 190/266
Friday, December 17, 2010
Client that uses service
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 191/266
Friday, December 17, 2010
Remote client bindingoptions
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 192/266
p
• Use AIDL
• Complete interface definition that you define
in an .aidl file
• Tools will generate stub and proxy classes
• Use Messenger class
• Connects to a local Handler to exchange
messages across processes
Friday, December 17, 2010
Service syntax in manifest
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 193/266
On the same level as <activity> declarations:
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 194/266
Content providers
Friday, December 17, 2010
Store and retrieve dataacross applications
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 195/266
across applications
• Android doesn’t support direct sharing of
files
• Some content providers are built in, likeimage library, address book, settings,
browser bookmarks
• Apps can expose their own contentproviders for other apps to consume
Friday, December 17, 2010
Two choices for publishing
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 196/266
data
1. Create your own content provider, or
2. Add data to an existing content provider, if
it supports the same kind of content and
you have permission to write to it.
Friday, December 17, 2010
Common interface forcontent providers
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 197/266
p
Android system figures out the appropriate
content provider to match the query, and
makes sure it’s up and running.
Query is expressed as a URI.
Friday, December 17, 2010
Content provider URIs
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 198/266
Each provider exposes a URI that uniquely identifies
its data set -- or one for each data set it supports.
Each ContentResolver method takes the URI
as its first argument.
Friday, December 17, 2010
How data is exposed
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 199/266
Simple table model.
_ID field uniquely identifies record within the table,
and can be used to match data in other tables.
Friday, December 17, 2010
Query returns a Cursor
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 200/266
Actual URL: content://contacts/people/23
Friday, December 17, 2010
Format of a content:// URI
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 201/266
A: Standard prefix (always content://)
B: Authority
C: Path used by CP to determine type of databeing requested
D: ID of a specific record (optional)
Friday, December 17, 2010
Other query arguments• Names of columns to return
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 202/266
• Names of columns to return
• WHERE clause (filtering rows)
• Selection arguments
• ORDER BY clause (sorting rows)
Friday, December 17, 2010
Reading from the cursor
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 203/266
Friday, December 17, 2010
Reading large binary data
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 204/266
Data for some columns might be returned as a
content: URI String, rather than an object.
Friday, December 17, 2010
Modifying data - addingrecords
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 205/266
Friday, December 17, 2010
Change values for existingrecords
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 206/266
Friday, December 17, 2010
Creating your own contentprovider
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 207/266
• Set up some way to store the data (e.g.,
SQLite database)
• Extend ContentProvider class to access it
• Declare the ContentProvider class in your
manifest
Friday, December 17, 2010
Extending ContentProvider
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 208/266
Create CONTENT_URI
Define column names as public static String values,including “_id”
Implement methods:
Friday, December 17, 2010
Declare the content providerin the manifest
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 209/266
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 210/266
Sensors
Friday, December 17, 2010
Android Device Sensors
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 211/266
• Accelerometer
•Compass
• Proximity
• Ambient Light
• Gyroscope (Nexus S)
Friday, December 17, 2010
Even more Sensors...
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 212/266
Friday, December 17, 2010
Enumerating availablesensors
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 213/266
A device can have more than one sensor of a given type.
Friday, December 17, 2010
Available sensors
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 214/266
HTC Nexus One:
Motorola Droid:
Friday, December 17, 2010
Accelerometer
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 215/266
Measures acceleration,not velocity .
Friday, December 17, 2010
Accelerometer applications
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 216/266
Friday, December 17, 2010
Useful (and useless)acceleration constants
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 217/266
SensorManager.GRAVITY_EARTH
SensorManager.GRAVITY_JUPITER
SensorManager.GRAVITY_DEATH_STAR_I
Friday, December 17, 2010
Listening for changes
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 218/266
Friday, December 17, 2010
Isolating or ignoring gravity
Use a low -pass filter if you’re only interested in the
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 219/266
orientation of the device.Use a high-pass filter if you’re only interested in
sudden motions.
Friday, December 17, 2010
Magnetic Field sensor
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 220/266
• Senses orientation of a magnetic field
• Measures field strength in x, y, z axes,similar to Accelerometer
• Most common application: Electronic
compass
Friday, December 17, 2010
Electronic compass
+y
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 221/266
-y
+x-x
N
y
x
α
α = arctan(y/x)
α = 45°
So we mustbe facing
Northwest.
y/x = 1.0
Friday, December 17, 2010
Orientation
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 222/266
• Actually a combination of acceleration and
magnetic field sensors
• Takes into account device orientation
• Easy way to access Compass information
• Returns azimuth, pitch, and roll
Friday, December 17, 2010
Gyroscope
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 223/266
Measures rate of rotation around each axis.
These values are usuallyintegrated over time to
produce an angle.
Friday, December 17, 2010
Don’t forget to shut off!
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 224/266
• Registered sensor listeners will keep
getting updates as long as app is running
• Doesn’t matter if screen is locked, activity
is paused or destroyed
•Un-register to prevent draining the battery
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 225/266
Lab: ApiDemos
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 226/266
Activities: Managing state
Friday, December 17, 2010
A paused activity could bedestroyed at any time.
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 227/266
• If your Activity is sensitive to state, save the
state in the onPause() method, and restoreit in onCreate().
• Or, override onSaveInstanceState().
Friday, December 17, 2010
Using shared preferences
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 228/266
Friday, December 17, 2010
ImplementingonSaveInstanceState()
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 229/266
• System will call onSaveInstanceState() just
before the activity is destroyed.
• Default implementation callsonSaveInstanceState() on all the subviews.
• When the activity is re-started, onCreate()
will be called with a non-NULL Bundle, and
so will onRestoreInstanceState().
Friday, December 17, 2010
What’s a Bundle?Name-value pairs that can be serialized.
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 230/266
Values can be primitives, Strings, arrays,
Parcelables, and other bundles.
Friday, December 17, 2010
Special case: Configurationchange
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 231/266
• onRetainNonConfigurationInstance()
• getLastNonConfigurationInstance()
Friday, December 17, 2010
Testing Activity statemanagement
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 232/266
Friday, December 17, 2010
Application-level state
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 233/266
• Create a subclass of the Application class,and name it in your manifest
• Store application-wide values in your
Application-derived class
• Values are retained as long as app remains
alive, even if Activities are destroyed
Friday, December 17, 2010
Editing shared preferences
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 234/266
Friday, December 17, 2010
/res/xml/options.xml
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 235/266
Friday, December 17, 2010
Activity that managesreferences
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 236/266
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 237/266
Search
Friday, December 17, 2010
Search is a core feature
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 238/266
• Anything is searchable, even if the data isn’t
on the device
•Seamless and consistent search experience
across the whole system
• Android search framework has two parts:
•User interface for kicking off a search
• Interaction layer that communicates withinstalled apps
Friday, December 17, 2010
Local search
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 239/266
Current
activity isn’t
interruptedwhen the
search box
appears.
Friday, December 17, 2010
SearchManager handles it
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 240/266
• SearchManager shows the search dialog
when the Search key is pressed
• SearchManager creates an Intent thatpasses the search query to your designated
search-handler Activity
•Your search-handler Activity performs the
search and presents the results
Friday, December 17, 2010
Create a searchableconfiguration
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 241/266
res/xml/searchable.xml
The android:hint might be “Search MyApplication”
Friday, December 17, 2010
Create a searchable Activity
M d h ACTION SEARCH i
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 242/266
Must respond to the ACTION_SEARCH intent.
Must point to the searchable.xml resource.
Friday, December 17, 2010
Decide which Activities shouldenable the Search button.
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 243/266
A searchable context is any Activity for which you have
declared searchable meta-data in the manifest file.
Or, enable the
entire app:
Friday, December 17, 2010
Implementing the search-handler Activity
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 244/266
Receive and process the query:
Best way to return the results: an Adapter.
Friday, December 17, 2010
Present the results
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 245/266
•Typically, using a ListView; you would
extend your Activity from ListActivity.
• Results can be presented any way you like.
Friday, December 17, 2010
If the search-handler activityis the current activity...
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 246/266
Mark the activity android:launchMode="singleTop"
Friday, December 17, 2010
Adding custom suggestions
You can suggest results that match the
l tt t d f
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 247/266
letters entered so far.
These can also be shownin the system-wide Quick
Search Box!
Friday, December 17, 2010
Custom suggestion steps
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 248/266
• Implement a basic search-handler Activity
• Create a Content Provider to supply data
• Modify searchable configuration with info
about your content provider
• Declare the Intent to be sent when user
selects a suggestion
Friday, December 17, 2010
After Search box isdisplayed:
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 249/266
• Search Manager puts text-so-far into a Query
and sends it to your content provider
• Your CP returns a Cursor with all matching
results
•SM displays the list of suggestions from your
Cursor.
Friday, December 17, 2010
Modify the searchableconfiguration
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 250/266
res/xml/searchable.xml
Friday, December 17, 2010
Handling the suggestion query
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 251/266
content://your.authority/optional.suggest.path/SUGGEST_URI_PATH_QUERY/sometext
SearchManager calls your query() method with
a URI that looks like this:
String query = uri.getLastPathSegment().toLowerCase();
Get the query text:
Friday, December 17, 2010
Returning the result Cursor
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 252/266
Android expects certain specific columns
to be returned in your Cursor object.
See the Android documentation for the
full specification.
Examples: First line of text, second line of text, icon
Friday, December 17, 2010
Declare the Intent action
Determines the Intent when the user
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 253/266
Normally, it is ACTION_VIEW.
Determines the Intent when the userchooses a suggestion.
Friday, December 17, 2010
Handling the Intent in yoursearch-handler Activity
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 254/266
Friday, December 17, 2010
Expose suggestions to theQuick Search Box
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 255/266
AndroidManifest.xml:
res/xml/searchable.xml:
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 256/266
Multimedia
Friday, December 17, 2010
MediaPlayer: Multimediaplayback
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 257/266
• Initialize the Media Player, with media to
play
• Prepare the Player for playback
• Start playback
• Stop (or pause)
Friday, December 17, 2010
MediaPlayer state machine
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 258/266
Friday, December 17, 2010
Simple audio playback
From Negotiator app:
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 259/266
Playing a system sound:
Friday, December 17, 2010
Asynchronous prepare
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 260/266
Friday, December 17, 2010
Playback errors
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 261/266
• Various reasons why playback can fail:• Unsupported media type or encoding
•Resolution too high
• Streaming I/O errors
• Set up an OnErrorListener handler
• Catch IllegalStateException and
IllegalArgumentException
Friday, December 17, 2010
Video playback
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 262/266
• Video needs a Surface to be displayed upon
• VideoView control has a built-in Surface,and encapsulates MediaPlayer
• Or, create and use a SurfaceView object
Friday, December 17, 2010
VideoView control
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 263/266
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 264/266
Lab: Audio and Video
Friday, December 17, 2010
Further Reading
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 265/266
• Android Developer
Documentation: docs/
index.html
• Android 2 ApplicationDevelopment
•Pro Android 2
Friday, December 17, 2010
7/12/2019 Android Training Deck
http://slidepdf.com/reader/full/android-training-deck 266/266
Enjoy Android!