Android uses Intent for communicating between the components of an Application and also from one application to another application.
Intent are the objects which is used in android for passing the information among Activities in an Application and from one app to another also. Intent are used for communicating between the Application components and it also provides the connectivity between two apps.
For example: Intent facilitate you to redirect your activity to another activity on occurrence of any event. By calling, startActivity() you can perform this task.
Intent intent = new Intent(getApplicationContext(), SecondActivity.class); startActivity(intent);
In the above example, foreground activity is getting redirected to another activity i.e. SecondActivity.java. getApplicationContext() returns the context for your foreground activity.
Table Of Contents
Intent are of two types: Explicit Intent and Implicit Intent
Explicit Intent work internally within an application to perform navigation and data transfer. The below given code snippet will help you understand the concept of Explicit Intents
Intent intent = new Intent(getApplicationContext(), SecondActivity.class); startActivity(intent);
Here SecondActivity is the JAVA class name where the activity will now be navigated. Example with code in the end of this post will make it more clear.
Let’s take an example to understand Implicit Intents more clearly. We have to open a website using intent in your application. See the code snippet given below
Intent intentObj = new Intent(Intent.ACTION_VIEW); intentObj.setData(Uri.parse("https://www.abhiandroid.com")); startActivity(intentObj);
Unlike Explicit Intent you do not use any class name to pass through Intent(). In this example we has just specified an action. Now when we will run this code then Android will automatically start your web browser and it will open AbhiAndroid home page.
Let’s implement Intent for a very basic use. In the below example we will Navigate from one Activity to another and open a web homepage of AbhiAndroid using Intent. The example will show you both implicit and explicit Intent together. Below is the final output:
Step 1: Let’s design the UI of activity_main.xml:
Below is the complete code of activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="If you click on Explicit example we will navigate to second activity within App and if you click on Implicit example AbhiAndroid Homepage will open in Browser" android:id="@+id/textView2" android:clickable="false" android:layout_alignParentTop="true" android:layout_alignParentStart="true" android:layout_marginTop="42dp" android:background="#3e7d02" android:textColor="#ffffff" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Explicit Intent Example" android:id="@+id/explicit_Intent" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="147dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Implicit Intent Example" android:id="@+id/implicit_Intent" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout>
Step 2: Design the UI of second activity activity_second.xml
Now lets design UI of another activity where user will navigate after he click on Explicit Example button. Go to layout folder, create a new activity and name it activity_second.xml.
Below is the complete code of activity_second.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:background="#CCEEAA" tools:context="com.example.android.intents.SecondActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="This is Second Activity" android:id="@+id/textView" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout>
Step 3: Implement onClick event for Implicit And Explicit Button inside MainActivity.java
Now we will use setOnClickListener() method to implement OnClick event on both the button. Implicit button will open AbhiAndroid.com homepage in browser and Explicit button will move to SecondActivity.java.
Below is the complete code of MainActivity.java
package com.example.android.intents; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { Button explicit_btn, implicit_btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); explicit_btn = (Button)findViewById(R.id.explicit_Intent); implicit_btn = (Button) findViewById(R.id.implicit_Intent); //implement Onclick event for Explicit Intent explicit_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getBaseContext(), SecondActivity.class); startActivity(intent); } }); //implement onClick event for Implicit Intent implicit_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.abhiandroid.com")); startActivity(intent); } }); } }
Step 4: Create A New JAVA class name SecondActivity
Now we need to create another SecondActivity.java which will simply open the layout of activity_second.xml . Also we will use Toast to display message that he is on second activity.
Below is the complete code of SecondActivity.java:
package com.example.android.intents; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Toast.makeText(getApplicationContext(), "We are moved to second Activity",Toast.LENGTH_LONG).show(); } }
Step 5: Manifest file:
Make sure Manifest file has both the MainActivity and SecondActivity listed it. Also here MainActivity is our main activity which will be launched first. So make sure intent-filter is correctly added just below MainActivity.
Below is the code of Manifest file:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.intents" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity" > </activity> </application> </manifest>
Output:
Now run the above program in your Emulator. The App will look like this:
Android uses Intents for facilitating communication between its components like Activities, Services and Broadcast Receivers.
Intent for an Activity:
Every screen in Android application represents an activity. To start a new activity you need to pass an Intent object to startActivity() method. This Intent object helps to start a new activity and passing data to the second activity.
Intent for Services:
Services work in background of an Android application and it does not require any user Interface. Intents could be used to start a Service that performs one-time task(for example: Downloading some file) or for starting a Service you need to pass Intent to startService() method.
Intent for Broadcast Receivers:
There are various message that an app receives, these messages are called as Broadcast Receivers. (For example, a broadcast message could be initiated to intimate that the file downloading is completed and ready to use). Android system initiates some broadcast message on several events, such as System Reboot, Low Battery warning message etc.
Whenever you need to navigate to another activity of your app or you need to send some information to next activity then we can always prefer to Intents for doing so.
Intents are really easy to handle and it facilitates communication of components and activities of your application. Moreover you can communicate to another application and send some data to another application using Intents.
Premium Project Source Code:
Implicit intents do not name a specific component, but instead declare a general action to perform, which allows a component from another app to handle it. For example, if you want to show the user a location on a map, you can use an implicit intent to request that another capable app show a specified location on a map.
Your answer:
In Implicit Intents we do need to specify the name of the component.
Appreciated for your wonderful tutorials.
Superb explanation …
Please post Life cycle of android and Database related examples.
Thanku sO much?…..