YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: Intents are Awesome

Android Lover since 2008cofounder bubiloopcofounder android.es

Barcelona GTUG LeaderAndroid Dev at Fever

Head Mobile Dept. at ASMWS Computer Science at LaSalle

Israel Ferrer

Page 2: Intents are Awesome

INTENTS ARE AWESOME

really, trust me!

Israel Ferrer14th March

Page 3: Intents are Awesome

WHAT ARE INTENTS

?

Page 4: Intents are Awesome

flickr : chinesetealover

intent |inˈtent| noun intention or purpose: with alarm she realized his intent | a real intent to cut back on social programs.

Page 5: Intents are Awesome

OK... WHAT DOES THIS REALLY MEAN?

Page 6: Intents are Awesome

Open new ScreensShare with other apps

Open Camera to take a photoOpen file managerOpen the browser

Open QR Code Scanner...

Page 7: Intents are Awesome

HOW INTENTS WORK

?

Page 8: Intents are Awesome

Explicit Intent

Implicit Intent

theatricalintelligence

Page 9: Intents are Awesome

EXPLICIT INTENTS

• Explicit Intent names the component which should be called by the Android system, using the Java class as identifier.

• Used to open new activities in the same app.

final Intent intent=new Intent(this, LoginActivity.class);startActivity(intent);

Page 10: Intents are Awesome

IMPLICIT INTENTS• Implicit intent specifies the action to perform and optionally an

URI for the action.

• Implicit Intent is managed by Android Intent resolution, which maps the intent to a Service, Activity or Broadcasts Receiver

• This resolution is done by matching intent with intentFilters of every app.

• If more than one app can handle the action, the user will have to choose.

final Intent intent=new Intent(Intent.ACTION_VIEW, "http://mylookout.com");

Page 11: Intents are Awesome

SHARE DATA

• Intents can contain aditional data by using putExtra() method

• intent.putExtra(EXTRA_CONVERSATION, conversation);

• the receiving component can obtain this data by getExtras() methodBundle extras = getIntent().getExtras();String conversation = extras.getString(EXTRA_CONVERSATION);if (conversation != null) { // Do something with the data}

Page 12: Intents are Awesome

INTENT FILTERS

• An IntentFilter specifies the types of Intent that an activity, service, or broadcast receiver can respond to. IntentFilters are declared in the Android Manifest.

• There are 3 pieces of information used for this resolution:

• Action

• Type: mymeType or scheme.

• Category: need to support DEFAULT to be found by startActivity.

Page 13: Intents are Awesome

INTENT FILTERS

<activity android:name=".BrowserActivitiy" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http"/> </intent-filter></activity>

final Intent intent=new Intent(Intent.ACTION_VIEW, "http://mylookout.com");

Intent

IntentFilter

Page 14: Intents are Awesome

• Explicit: choose the component to call.

• Implicit: is a general intent with action and optionally URI. The Intent resolution call the component that can handle it.

• Intents can share data between components and apps.

TO SUM UP

Page 15: Intents are Awesome

HOW TO

USE INTENTS

?

Page 16: Intents are Awesome

• Reuse code and functionality from 3rd party apps

• ACTION_SEND

• ACTION_VIEW

• geo:lat,lon to open map

• http://host to open browser

• tel:number to open dialer

Page 17: Intents are Awesome

•Define a set of intents to handle web addresses.

• Example: Twitter

•Define IntentFilter to handle twitter urls

<activity android:name=".UrlHandleActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:host="www.twitter.com" android:scheme="http" /> </intent-filter></activity>

Page 18: Intents are Awesome

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Uri uri = getIntent().getData(); if (null == uri) { // Shouldn't happen. Handle errors. finish(); return; }

String path = uri.getPath(); for (Pair<String, Class> pair : DISPATCH_MAP) { if (path.matches(pair.mFirst)) { Intent intent = new Intent(this, pair.mSecond); intent.setData(uri); startActivity(intent); finish(); return; } } finish(); } private static final List<Pair<String, Class>> DISPATCH_MAP = new LinkedList<Pair<String, Class>>();static { DISPATCH_MAP.add(new Pair<String, Class>("(.*)/status$", TweetActivity.class)); DISPATCH_MAP.add(new Pair<String, Class>("/another/path", ProfileActivity.class));}

• Check the URL path to fire target Activity

Page 19: Intents are Awesome

• Expose intents to 3rd party apps. Example: Lookout public backup intent.

Page 20: Intents are Awesome

CONCLUSIONS

Page 21: Intents are Awesome

A core component of Android.A way to reuse functionality between apps.

The glue between activities.The mashup concept into a mobile platformIntents are Awesome for users & developers

Page 22: Intents are Awesome

QUESTIONS?

Page 23: Intents are Awesome