android PendingIntent参数详细解析
PendingIntent介绍
PendingIntent可以看作是对Intent的一个封装,但它不是立刻执行某个行为,而是满足某些条件或触发某些事件后才执行指定的行为。
PendingIntent的获取
PendingIntent获取有三种方式:通过Activity,Service,BroadcastReceiver获取.
1. 你可以通过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统 取得一个用于启动一个Activity的PendingIntent对象.
2.可以通过getService(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个 用于启动一个Service的PendingIntent对象.
3.可以通过getBroadcast(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于向BroadcastReceiver的发送广播的PendingIntent对象.
PendingIntent的参数说明
拿第三种方式,广播的形式说明下
PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0,sIntent, 0);
第一个参数是上下文.
第二个参数是每次requestcode不同,就能产生多个Pendingintent.
第三个参数是用来存储信息.
第四个参数是对不同操作作标识.
getBroadcast(Context context, int requestCode, Intent intent, int flags)中的flags有几种状态:
1.FLAG_CANCEL_CURRENT:如果AlarmManager管理的PendingIntent已经存在,那么将会取消当前的PendingIntent,从而创建一个新的PendingIntent.
2.FLAG_UPDATE_CURRENT:如果AlarmManager管理的PendingIntent已经存在,让新的Intent更新之前Intent对象数据,
例如更新Intent中的Extras,另外,我们也可以在PendingIntent的原进程中调用PendingIntent的cancel ()把其从系统中移除掉
3.FLAG_NO_CREATE:如果AlarmManager管理的PendingIntent已经存在,那么将不进行任何操作,直接返回已经.
4.FLAG_ONE_SHOT:该PendingIntent只作用一次.在该PendingIntent对象通过send()方法触发过后,
PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回一个SendIntentException.
PendingIntent举例
发送短信:
private final static String SEND_ACTION = "send"; private final static String DELIVERED_ACTION = "delivered"; private void sendSms(String receiver, String text) { SmsManager s = SmsManager.getDefault(); PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SEND_ACTION), PendingIntent.FLAG_CANCEL_CURRENT); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED_ACTION), PendingIntent.FLAG_CANCEL_CURRENT); // 发送完成 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "Send Success!", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Send Failed because generic failure cause.", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), "Send Failed because service is currently unavailable.", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(), "Send Failed because no pdu provided.", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), "Send Failed because radio was explicitly turned off.", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(getBaseContext(), "Send Failed.", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(SEND_ACTION)); // 对方接受完成 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "Delivered Success!", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(getBaseContext(), "Delivered Failed!", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED_ACTION)); // 发送短信,sentPI和deliveredPI将分别在短信发送成功和对方接受成功时被广播 s.sendTextMessage(receiver, null, text, sentPI, deliveredPI); }
这里特别说明下:群发短信的时候,要保持每次发送的短信内容都不相同.可以将PendingIntent的第二个参数设置成不同的值,第四个参数设置成FLAG_ONE_SHOT.
这样就可以解决群发短信的两个问题:
1.群发短信时,短信内容取到的值是最后一条短信的内容.
2.群发短信时,短信内容总是不更新, 一成不变的问题.
android PendingIntent参数详细解析相关推荐
- Linux操作系统内核启动参数详细解析[转]
Linux操作系统内核启动参数详细解析http://os.51cto.com/art/200902/110080.htmhttp://os.51cto.com 2009-02-17 16:07 佚名 ...
- linux开放7050端口,Linux操作系统内核启动参数详细解析
Linux操作系统内核启动参数详细解析 2007-05-09 17:27 作者:little 来源:赛迪网 [摘要] Linux内核在启动的时候,能接收某些命令行选项或启动时参数.当内核不能识别某些硬 ...
- android webviewclient 点击事件,Android Api WebViewClient 详细解析
设计思想理解 在WebView的设计中,不是什么事都要WebView类干的,有相当多的杂事是分给其他类做的,这样WebView专心干好自己的解析.渲染工作就行了.比如我们最熟知的,所有针对WebVie ...
- Linux操作系统内核启动参数详细解析
Linux内核在启动的时候,能接收某些命令行选项或启动时参数.当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核. 如果不使用启动管理 ...
- Linux命令参数详细解析 mv
用法:mv [选项]... [-T] 源文件 目标文件 或:mv [选项]... 源文件... 目录 或:mv [选项]... -t 目录 源文件... Rename SOURCE to DEST ...
- MYSQL连接字符串参数详细解析(大全参考)
Connector/Net Connection String Options Reference Database=dbname;Data Source=192.168.1.1;Port=3306; ...
- Android技能树 — 网络小结(6)之 OkHttp超超超超超超超详细解析
前言: 本文也做了一次标题党,哈哈,其实写的还是很水,各位原谅我O(∩_∩)O. 介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔细看 ...
- Android开发中的WMS详细解析
/ 今日科技快讯 / 近日,小冰公司宣布对旗下人工智能数字员工产品线启动年度升级.本次升级加强的技术包括大模型对话引擎.3D神经网络渲染.超级自然语音及AIGC人工智能内容生成.小冰公司计划将 ...
- Android:全面详细的解析Android数据流量统计流程与分析方法(流量检测、流量监控、流量提示)相关类PhoneStateListener,dcTracker,TrafficStats
作者:GentlemanTsao https://blog.csdn.net/GentelmanTsao 每篇一格言 Stay hungry,stay foolish! --Steve Jobs 文章 ...
最新文章
- APP转让时提示:您必须移除要转让的 App 的所有构建版本和测试员,并清除“测试信息”下的所有信息
- ceph 代码分析 读_Ceph OSD磁盘异常流量问题分析
- 部署LyncServer2013之一 前期准备
- java提高篇(九)-----实现多重继承
- JavaScript:Scope(域)的基本指南
- 卫星地图上,深圳梧桐山这一条白线是什么
- gsoap开发webservice
- idea设置jsp模板
- 【PS】抠图教程(0基础快速入门)
- docker学习(二)docker入门
- 浩顺 HS-320 打印机驱动
- Chapter 12 IP Weighting and Marginal Structural Model
- 29Flutter Sliver家族
- C++程序设计的技巧-Pimple的使用
- android8.0调用系统浏览器,ie浏览器在线使用,ie浏览器8.0手机安卓版-
- 普通u盘linux不识别,Linux识别不了u盘怎么办
- 2011大纽约区域赛试题 Decoding EDSAC Data 解题报告
- 80后年薪多少,才能摆脱中年危机?
- 数字逻辑设计基础(何建新)第三章
- WPS 合并一个工作簿中多个工作表
热门文章
- hdu3234 带权并查集(XOR)
- 【错误记录】FFmpeg 推流报错 ( FLV does not support sample rate 8000, choose from (44100, 22050, 11025) )
- 【错误记录】编译安卓项目报错 ( AndroidMavenPlugin 错误 )
- 【Android Binder 系统】一、Binder 系统核心 ( IPC 进程间通信 | RPC 远程调用 )
- 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则 | 数据项支持度 | 关联规则支持度 )
- 正向代理反向代理 简(fu)明(za)解释
- 【已解决】wepy中使用分包加载报错
- 【bzoj3105】新Nim游戏
- 理解模板引擎Razor 的原理
- [转]SQL语句大全