Skip to content

Latest commit

 

History

History
104 lines (85 loc) · 4.88 KB

File metadata and controls

104 lines (85 loc) · 4.88 KB

Intents

Intent Overview

An Intent is a messaging object used for communication between different components of an Android application. It serves three fundamental use cases:

Hpw Intents Works

  1. Starting an Activity:
    • Represents a single screen in an app.
    • New instances are started by passing an Intent to startActivity().
    • startActivityForResult() is used for receiving results from the activity.
  2. Starting a Service:
    • A background component performing operations without a user interface.
    • Started using startService() for one-time operations.
    • bindService() is used for a client-server interface interaction.
  3. Delivering a Broadcast:
    • A message that any app can receive.
    • System delivers broadcasts for various events.
    • Delivered using sendBroadcast() or sendOrderedBroadcast().

Intent Types

Explicit Intents

  • Specify the exact component (activity or service) that will satisfy the intent.
  • Uses a full ComponentName or Package Name to specify the target.
  • Typically used for starting components within the same app.
// Explicit Intent to start another activity within the same app
Intent explicitIntent = new Intent(CurrentActivity.this, TargetActivity.class);
explicitIntent.putExtra("key", "value"); // Optional: Adding extra data
startActivity(explicitIntent);

Implicit Intents

  • Do not specify a specific component but declare a general action to perform.
  • Allow components from other apps to handle the intent.
  • Used when the exact component is unknown or when interacting with other apps.
// Implicit Intent to open a webpage using a browser
String url = "https://www.example.com";
Intent implicitIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(implicitIntent);

Intent Components

  1. Name:
    • Definition: The name of the component (activity, service) that the intent is targeting.
    • Usage: In explicit intents, specifies the exact component to be invoked.
  2. Action:
    • Definition: Describes the requested action to be performed by the targeted component.
    • Usage: Specifies the type of operation, such as viewing, sending, or opening.
  3. Data:
    • Definition: Represents the data to be operated upon by the targeted component.
    • Usage: Contains a URI or data type that helps define the context of the action.
  4. Category:
    • Definition: Describes additional information about the kind of component that should handle the intent.
    • Usage: Categorizes the intent for better filtering by the system.
  5. Extras:
    • Definition: Carries additional key-value pairs providing extended information.
    • Usage: Used for passing extra data between components, enhancing the intent's payload.

Intent Filters

  • Definition: Expressions in an app's manifest file specifying the type of intents a component would like to receive.
  • Use Cases:
    • Declaring an intent filter for an activity allows other apps to directly start that activity.
    • Components without intent filters can only be started with explicit intents.

Notes on Intent Filters and android:exported Attribute

  • android:exported Attribute:
    • Set explicitly in each app component's <intent-filter> element.
    • Indicates the accessibility of the app component to other apps.
    • For activities with LAUNCHER category, set to true; otherwise, set to false for safety.
    • Warning: Android 12 or higher requires explicit setting; failure may result in app installation issues.
  • Elements:
    • Specify the type of intents accepted within the <intent-filter> using three elements:
      • <action>: Declares the accepted intent action.
      • <data>: Declares the accepted data type, specifying URI aspects and MIME type.
      • <category>: Declares the accepted intent category.
  • Implicit Intents and CATEGORY_DEFAULT:
    • To receive implicit intents, include the CATEGORY_DEFAULT category in the intent filter.
    • startActivity() and startActivityForResult() treat all intents as if they have CATEGORY_DEFAULT.
    • Failure to declare this category results in no resolution for implicit intents.
  • Example:
    • Activity declaration with an intent filter to receive ACTION_SEND intent with text MIME type:

      <activity android:name="ShareActivity" android:exported="false">
          <intent-filter>
              <action android:name="android.intent.action.SEND"/>
              <category android:name="android.intent.category.DEFAULT"/>
              <data android:mimeType="text/plain"/>
          </intent-filter>
      </activity>

Understanding intent filters, the android:exported attribute, and proper declaration is crucial for secure and effective communication between Android app components.