Intents
Explicit Intents
Implicit Intents
ADB (Android Device Bridge) adb kill-server adb start-server adb get-state adb devices
Use kill-server / start-server to reboot the adb if your device/emulator is not communicating with your dev-machine.
Flip teaching http://www.youtube.com/watch?v=HkMS6Glswig http://en.wikipedia.org/wiki/Flip_teaching
Partially Flipped
1/ Videos are required
2/ There will still be lectures and slides but less emphasis on these.
3/ More emphasis on lab: doing exercises together in class (laptop to class is required)
Activities
Services
Broadcast Receivers (aka Receivers)
(http://developer.android.com/guide/componen ts/intents-filters.html)
//Explicit; all you need is the
ComponentName and optionally the bundle.
//Implicit; usually Action/Data and then optionally the bundle.
Explicit
Implicit
ComponentNa me
Action
Data
Scheme
Categories name : Adam Gerber email : gerber@cs.uchicago.edu
ret : something...
//********************************
//This method works great for intra-app calls between activities
//********************************
//use the calling class and the called class as params to constructor.
Intent itn = new Intent(this, Second.class); startActivity(itn);
//********************************
//You can use this method as well
//notice that all you need is the component name for explicit
// calls
//********************************
//instantiate with zero params and add the component this way
Intent itn = new Intent(); itn.setComponent( new ComponentName( "edu.uchicago.cs" ,
"edu.uchicago.cs.Second" )); startActivity(itn);
// this is inside the another method, such as the onClick method
Intent itnThird = new Intent(); itnThird.setComponent( new ComponentName( "edu.uchicago.cs" ,
"edu.uchicago.cs.Third" ));
//********************************
// or you could do this -> Intent itnThird = new Intent(this,
Third.class);
//******************************** itnThird.putExtra( "name" , "Adam Gerber" ); itnThird.putExtra( "email" , "gerber@cs.uchicago.edu" ); startActivity(itnThird);
Implicit intents are anonymous and loosely-coupled.
You request the component like a service of the operating system.
Intent itn = new Intent(Intent.
ACTION_VIEW ,
Uri.parse( " http://www.google.com/ " )); startActivity(itn);
ACTION_VIEW content://contacts/people/1 -- Display information about the person whose identifier is "1".
ACTION_DIAL content://contacts/people/1 -- Display the phone dialer with the person filled in.
ACTION_VIEW tel:123 -- Display the phone dialer with the given number filled in. Note how the VIEW action does what what is considered the most reasonable thing for a particular URI.
ACTION_DIAL tel:123 -- Display the phone dialer with the given number filled in.
ACTION_EDIT content://contacts/people/1 -- Edit information about the person whose identifier is "1".
ACTION_VIEW content://contacts/people/ -- Display a list of people, which the user can browse through. This example is a typical top-level entry into the Contacts application, showing you the list of people.
//The bundle is a data structure inside the
Intent.
//It holds key/value pairs.
//You can use predefined keys as well.
//If you don't place the extras in there
ComponentNa me
Action
Data
Scheme
Categories name : Adam Gerber email : gerber@cs.uchicago.edu
ret : something...
Intent messaging is a facility for late run-time binding between components in the same or different applications.
Intents are handled by the Android OS. In order for the
OS to know about a component, it must be declared in the application manifest file.
If a component does not define Intent filters, it can only be called by explicit Intents. A component with filters can receive both explicit and implicit intents.
6/12/12
Is an inventory of all the components in an application.
If the component is not listed there, the Android
OS won't know it's there. Not even intra-app component communication will resolve.
6/12/12
M
*A
S
A
I
M
A
R
*A
CP
1/ inventory of components used by the OS that are callable given certain criteria.
2/ filter requests.
You can define from course to fine
Beware, there is a slight mis-matching between the java and xml:
ACTION_WEB_SEARCH corresponds to android.intent.action.WEB_SEARCH
ACTION_EDIT corresponds to android.intent.action.EDIT
ACTION_EDIT corresponds to android.intent.action.EDIT
CATEGORY_BROWSABLE corresonds to android.intent.category.BROWSABLE
//Use Categories to further refine your
Intent
//Most important is CATEGORY_DEFAULT
< intent-filter >
< action android:name = "android.intent.action.MAIN" />
< category android:name = "android.intent.category.LAUNCHER" />
</ intent-filter >
From Google: An Intent object is a bundle of information. It contains information of interest to the component that receives the intent
(such as the action to be taken and the data to act on) plus information of interest to the
Android system (such as the category of component that should handle the intent and instructions on how to launch a target activity)
Only three aspects of an Intent object are consulted when the object is tested against an intent filter:
>action
>data (both URI and data type)
>category must pass all three tests.
A component can have multiple intent filters. a filter must contain at least one <action> element, or it will block all intents