Você está na página 1de 11

28/03/2011 Android Applications Tutorial: Intent

Android Core - Android Tutorial

Home Android Tutorials Android News Contact Us

Home Android Tutorials Android Applications Tutorial: Intent

Latest News Popular   ‫أ م‬ Android World


  ‫ل !ات   ا ك ان ه  و‬# ‫ا‬$  ‫ وه‬Is a free Mobile MM
Working with GData APIs: How to Install the Android SDK www.Inzar.com/ArabicVideos Download & Play!
Youtube on Android? on Windows XP www.playandroid.c

10 Open Source Android Apps Making a custom Android


which every Android developer button using a custom view
must look into Flipping Your Views
More Animations, Part 2

Android Core Menu


Android Applications Tutorial: Intent
Android Market Apps OMAP MID Platform
Android News Find your favorite Android apps from the MID Solution based on TI OMAP3530 Supports
Android Tutorials Android Market! for Android and WinCE
www.androidpit.com/market www.armkits.com
Android Books
Android Videos 13.0 Intent
Android Resources
13.1 Explicit Intent
Android Download
13.2 Implicit Intent

Members 13.3 Launching a Peer Activity

13.4 Intent Tabs


Username

Password 13.0. Intent


Intent is basically a message that is passed between components (such as Activities
Remember Me Receivers, and Content Providers). So, it is almost equivalent to parameters pas
Login fundamental differences between API calls and intents' way of invoking components are:

Forgot your password? API calls are synchronous while intent-based invocations are asynchronous.
Forgot your username?
API calls are compile time binding while intent-based calls are run-time binding
Create an account
Of course, Intents can be made to work exactly like API calls by using what are called
will be explained later. But more often than not, implicit intents are the way to go
Syndication here.
One component that wants to invoke another has to only express its' intent to do
Subscribe to this Feed component that exists and has claimed that it can do such a job through intent-filt
android platform to accomplish the job. This means, both the components are not
existence and can still work together to give the desired result for the end-user.
This invisible connection between components is achieved through the combination
the android platform.
This leads to huge possibilities like:
Programming
The latest & greatest Mix and match or rather plug and play of components at runtime.
in parallel computing.
Replacing the inbuilt android applications with custom developed applications.
Visit our expert blog!
www.drdobbs.com/Go-Parallel Component level reuse within and across applications.

Service orientation to the most granular level, if I may say.


Eclipse J2EE IDE Here is additional description about intent, almost formal.
Comprehensive An intent is an abstract description of an operation to be performed. It can be used with
Solution & Support an Activity, broadcastIntent to send it to any interested BroadcastReceiv
Only $29.95 - startService(Intent) or bindService(Intent, ServiceConnection, int) to communic
Download Free Trial Service.
www.myeclipseide.com An Intent provides a facility for performing late runtime binding between the code in di
androidcore.com/…/627.html 1/11
28/03/2011 Android Applications Tutorial: Intent
An Intent provides a facility for performing late runtime binding between the code in di
most significant use is in the launching of activities, where it can be thought of as the glu
Android is basically a passive data structure holding an abstract description of an action to be p
Notification SDK pieces of information in an intent are:
Developers Add action
Notifications In <10
The general action to be performed, such as ACTION_VIEW, ACTION_EDIT, ACTION_MA
Min. Fast, Flexible &
Free SDK data
hub.buzzbox.com
The data to operate on, such as a person record in the contacts database, expressed as a

Web/XML Appl. All Android components that wish to be notified via intents should declare intent filters
Generator which intents should go to that component. So, we need to add intent-fil
AndroidManifest.xml file. It looks something like this:
NARM/Network
Application Rendering <?xml version="1.0" encoding="utf-8"?>
Model <manifest xmlns:android=
www.bitech-factory.ch
"http://schemas.android.com/apk/res/android"
Killer Android package="com.bogotobogo.myContacts"
Tweet App
android:versionCode="1"
Killer App with new
android:versionName="1.0">
Live Preview That
<application android:icon="@drawable/icon"
Shows Links In
Tweets-Free android:label="@string/app_name">
www.Twidroyd.com <activity android:name=".myContacts"
android:label="@string/app_name">
<intent-filter>
Latest Comments <action android:name=
"android.intent.action.MAIN" />
ashikch
<category
Bounce Animation
android:name="android.intent.category.LAUNCHER" />
some error!! - I understood the </intent-filter>
code ... </activity>
Aneev </application>
How to Install the A... <uses-sdk android:minSdkVersion="7" />

<uses-permission android:name=
Aneev "android.permission.READ_CONTACTS"/>
10 Open Source Andro... </manifest>
how to compile a code on android.
tel... Note that intent-filter element is under the activity element. In the file, we are declar
JOHNSInez (1) the main activity for this application and (2) the activity is in the LAUNCHER catego
icon in the Android menu. Because this activity is the main one for the application, An
Compile Android kern...
component it should launch when someone chooses the application from the main menu.
reply this topic - We encourage Once we have our intent, we need to pass it to Android and get the child activity to laun
you y... options:
EvangelineVincent33 Call startActivity() with the Intent. This will cause Android to find the best matchin
How to implement you... intent to the activity for handling. The activity will not be informed when the child activit
re - All people deserve wealthy life Call startActivityForResult(), passing it the intent and a number which is unique
... Android will find the best matching activity and pass the intent over to the activity. The
when the child activity is complete via onActivityResult() callback.

13.1 Explicit Intent


In an explicit intent, we actually specify the activity that is required to respond to the
we explicitly designate the target component. This is typically used for application interna
In an implicit intent, the main power of the android design, we just declare an inte
platform to find an activity that can respond to the intent. Here, we do not declare the
hence is typically used for activating components of other applications seamlessly
Let's look at our example:
This example has 2 activities:
InvokingActivity

InvokedActivity
The InvokingActivity has a button "Invoke Next Activity" which when clicke
InvokedActivity class. The relevant part of the code is here:
androidcore.com/…/627.html 2/11
28/03/2011 Android Applications Tutorial: Intent
InvokedActivity class. The relevant part of the code is here:

Button invokingButton = (Button)findViewById(R.id.invokebutton);


invokingButton.setOnClickListener(new OnClickListener() {

public void onClick(View v) {


Intent explicitIntent = new
Intent(InvokingActivity.this,InvokedActivity.class);
startActivity(explicitIntent);
}
});

The layout for InvokingActivity is defined in /res/main.xml:

and for InvokedActivity in /res/invokedactivity.xml.


Here are our java code, InvokingActivity.java:

package com.bogotobogo.explicitintent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class InvokingActivity extends Activity {


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

Button invokingButton = (Button)findViewById(R.id.invokebutton);


invokingButton.setOnClickListener(new OnClickListener() {

public void onClick(View v) {


Intent explicitIntent = new
Intent(InvokingActivity.this,InvokedActivity.class);
startActivity(explicitIntent);
}
});
}
}

and InvokedActivity.java:

package com.bogotobogo.explicitintent;

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

public class InvokedActivity extends Activity {


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

androidcore.com/…/627.html 3/11
28/03/2011 Android Applications Tutorial: Intent

Files used in this Explicit Intent example, ExplicitIntent.zip

In the next section, we will see how to work with implicit intents which also needs us
filters.

13.2 Implicit Intent


In the previous section, we learned how to use Explicit Intents to invoke activities
example. Now, we will move on to a more interesting concept of Implicit Intents and

As described earlier, an implicit intent does not name a target component that shou
Android resolves as to which component is best suited to respond to an Implicit Intent

Basically, an Intent object has the following information (among other things like Compo
flags) which is of interest for implicit intents:

Action

Category

Data

So, Android compares the three (action, category and data) to something called Intent F
androidcore.com/…/627.html 4/11
28/03/2011 Android Applications Tutorial: Intent
by probable target components who are willing to accept Implicit Intent calls. i.e. Inten
any component to advertise its own capabilities to the Android system. This is don
AndroidManifest.xml file.

So here are some important points to remember:

1. Implicit Intents do not specify a target component.

2. Components willing to receive implicit intents have to declare their ability to han
declaring intent filters.

3. A component can declare any number of Intent Filters.

4. There can be more than one component that declares the same Intent Filters
the same implicit intent. In that case, the user is presented both the compone
choose which one he wants to continue with.

5. We can set priorities for the intent filters to ensure the order of responses.

There are 3 tests conducted in order to match an intent with intent filters:

1. Action Test

2. Category Test

3. Data Test

Finally, we'll look at declaring an implicit intent in one activity which will invoke one of the
platform by matching the intent filters declared by the same.

The ImplicitIntent Activity creates an implicit intent object contacts. This intent object'
However, the action is set to android.content.intent.ACTION_VIEW and
People.CONTENT_URI.

Such an intent matches with the intent filter declared by the view contacts native activity.

So, when we run this application, it displays the native UI for viewing the existing contact

Here is the relevant piece of code for the same:

Button viewContacts = (Button)findViewById(R.id.ViewContacts);

viewContacts.setOnClickListener(new OnClickListener() {

public void onClick(View v) {


Intent contacts = new Intent();
contacts.setAction(android.content.Intent.ACTION_VI
contacts.setData(People.CONTENT_URI);
startActivity(contacts);
}
});

In this manner many of the native applications can be seamlessly invoked as one o
applications through implicit intents.

Here are our Java code, ImplicitIntent.java:

package com.bogotobogo.implicitintent;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

androidcore.com/…/627.html 5/11
28/03/2011 Android Applications Tutorial: Intent

public class ImplicitIntent extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ViewContacts();

private void ViewContacts() {


try {
Button viewContacts = (Button)findViewById(R.id.ViewContacts);

viewContacts.setOnClickListener(new OnClickListener() {

public void onClick(View v) {


Intent contacts = new Intent();
contacts.setAction(android.content.Intent.ACTION_VI
contacts.setData(People.CONTENT_URI);
startActivity(contacts);
}
});
}catch (ActivityNotFoundException anfe) {
Log.e("ViewContacts","Viewing of Contacts failed", anfe);
}
}
}

androidcore.com/…/627.html 6/11
28/03/2011 Android Applications Tutorial: Intent

Files used in this Implicit Intent example, ImplicitIntent.zip

13.3 Launching a Peer Activity


In this example, we'll have two fields for the latitude and longitude, and a button asking a
Here is the layout:

<?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">
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1,2">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="2dip"
android:paddingRight="4dip"
android:text="Location:"/>
<EditText android:id="@+id/lat"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:editable="true"
android:singleLine="true"
android:layout_weight="1"/>
<EditText android:id="@+id/lon"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:editable="true"
android:singleLine="true"
android:layout_weight="1"/>
</TableRow>
</TableLayout>
<Button android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Show me the map!"/>
</LinearLayout>

Our Java code:

package com.bogotobogo.Launch;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
androidcore.com/…/627.html 7/11
28/03/2011 Android Applications Tutorial: Intent
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Launch extends Activity {


private EditText lat;
private EditText lon;

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

Button btn=(Button)findViewById(R.id.map);
lat=(EditText)findViewById(R.id.lat);
lon=(EditText)findViewById(R.id.lon);

btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String _lat=lat.getText().toString();
String _lon=lon.getText().toString();
Uri uri=Uri.parse("geo:"+_lat+","+_lon);

startActivity(new Intent(Intent.ACTION_VIEW
}
});
}
}

The button's OnClickListener takes the latitude and longitude, put them into geo scheme

Uri uri=Uri.parse("geo:"+_lat+","+_lon);

Then, starts the activity after creating an intent requesting to view this Uri (ACTION_VIEW

startActivity(new Intent(Intent.ACTION_VIEW, uri));

androidcore.com/…/627.html 8/11
28/03/2011 Android Applications Tutorial: Intent

13.4 Intent Tabs


In this section, we'll have a tab browser using an Intent. Each tab will launch its own br
Android's tab-management framework the Activity's UI into each tab.

Here is the source for our main activity which is hosting the TabView, IntentTab.java:

package com.bogotobogo.intenttab;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TabHost;

public class IntentTab extends TabActivity {


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

TabHost host=getTabHost();

host.addTab(host.newTabSpec("one").setIndicator("BoGoToBoGo
setContent(new Intent(this, BoGoBrowser.class)));
host.addTab(host.newTabSpec("two").setIndicator("Android").
setContent(new Intent(this, AndroidBrowser.class)))
}
}

Here, we are using TabActivity as the base class, and so we don't have to use our own la
TabActivity supplies it for us. So, we just get access to the TabHost and add two tabs
Intent that directly refers to another class: BoGoBrowser and AndroidBrowser, respectively

Other sources we need are:

BoGoBrowser.java:

package com.bogotobogo.intenttab;

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

public class BoGoBrowser extends Activity {


WebView browser;

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);

browser=new WebView(this);
setContentView(browser);
browser.loadUrl("http://bogotobogo.com");
androidcore.com/…/627.html 9/11
28/03/2011 Android Applications Tutorial: Intent
browser.loadUrl("http://bogotobogo.com");
}
}

AdroidBrowser.java:

package com.bogotobogo.intenttab;

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

public class AndroidBrowser extends Activity {


WebView browser;

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);

browser=new WebView(this);
setContentView(browser);
browser.loadUrl("http://www.android.com/");
}
}

One more thing, we need to add the following lines to AndroidManifest.xml.

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


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

So, the manifest file should look like this:

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


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bogotobogo.intenttab"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_n
<activity android:name=".IntentTab"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /
</intent-filter>
</activity>
<activity android:name=".BoGoBrowser" />
<activity android:name=".AndroidBrowser" />
</application>
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

androidcore.com/…/627.html 10/11
28/03/2011 Android Applications Tutorial: Intent

Source: bogotobogo

Bookmark with:

Comments (0)
Only registered users can write comments!
Powered by !JoomlaComment 4.0 beta2

Android Core - Android Tutorial, Powered by Joomla!

androidcore.com/…/627.html 11/11

Você também pode gostar