Hot File

Introduction to Intents in Android

View: 213    Dowload: 0   Comment: 0   Post by: hanhga  
Author: none   Category: Android   Fields: Other

9 point/3 review File has been tested

Intents are basically a message-passing mechanism provided in Android, and are asynchronous in nature. One component can send Intent to another component to request for a particular functionality or feature.

Introduction

Android Intents are basically a message-passing mechanism provided in Android, and are asynchronous in nature. One component can send Intent to another component to request for a particular functionality or feature. To take an example, an email reader application might send an intent to another activity, which might take the user name and password from the user perform user validation.

Types of Intents in Android

Explicit Intent

In explicit intent, the sender on the intent explicitly mentions the component that should receive the intent. This can be done using the Java class identifier.

Implicit Intent

In implicit intent, the sending component does not exactly specify the receiving component, the sending component will just mention the action that needs to be performed. The sending component may optionally send additional URI and data with the intent.

Different components can register themselves for being the receiver of intents by giving and intent filter tag in their AndroidManifest.xml

How to use Intents to call native Android Application

Native Android apps also use intents. You can even pass intents from your application to launch and use some native Android applications, like the dialer or web browser.

Now, we’re going to look at an application in which we will create an activity. In the activity we will take sms text and the number from the user.

Then we will launch the sms application by passing an intent to the Android system. We will pass the number and sms message to the sms application.

Step 1. Creating the Layout and UI.

For this we first create an activity called as LaunchIntentActivity, then we create a layout as follows.

<?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="Message Text:"
/>
<EditText android:id="@+id/messageText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:editable="true"
android:singleLine="true"
android:layout_weight="1"
/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="2dip"
android:paddingRight="4dip"
android:text="Recipient Number"
/>
<EditText android:id="@+id/messageNumber"
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/show"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Show Message!"
android:onClick="showMessage"
/>
</LinearLayout>

Here, we have first created a linear layout, added two TextView and two EditText to display to the user, and to take the number and the text of the sms from the user. I have also created a button called as showMessage on click of which showMessage function will be called.

The following is the code for the activity.

package launchIntent.com;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class LaunchIntentActivity extends Activity {
 private EditText messageText;
 private EditText messageNumber;
 @Override
 public void onCreate(Bundle icicle) {
 super.onCreate(icicle);
 setContentView(R.layout.main);
 messageText=(EditText)findViewById(R.id.messageText);
 messageNumber=(EditText)findViewById(R.id.messageNumber);
 }
 public void showMessage(View v) {

 String _messageText=messageText.getText().toString();
 String _messageNumber=messageNumber.getText().toString();
 
 Intent sendIntent = new Intent(Intent.ACTION_VIEW);
 sendIntent.setData(Uri.parse("sms:"+_messageNumber));
            sendIntent.putExtra("sms_body", _messageText); 
            startActivity(sendIntent);
 }
}

Step 2. Initialization for the Activity

In the onCreate function, we set the main layout which we created as the content view. Then we have two private members for each of the EditText that we have.

public void onCreate(Bundle icicle) {
 super.onCreate(icicle);
 setContentView(R.layout.main);
 messageText=(EditText)findViewById(R.id.messageText);
 messageNumber=(EditText)findViewById(R.id.messageNumber);
 }

The UI of the Activity will look like this:

intent_app_emulator

Step 3. Sending the Intent

On the click of the Show Message button the showMessage function is called.

public void showMessage(View v) {

 String _messageText=messageText.getText().toString();
 String _messageNumber=messageNumber.getText().toString();
 
 Intent sendIntent = new Intent(Intent.ACTION_VIEW);
 sendIntent.setData(Uri.parse("sms:"+_messageNumber));
            sendIntent.putExtra("sms_body", _messageText); 
            startActivity(sendIntent);
 }

In this we get the values entered by the user and store them in string variables.

Then we create a ACTION_VIEW intent, and pass it the URI as sms:Number the user entered.

In intents we can add extra data which will be passed to the recipient of the Intent. This is done through the putExtra method on the intent. We add the extra data called as sms_body and pass the data which the user entered.

Then we send the intent using the startActivity function and passing it the intent object.
This will launch the sms application with the number and message already pre filled with the values we sent as shown below.

How to catch some native Android action using intents

As stated above, all the events which occur in the Android system are communicated through intents. So you can register your application to be launched when a specific event happens. You can register you activity to service an intent by adding the intent-filter tag under the activity tag in the AndroidManifest.xml.

We are now going to write and activity which will be called whenever a contact is to be sent an sms.

Step. 1 Create the CatchSmsIntent Activity

First we need to create a simple activity which we will register to be launched when a contact is suppose to be smsed.

package catchSmsIntent.com;

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

public class CatchSmsIntent extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //-----------------------------------
        //Code to handle the sms
        //-----------------------------------
    }
}

Step 2. Add the intent-filter

Open the AndroidManifest.xml file and, under the activity, add the tag to catch the actionandroid.intent.action.SENDTO.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="catchSmsIntent.com"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".CatchSmsIntent"
                  android:label="@string/app_name">
           <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           <intent-filter>
 <action android:name="android.intent.action.SENDTO" />
 <category android:name="android.intent.category.DEFAULT" />
 <data android:scheme="sms" />
 <data android:scheme="smsto" />
 </intent-filter>
        </activity>

    </application>

</manifest>

When we add this intent filter we register our activity with the android system that our application is to be launched when a contact is supposed to be Text Messaged.

From the contacts, select Text Contact.

This will launch the android application chooser with CatchSmsIntent as also one of the options as shown below.

intents_4

Using Intents to communicate between two specific Activities (Explicit Intents)

As described earlier, explicit intents are intent where you specify the exact receiver of the intent. Hence intents can be used to pass message and data between two activities.

Now we are going to see this in the following program. In this program we are going to create two activities. The first activity creates two EditText to take two numbers from the user. Then it will pass these numbers through an intent which will ask user which operation he wants to perform. The operations supported are add and sub which add or subtract the two numbers respectively.

Step 1. The calling activity

The code for the calling activity is as follows.

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class CallingActivity extends Activity {
    /** Called when the activity is first created. */
 private EditText number1;
 private EditText number2;
 private static final int REQUEST_CODE = 10;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        number1=(EditText)findViewById(R.id.number1);
        number2=(EditText)findViewById(R.id.number2);
    }
    public void getOperation(View v) {
 String _number1=number1.getText().toString();
 String _number2=number2.getText().toString();
 Intent i = new Intent(this, CalledActivity.class);
 i.putExtra("number1", _number1);
 i.putExtra("number2", _number2);
 // Set the request code to any code you like, you can identify the
 // callback via this code
 startActivityForResult(i, REQUEST_CODE);
 }
    
    @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
 if (data.hasExtra("result")) {
 Toast.makeText(this, data.getExtras().getString("result"),
 Toast.LENGTH_SHORT).show();
 }
 }
 }
}

This activity creates two EditText to take two numbers and one button.

In pressing the button, the function getOperation is called.

public void getOperation(View v) {
 String _number1=number1.getText().toString();
 String _number2=number2.getText().toString();
 Intent i = new Intent(this, CalledActivity.class);
 i.putExtra("number1", _number1);
 i.putExtra("number2", _number2);
 // Set the request code to any code you like, you can identify the
 // callback via this code
 startActivityForResult(i, REQUEST_CODE);
 }

In this function first the values the user entered are taken into variables. Then we have to create intent with the second parameter as CalledActivity.class which is the Java class identifier of the second activity which we will create. This will be the receiver of the intent.
The two numbers are passed to the CalledActivity within the intent using the putExtra method.

Then we call the function startActivityForResult with the intent and a request code. When the second activity has finished servicing the intent then it will call the onActivityResult of the current activity with the same request code as to identify that the returned result is for this intent.

Step 2. The called Activity

The following is the code for the called activity.

package explicitIntents.com;


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


public class CalledActivity extends Activity {
    /** Called when the activity is first created. */
 private EditText operation;
 private String value1;
 private String value2;
 private String result;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calledactivitylayout);
        operation=(EditText)findViewById(R.id.operation);
        
        Bundle extras = getIntent().getExtras();
 if (extras == null) {
 return;
 }
 value1 = extras.getString("number1");
 value2 = extras.getString("number2");
 
    }
    public void setOperation(View v) {
     
     String _operation = operation.getText().toString();
     
     if( _operation.equals("add") )
     {
     int answer  = Integer.parseInt(value1) + Integer.parseInt(value2);
     result = "" + answer;
     }
     else if( _operation.equals("sub") )
     {
     int answer  = Integer.parseInt(value1) - Integer.parseInt(value2);
     result = "" + answer;
     }
     // Other operations ........ can be added here
               
     finish();
 }
    
    @Override
 public void finish() {
 Intent data = new Intent();
 data.putExtra("result", result);
 setResult(RESULT_OK, data);
 super.finish();
 }
}

The called activity in the onCreate gets the values passed to it in the intent using the functiongetIntent().getExtras();

It also sets the layout with one EditText and one button on click of it the function setOperation is called. In this the operation value 

which the user has entered is taken and appropriate result is stored in the member variable result.

Then the function finish is called which creates a new intent to send the result back to the CallingActivity by calling the setResult and passing the intent to it.

Step 3. Getting the Result

When the called activity returns the function onActivityResult is called with the Request code, result code and the intent.

@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
 if (data.hasExtra("result")) {
 Toast.makeText(this, data.getExtras().getString("result"),
 Toast.LENGTH_SHORT).show();
 }
 }
 }
}

Here we check if the result is OK and the the request code is the one we sent with the intent.

Then we get the result back from the intent using the functiondata.getExtras().getString("result") and pass it to a Toast to show the result to the user.

This is how explicit intents can be used to pass data and get results between activities.

Introduction to Intents in Android

Introduction to Intents in Android Posted on 20-04-2016  Intents are basically a message-passing mechanism provided in Android, and are asynchronous in nature. One component can send Intent to another component to request for a particular functionality or feature. 3/10 213

Comment:

To comment you must be logged in members.

Files with category

  • How to Monetizing Apps with the Google AdMob SDK

    View: 291    Download: 0   Comment: 0   Author: none  

    How to Monetizing Apps with the Google AdMob SDK

    Category: Android
    Fields: Other

    4.75/2 review
    AdMob is a mobile advertising platform from Google that developers can use to generate revenue from apps through in-app advertising. AdMob provides different sets of ads like banner ads, interstitial ads, video ads, or native ads integrated with...

  • How to Securing Your Android Apps with the Fingerprint API

    View: 214    Download: 0   Comment: 0   Author: none  

    How to Securing Your Android Apps with the Fingerprint API

    Category: Android
    Fields: Other

    5/1 review
    Passwords have had their day, with software vendors and hardware manufacturers encouraging users to try other methods of securing their data. Fingerprint readers are becoming more common on Android devices since Marshmallow introduced a new...

  • Transfer Data between Activities with Android Parcelable with android

    View: 515    Download: 0   Comment: 0   Author: none  

    Transfer Data between Activities with Android Parcelable with android

    Category: Android
    Fields: Other

    0/0 review
    An Android app typically consists of more than one activity that need to pass data between each other. For example a primary activity with a list of elements and a corresponding secondary activity to show the details of these elements

  • Optimize Your Java Code with Android Butter Knife

    View: 409    Download: 0   Comment: 0   Author: none  

    Optimize Your Java Code with Android Butter Knife

    Category: Android
    Fields: Other

    1.5/3 review
    Creating code can sometimes be frustrating. Developers have to deal with redundant coding that is visually unattractive.

  • How to Use React Native to a Create a Face Recognition App

    View: 318    Download: 0   Comment: 0   Author: none  

    How to Use React Native to a Create a Face Recognition App

    Category: Android
    Fields: Other

    2.25/2 review
    nce you have signed up for an account, login and click on the search icon at the top of the screen and search for ‘cognitive services’. From the dropdown that shows, click on Cognitive Services accounts (preview) and you should see the following...

  • How to Authenticating Users via OAuth with Cordova and Ionic

    View: 114    Download: 0   Comment: 0   Author: none  

    How to Authenticating Users via OAuth with Cordova and Ionic

    Category: Android
    Fields: Other

    0/0 review
    You will need to install Cordova (I recommend SitePoint’s QuickTip) and the Ionic framework (again, I recommend SitePoint’s QuickTip)

  • Make Access Platform APIs with React Native Modules

    View: 21987    Download: 0   Comment: 0   Author: none  

    Make Access Platform APIs with React Native Modules

    Category: Android
    Fields: Other

    4.5/1 review
    SitePoint has a full guide for installing React Native available here. Once it’s installed, create a new project with the following command

  • Build Animating an Android Floating Action Button

    View: 343    Download: 0   Comment: 0   Author: none  

    Build Animating an Android Floating Action Button

    Category: Android
    Fields: Other

    4.5/1 review
    The Floating Action Button looks something like this in a layout file and will be auto generated if create an Android Studio project with a Blank Activity:

 
Newsletter Email

File suggestion for you

File top downloads

logo codetitle
Codetitle.com - library source code to share, download the file to the community
Copyright © 2015. All rights reserved. codetitle.com Develope by Vinagon .Ltd