`
xiehongdong
  • 浏览: 69021 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android-Intent和PendingIntent的关系

阅读更多
Intent和PendingIntent的关系
Intent和PendingIntent的关系越看越迷惑,花了一段时间分析Android的JavaDoc终于有点心得,在此与大家分享:
Intent是一个意图,一个描述了想要启动一个Activity、Broadcast或是Service的意图。它主要持有的信息是它想要启动的组件(Activity、Broadcast或是Service)。
PendingIntent可以看作是对Intent的包装。供当前App之外的其他App调用。有点“被动”或是“Callback”的意思,但不是严格意义上的“被动”或是“Callback”。总之,当前App不能用它马上启动它所包裹的Intent。而是在外部App执行这个 PendingIntent时,间接地、实际地调用里面的Intent。PendingIntent主要持有的信息是它所包装的Intent和当前App 的Context。正由于PendingIntent中保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前 App一样的执行PendingIntent里的Intent,就算在执行时当前App已经不存在了,也能通过存在PendingIntent里的 Context照样执行Intent。
比较难理解,希望大家多提意见!

Java代码 复制代码 收藏代码
  1. Notification n = new Notification(R.drawable.face_1, "Service启动", System.currentTimeMillis());   
  2. PendingIntent contentIntent = PendingIntent.getActivity(this0new Intent(this, TServiceHolder.class), 0);   
  3. n.setLatestEventInfo(this"任务标题""任务内容", contentIntent);   
  4. nManager.notify(NOTIFICATION_ID, n); // 任务栏启动  
Notification n = new Notification(R.drawable.face_1, "Service启动", System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TServiceHolder.class), 0);
n.setLatestEventInfo(this, "任务标题", "任务内容", contentIntent);
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动

PendingIntent和Intent的区别:An Intent is something that is used right now; a PendingIntent is something that may create an Intent in the future. You will use a PendingIntent with Notifications, AlarmManager, etc.

1. GSM网络中android发送短信示例

(1)代码节选
Java代码 复制代码 收藏代码
  1. String msg ="你好,美女";   
  2. String number = "135****6784";   
  3. SmsManager sms = SmsManager.getDefault();   
  4.   
  5. PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);   
  6. sms.sendTextMessage(number, null, msg, pi, null);   
  7. Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show();  
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();

PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show();

(2)代码解释

      PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情 (By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself,就相当于PendingIntent代表了Intent)。本例中别的程序就是发送短信的程序,短信发送成功后要把intent广播出去 。
      函数SmsManager.sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)中参数解释:
      1)PendingIntent sentIntent:当短信发出时,成功的话sendIntent会把其内部的描述的intent广播出去,否则产生错误代码并通过 android.app.PendingIntent.OnFinished进行回调,这个参数最好不为空,否则会存在资源浪费的潜在问题;
      2)PendingIntent deliveryIntent:是当消息已经传递给收信人后所进行的PendingIntent广播。
      查看PendingIntent 类可以看到许多的Send函数,就是PendingIntent在进行被赋予的相关的操作。
分享到:
评论

相关推荐

    自制发送短信程序--SmsManager与PendingIntent类的使用

    这个程序的核心在于使用`SmsManager`类和`PendingIntent`类。本文将详细介绍这两个关键类的使用方法以及如何结合它们来实现短信发送功能。 首先,`SmsManager`是Android SDK提供的一种系统服务,用于处理短信的发送...

    实现可定时响起的闹钟----PendingIntent 与 AlarmManager 的运用

    这就涉及到`PendingIntent`和`AlarmManager`两个关键组件。本文将深入探讨如何利用这两个组件来实现一个可定时响起的闹钟功能。 首先,`AlarmManager`是Android系统中的一个服务,用于安排在未来某一时刻启动或重复...

    Android代码-Intent切换.zip

    本压缩包"Android代码-Intent切换.zip"很可能包含了一些关于如何使用Intent进行界面跳转和数据传递的示例代码。 Intent主要分为显式Intent和隐式Intent两种类型。显式Intent明确指定了要启动的目标组件,通常在同一...

    Android 之 PendingIntent用法介绍

    当创建PendingIntent时,会根据提供的Intent和Flag来决定哪些应用可以触发这个Intent,以及如何触发。这种设计使得我们可以放心地将PendingIntent传递给第三方应用,如通知系统或闹钟服务。 PendingIntent的创建...

    安卓之 (解决问题)PendingIntent和Intent的区别1

    在Android开发中,Intent和PendingIntent是两个非常重要的概念,它们在组件间的通信中起到关键作用。Intent可以理解为一种消息传递对象,用于在不同组件之间传递行为和数据,而PendingIntent则是Intent的一种封装,...

    android 服务 Service PendingIntent 通知

    `PendingIntent`是Android中的一个关键类,它代表一个意图(Intent)的动作,可以在未来的某个时刻由系统或者其他应用触发。`PendingIntent`主要用于跨进程通信,例如在通知(Notification)中使用,当用户点击通知...

    Android中pendingIntent的深入理解

    1. **创建PendingIntent**: 应用通过Intent和Flags参数创建PendingIntent实例。 2. **传递给外部组件**: 将PendingIntent传递给其他应用或系统服务,如NotificationManager。 3. **外部组件请求执行**: 当外部组件...

    Android中pendingIntent与Intent的深入分析

    在Android开发中,Intent和PendingIntent是两个非常关键的概念,它们在应用程序的组件间通信中起着重要作用。Intent主要用于启动或传递数据给另一个组件,如Activity、Service或BroadcastReceiver,而PendingIntent...

    Android Intent

    在Android开发中,Intent是一个非常核心且至关重要的概念。Intent被设计用来在应用程序的不同组件之间进行通信,也可以用于启动服务或者广播数据。本教程将深入探讨Intent的基本使用和功能,帮助初学者理解这一基础...

    Android Studio 实验二:Intent的使用

    本实验将深入探讨Android Studio中Intent的使用,帮助你更好地理解如何在不同的Activity之间跳转和传递信息。 首先,让我们了解Intent的基本概念。Intent分为两种类型:显式Intent和隐式Intent。显式Intent用于启动...

    Android应用源码之Intent1_Intent.zip

    Intent1_Intent.zip中的源码应该包含了关于Intent的实例和使用方法,让我们一起深入探讨Intent在Android应用中的作用、类型、创建与传递、以及常见用法。 1. **Intent的作用** Intent的主要功能是启动一个活动...

    Notification的用法和PendingIntent使用

    Notification 和 PendingIntent 是 Android 中两种重要的机制,用于实现系统状态栏中的通知和指定操作的执行。在上面的代码中,我们学习了如何使用 Notification 和 PendingIntent 来实现一个简单的通知机制,并了解...

    Android编程实现PendingIntent控制多个闹钟的方法

    要用 android.app.PendingIntent.getBroadcast(Context context, int requestCode, Intent intent)来实现控制多个闹钟,关键点在于其中的一个参数requestCode. 举例说明如下: public void setClock(){ if(lva....

    android-module-intentutils,intentuils是一个小包装器,用于在意图打开时处理应用程序选择。.zip

    在Android应用开发中,Intent是连接各个组件(Activity、Service、BroadcastReceiver)的重要桥梁,它用于传递信息并启动这些组件。...对于任何使用Intent频繁的Android开发者来说,理解和使用这个库都能带来不少便利。

    Andriod Intent使用代码举例

    - Android系统会根据Intent的Action、Data和Category等信息,查找匹配的组件。 - `IntentFilter.matchUri(Uri uri)`:检查Uri是否匹配IntentFilter。 - `IntentFilter.matchAction(String action)`:检查Action...

    four_way_of_button.rar

    标题中的"four_way_of_button.rar"暗示了这是一个关于Android编程中按钮操作的实践项目,而描述中的"Android-Intent-练习源码"则表明这个压缩包包含的是与Android Intent相关的代码示例。Intent在Android系统中起着...

    android-broadcast学习

    在Android系统中,BroadcastReceiver(广播接收者)是四大组件之一,它负责监听并响应系统或应用程序发布的广播意图(Intent)。本学习资料主要围绕“android-broadcast”这一主题,适合初学者入门。以下是对Android...

    自制发送短信程序,android,SmsManager与PendingIntent

    import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; /*必需引用telephony.gsm.SmsManager类才能使用sendTextMessage()*/ import android.telephony.SmsManager; ...

    android开发范例大全第八章-与Intent接轨

    "android开发范例大全第八章-与Intent接轨"涵盖了大量的实战案例,旨在帮助开发者深入理解和熟练运用Intent。以下是基于这个主题的详细知识点讲解: 1. **Intent的基本概念**:Intent是一种意图声明,表示一个动作...

    Android中PendingIntent的简要介绍.pdf

    总之,PendingIntent是Android系统中一个强大的工具,它使得Intent的操作可以跨越时间和空间,为应用程序的交互和扩展提供了极大的便利。理解和熟练运用PendingIntent,对于开发高质量的Android应用至关重要。

Global site tag (gtag.js) - Google Analytics