`

Android学习10-----Android组件通信 (6) PendingIntent

阅读更多

 

Intent 的主要功能是表示用户的一种操作意图,使用 Intent 之后将立即执行用户所有需要的操作,但是在 Android 中也提供了一个 PendingIntent 操纵,表示将要发生的操作。苏伟将要发生的 Intent 是指在当前的 Activity 不立即使用此 Intent 进行处理,而将此 Intent 封装后传递给其他 Activity 程序,而其他 Activity 程序在需要使用此 Intent 时才进行操作。

 

 

Intent :表示立刻执行;

PendintIntent :表示的是暂缓执行,遇到特殊条件才执行;

PendingIntent Intent 没有任何继承关系,所以这两个类表示两种不同的 Intent 操作,其方法和常量有:

No.

常量及方法

描述

1

Public static final int FLAG_CANCEL_CURRENT

重新生成一个新的 PendingIntent 对象

2

Public static final int FLAG_NO_CREATE

如果不存在 PendingIntent 对象,则创建一个新的

3

Public static final int FLAG_ONE_SHOT

创建的 PendingIntent 对象只使用一次

4

Public static final int FLAG_UPDATE_CURRENT

如果 PendingIntent 对象已经存在,则直接使用,并且实例化一个新的 Intent 对象

5

Public static PendingIntent getActivity(Context context,

Int requestCode,Intent intent,int flags)

通过 PendingIntent 启动一个新的 Activity

6

Public static PendingIntent getBroadcast(Context context,

Int requestCode,Intent intent,int flags)

通过 PendingIntent 启动一个新的 Broadcast

7

Public static PendingIntent getService(Context context,

Int requestCode,Intent intent,int flags)

通过 PendingIntent 启动一个新的 Service

Android 操作系统中,狠毒地方都要使用 PendingIntent 类,如发送一些用户的通知( Notification )或者为用户发送短信( SMS )等都会使用到此类。

一、发送通知: Notification

Androd.app.Notification Toast 类似,可以直接在 Android 手机屏幕的最上面显示通知信息。使用 Notification 定义一条提示信息的标题、时间、内容以及具体的触发操作

No.

方法

类型

描述

1

Public Notification(nt icon,CharSequence tickerText,long when)

构造

创建一个新的 Notification 对象,并指定提示的图标、信息内容及显示的时间,如果为立刻显示,则直接使用 System.currentTimeMillis() 设置

2

Public void setLatestEventInfo(Context context,CharSequence contentTitle,CharSequence contentText,PendingIntent contentIntent)

普通

设置通知的标题、内容以及指定的 PendingIntent

然后我们再通过 android.app.NotificationManager 类,该类就相当于一个发布 Notification 信息的组件,如果把 NotificationManager 类看作一个新闻广播,那么每个 Notification 就可以看作一条条的新闻信息。 NotificationManager 常用方法如下:

No.

方法

描述

1

Public void notify(String tag,int id, Notification notification)

指定发送信息的标签、显示图标、 Notification 对象

2

Public void notify(int id, Notification notification)

指定发送信息的显示图标、 Notification 对象

3

Public void cancel(String tag,int id)

取消指定标签、显示图标的信息

4

Public void cancel(int id)

取消指定图标的信息

5

Public void cancelAll()

取消所有信息

范例:

PendingIntent01_NotificationActivity.java

package com.iflytek.demo;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.os.Bundle;

public class PendingIntent01_NotificationActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		NotificationManager notificationManager = (NotificationManager) super
				.getSystemService(Activity.NOTIFICATION_SERVICE);// 取得系统服务
		Notification notification = new Notification(R.drawable.ic_launcher,
				"来自XDWANG的消息。", System.currentTimeMillis()); // 立刻发送一个消息,信息图标、信息提示、显示时间
		PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
				super.getIntent(), PendingIntent.FLAG_UPDATE_CURRENT); // 创建了一个PendingIntent对象
		notification.setLatestEventInfo(this, "王旭东",
				"http://xdwangiflytek.iteye.com", contentIntent);// 信息标题、信息内容、待发送的Intent
		notificationManager.notify("XDWANG", R.drawable.ic_launcher,
				notification);// 设置信息标签、设置图标、发送消息
	}
}

 

效果:

 

 

 

二、 SMS 服务

前面我们说过 Intent 启动手机短信发送程序,其主要功能只是显示一个发送短信的窗口,而要想发送短信,用户需要手动进行,在 Android 中专门提供了一个 android.telephony.SmsManager 类,可以进行短信发送程序的调用

No.

方法

描述

1

Public ArrayList<String>divideMessage(String text)

拆分短信内容

2

Public static SmsManager getDefault()

取得默认手机的 SmsManager 对象

3

Public void sendTextMessage(String destinationAddress,String scAddress,String text,PendingIntent sendIntent,

PendingIntent diliveryIntent)

发送文字信息

4

Public void sendMulipartTextMessage(String destinationAddress,

String scAddress,ArrayList<String>parts,ArrayList<PendingIntent>

sentIntents,ArrayList<PendingIntent> deliveryIntents)

发送多条文字信息

5

Public void sendDataMessage(String destinationAddress,String

scAddress,short destinationPort,byte[] data,PendintIntent

sendIntent,PendingIntent deliveryIntent)

发送二进制数据信息

说明: destinationAddress :收件人地址

scAddress :设置短信中心的号码,如果设置为 null ,则为默认中心号码

text :指定发送短信的内容

sentIntent :当消息发出时,通过 PendingIntent 来广播发送成功或者失败的信息报告,如果该参数为空,则检查所有未知的应用程序,这样将导致发生发送时间延长

deliveryIntent :当信心发送到收件处时,该 PendingIntent 会进行广播

范例:

PendingIntent02_SMSActivity.java

package com.iflytek.demo;

import java.util.Iterator;
import java.util.List;

import android.app.Activity;
import android.app.PendingIntent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.widget.Toast;

public class PendingIntent02_SMSActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		// 短信内容
		String content = "在昨天国防部例行记者会上,钓鱼岛问题依然是关注焦点。有记者提到,有媒体报道日本航空自卫队近半年来出动战斗机达到200余次,在日本政府宣布购岛行为之后剧增到54次,为前三个月的3.6倍,请问如何评论,在这方面中方采取了哪些措施?近年来,日本自卫队飞机针对中国的侦巡力度不断加大,损害了中国的主权权益和安全利益,也是引发中日海空安全问题的根源。国防部新闻事务局副局长、国防部新闻发言人杨宇军说,我们要求日方停止侵犯中国的主权权益,同时采取有效措施,避免和防止海空事故和不测事件的发生。";// 超过了70个字
		// 短信管理类
		SmsManager smsManager = SmsManager.getDefault();
		// 取得PendingIntent
		PendingIntent sentIntent = PendingIntent.getActivity(this, 0,
				super.getIntent(), PendingIntent.FLAG_UPDATE_CURRENT);
		if (content.length() > 70) { // 大于70个字,拆分
			List<String> msgs = smsManager.divideMessage(content); // 拆分信息
			Iterator<String> iterator = msgs.iterator();// 实例化Iterator
			while (iterator.hasNext()) {// 迭代输出
				String msg = iterator.next();// 取出每一个子信息
				smsManager.sendTextMessage("13956027313", null, msg,
						sentIntent, null);// 发送文字信息
			}
		} else {//如果不大于70,则直接全部发送
			smsManager.sendTextMessage("13956027313", null, content,
					sentIntent, null);
		}
		Toast.makeText(this, "短信发送完成", Toast.LENGTH_SHORT).show();
	}

	@Override
	protected void onDestroy() {
		sentIntent.cancel();
		super.onDestroy();
		
	}
}

添加权限:

<uses-permission android:name="android.permission.SEND_SMS" />

 

  • 大小: 14.4 KB
  • 大小: 23.8 KB
分享到:
评论

相关推荐

    android支持包:android-support-v4

    `android-support-v4`库中的BroadcastReceiver和PendingIntent类提供了与原生API相匹配的功能,使得开发者能在低版本的Android上使用这些组件进行事件监听和跨组件通信。 **Preference支持** Preference类是用于...

    Android中pendingIntent的深入理解

    在Android开发中,PendingIntent是一个非常关键且独特的组件,它为应用程序提供了跨进程通信的能力,使得一个应用可以请求系统在未来的某个时刻执行特定的操作。PendingIntent不仅涉及到了Android的权限模型,还涉及...

    android 服务 Service PendingIntent 通知

    在Android应用开发中,服务(Service)是一种在后台运行的组件,它不具有用户界面,但可以执行长时间的任务,如播放音乐、网络通信等。Service生命周期中的关键方法包括`onStartCommand()`和`onBind()`,前者用于...

    Android_Alarm-master_androidalarm_

    通过学习和实践这个"Android_Alarm-master"项目,初学者可以掌握Android中定时任务的实现,为开发更复杂的后台功能打下基础。同时,理解Alarm Manager的工作原理也有助于优化应用的电池使用和性能。

    android闹钟系统-alarm.doc

    在Android系统中,闹钟功能是一个至关重要的组件,它允许应用程序设定定时事件,即使应用本身并未运行,也能在指定时间唤醒设备并执行预定的操作。这一功能主要依赖于`AlarmManager`服务和`PendingIntent`机制。 `...

    Android高级应用源码-android Widget小组件开发.rar

    总的来说,学习和理解Android Widget开发不仅可以提升应用的用户体验,也是Android开发者进阶的必经之路。通过分析这个源码,你将能掌握Widget的设计原则和实践技巧,为你的应用增添更多实用和互动的功能。

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

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

    android 组件通信

    在Android开发中,组件通信是核心概念之一,它涉及到应用程序中的四大组件——Activity、Service、BroadcastReceiver和ContentProvider...通过实践和不断学习,你将能够自如地驾驭Android组件通信的各种技巧和策略。

    android-broadcast学习

    Intent是Android中数据传递的重要工具,可以携带信息进行组件间的通信。IntentFilter定义了BroadcastReceiver可以接收的Intent类型,包括ACTION、CATEGORY、DATA、MIME_TYPE等属性,用于筛选广播。 五、自定义广播 ...

    Android学习之Broadcast练习_dlc

    在实际应用中,BroadcastReceiver常用于实现跨组件通信。例如,一个应用可能会发送一个广播通知其他应用有新数据可用,或者在一个应用中更改设置后通知所有相关组件。此外,BroadcastReceiver还可以用于实现定时任务...

    Android代码-国外租房APP

    总的来说,Brno Rentals App是一个集成了多种Android开发技术的实例,它涵盖了网络通信、数据存储、用户界面、本地通知等多个方面,对于想要学习Android开发或者优化租房应用的开发者来说,是一个极具参考价值的项目...

    PendingIntent

    综上所述,PendingIntent是Android开发中的一个重要工具,它允许开发者在不同组件之间安全地传递和延迟执行Intent操作,为应用的复杂交互提供了便利。理解并正确使用PendingIntent对于编写健壮、安全的Android应用至...

    android--broadcast实例

    理解并熟练运用BroadcastReceiver,开发者可以有效地实现跨组件通信、响应系统事件,提高应用的交互性和用户体验。然而,也要注意广播可能导致的性能问题,合理使用和优化广播的使用是提升应用效率的关键。

    Android高级应用源码-Android小部件AppWidget.zip

    7. **Intent和PendingIntent**: AppWidget可以通过Intent与宿主应用程序通信,PendingIntent允许你在小部件上设置可触发的操作,比如点击按钮启动一个新的Activity。 8. **AppWidget配置**: 可以为每个AppWidget...

    Android-Alarm-Clock

    综上所述,"Android-Alarm-Clock"项目涵盖了Android开发的多个核心领域,包括系统服务、组件通信、UI设计、权限管理以及测试策略。同时,它还可能涉及到跨平台开发技术,利用JavaScript来增强功能或简化开发流程。

    android-UniversalMusicPlayer.zip

    由于"android-UniversalMusicPlayer.zip"项目可能需要开发者自行调试才能运行,因此它是一个很好的学习和实践平台,可以深入理解Android音乐播放器的实现原理,以及如何处理媒体数据、服务管理和UI交互等关键问题。...

    Android 开发实战经典PPT课件(3-4)共4个.zip

    本套课件主要涵盖了两个核心主题:数据存储和Android组件通信,这些都是构建高效、稳定且用户友好的应用程序的基础。 首先,我们来深入探讨数据存储这一主题。在Android应用中,数据存储是不可或缺的一部分,它涉及...

    Android学习笔记之NFC近距离无线通讯技术(Dean)(转载)

    **Android学习笔记之NFC近距离无线通讯技术** NFC(Near Field Communication)是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据交换。在Android系统中,NFC功能广泛应用于移动支付、数据...

    Android高级应用源码-最全日历.zip

    6. **通知与提醒**:日历应用往往需要设置事件提醒,这涉及到AlarmManager、NotificationManager的使用,以及PendingIntent的创建。 7. **多线程处理**:考虑到日历操作可能涉及耗时任务,源码可能运用了AsyncTask...

    Android 广播接收者--BroadcastReceiver

    10. **权限适配**:针对Android 8.0+的后台运行限制,需要考虑如何优雅地处理广播,例如使用PendingIntent配合NotificationChannel发送通知。 通过以上知识点的学习,我们可以有效地利用BroadcastReceiver来增强...

Global site tag (gtag.js) - Google Analytics