<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/62b63d5b405aad31f7fe36f5/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62b63d5b405aad31f7fe36f5/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0"><span class="fc2 sc1">什么是</span><span class="_ _0"> </span><span class="ff2 sc1 ls1"><span class="fc2 sc1">Intent</span><span class="ff1 ls2"><span class="fc2 sc1"> </span><span class="fc2 sc1"> </span><span class="ff3 ls3"><span class="fc2 sc1">32</span><span class="fc2 sc1">1 </span></span></span></span></div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc1 ls0 ws0"> </div><div class="t m0 x3 h4 y3 ff4 fs2 fc1 sc1 ls4 ws0">2 </div><div class="t m0 x3 h4 y4 ff4 fs2 fc1 sc1 ls4 ws0">3 </div><div class="t m0 x3 h4 y5 ff4 fs2 fc1 sc1 ls4 ws0">4 </div><div class="t m0 x3 h4 y6 ff4 fs2 fc1 sc1 ls4 ws0">5 </div><div class="t m0 x3 h4 y7 ff4 fs2 fc1 sc1 ls4 ws0">6 </div><div class="t m0 x3 h4 y8 ff4 fs2 fc1 sc1 ls4 ws0">7 </div><div class="t m0 x3 h4 y9 ff4 fs2 fc1 sc1 ls4 ws0">8 </div><div class="t m0 x3 h4 ya ff4 fs2 fc1 sc1 ls5 ws0">10 </div><div class="t m0 x3 h4 yb ff4 fs2 fc1 sc1 ls4 ws0">9 </div><div class="t m0 x3 h4 yc ff4 fs2 fc1 sc1 ls6 ws0">11<span class="_ _1"></span> </div><div class="t m0 x3 h4 yd ff4 fs2 fc1 sc1 ls5 ws0">13 </div><div class="t m0 x3 h4 ye ff4 fs2 fc1 sc1 ls5 ws0">12 </div><div class="t m0 x3 h4 yf ff4 fs2 fc1 sc1 ls4 ws0">1 </div><div class="t m0 x4 h5 y10 ff5 fs3 fc0 sc1 ls7 ws0">我要打电话——电话与短信</div><div class="t m0 x4 h6 y11 ff5 fs3 fc0 sc1 ls0 ws0">应用<span class="ff6"> </span></div><div class="t m0 x5 h7 y12 ff7 fs4 fc0 sc1 ls0 ws0">过前面章节的学习,<span class="_ _2"></span>相信读者对<span class="ff3 ls8">Andr<span class="_ _3"></span>oid<span class="ff7 ls0">应用编程已经有了较为<span class="_ _3"></span>全面的认识,<span class="_ _2"></span>已经知道</span></span></div><div class="t m0 x5 h7 y13 ff7 fs4 fc0 sc1 ls0 ws0">如何创建<span class="ff3 ls9">Activity</span>,<span class="_ _4"></span>如何通过<span class="ff3 lsa">XML</span>文件<span class="_ _3"></span>创建用户界面。<span class="_ _4"></span>这些知识技能已经能<span class="_ _3"></span>够让你开发</div><div class="t m0 x6 h8 y14 ff7 fs4 fc0 sc1 lsb ws0">出应用程序的静态用户界面。现在我们就进一步看看如何<span class="_ _3"></span>让你的应用程序动起来——能够和</div><div class="t m0 x6 h7 y15 ff3 fs4 fc0 sc1 lsc ws0">Android<span class="ff7 ls0">平台上的其他组件交互。<span class="ff3"> </span></span></div><div class="t m0 x7 h7 y16 ff7 fs4 fc0 sc1 lsd ws0">本章主要介绍<span class="ff3 lse">Intent</span>的概念及使用方法。首先从<span class="ff3 lse">Intent</span>的基本类型入手,介绍不同类型<span class="ff3 lse">Intent</span></div><div class="t m0 x6 h7 y17 ff7 fs4 fc0 sc1 lsf ws0">的使用方法,然后分别用电话和短信两个例子讲解<span class="ff3 ls10">Android</span>上基本应用的开发。打电话和发短信</div><div class="t m0 x6 h7 y18 ff7 fs4 fc0 sc1 ls0 ws0">是任何一款智能手机的基本功能,它<span class="_ _3"></span>需要手机平台底层(<span class="ff3 ls11">GSM<span class="_ _3"></span>/3G<span class="ff7 ls0">模<span class="_ _3"></span>块)的支持,因此本章就通</span></span></div><div class="t m0 x6 h7 y19 ff7 fs4 fc0 sc1 ls0 ws0">过电话和短信的例子展示程序该如何<span class="_ _3"></span>利用<span class="ff3 lsc">Android</span>提供的<span class="ff3 lsa">API</span>和设备上的通信模块<span class="_ _3"></span>打交道。<span class="ff3"> </span></div><div class="t m0 x6 h9 y1a ff5 fs2 fc0 sc1 ls0 ws0">什么是<span class="_ _5"> </span><span class="ff6 ls12">Intent </span></div><div class="t m0 x7 h7 y1b ff7 fs4 fc0 sc1 ls0 ws0">在动手编写我们自己的电话拨号程序<span class="_ _3"></span>前,我们先来看看<span class="ff3 lse">Inte<span class="_ _3"></span>nt<span class="ff7 ls0">到底是什么。<span class="ff3"> </span></span></span></div><div class="t m0 x7 h7 y1c ff3 fs4 fc0 sc1 lse ws0">Intent<span class="ff7 ls0">是一种运行时绑定<span class="_ _2"></span>(<span class="ff3 ls11 ws1">run-tim<span class="_ _3"></span>e binding<span class="ff7 ls0 ws0">)<span class="_ _2"></span>机制,<span class="_ _6"></span>它能在程序运行的过程中连接<span class="_ _3"></span>两个不同的</span></span></span></div><div class="t m0 x6 h7 y1d ff7 fs4 fc0 sc1 ls0 ws0">组件。<span class="_ _6"></span>通过<span class="ff3 ls13">Intent</span>,<span class="_ _7"></span>你的程序可以向<span class="ff3 lsc">Android</span>表达某种请求或者意愿,<span class="_ _2"></span><span class="ff3 lsc">Andr<span class="_ _8"></span>oid<span class="ff7 ls0">会根据意愿的内容选</span></span></div><div class="t m0 x6 h7 y1e ff7 fs4 fc0 sc1 lsf ws0">择适当的组件来完成请求。比<span class="_ _8"></span>如,有一个<span class="ff3 ls9">Activity</span>希<span class="_ _8"></span>望打开网页浏览器查看<span class="_ _8"></span>某一网页的内容,那</div><div class="t m0 x6 h7 y1f ff7 fs4 fc0 sc1 ls0 ws0">么这个<span class="ff3 ls9">Activity</span>只需要发出</div><div class="t m0 x8 h7 y20 ff8 fs5 fc0 sc1 ls14 ws0">WEB_SEARCH_ACTION<span class="ff7 fs4 ls0">请求给<span class="ff3 lsc">Android</span>,<span class="_ _9"></span><span class="ff3 ls8">Android<span class="ff7 ls15">会根据</span><span class="lse">Inte<span class="_ _3"></span>nt<span class="ff7 ls0">的请求内容,</span></span></span></span></div><div class="t m0 x6 h7 y21 ff7 fs4 fc0 sc1 ls0 ws0">查询各组件注册时声明的<span class="ff3 ls16">IntentFilter</span>,找到网页浏览器<span class="_ _3"></span><span class="ff3 ls9">Activity<span class="ff7 ls0">来浏览网页。</span><span class="ls17"> </span></span></div><div class="t m0 x7 h7 y22 ff7 fs4 fc0 sc1 ls0 ws0">第<span class="ff3">3</span>章中我们讲过<span class="ff3 ls8">Andr<span class="_ _3"></span>oid<span class="ff7 ls0">的有三个基本<span class="_ _3"></span>组件——<span class="ff3 ls9">Activity</span>,<span class="_ _6"></span><span class="ff3 ls18">Service<span class="ff7 ls0">和<span class="ff3 ws2">Broadcast Receiver</span><span class="ls19">,它<span class="_ _a"></span>们</span></span></span></span></span></div><div class="t m0 x6 h7 y23 ff7 fs4 fc0 sc1 ls0 ws0">都是通过<span class="ff3 ls1a">Intent</span>机制激活的,而不同类型的组件有传递<span class="_ _3"></span><span class="ff3 lse">Intent<span class="ff7 ls0">的不同方式:<span class="_ _3"></span><span class="ff3"> </span></span></span></div><div class="t m0 x7 h7 y24 ff3 fs4 fc0 sc1 ls11 ws0">(1) <span class="_"> </span><span class="ff7 ls1b">要激活一个新的</span><span class="ls1c">Activity<span class="_ _b"></span><span class="ff7 ls1b">,或者让一个现有的</span><span class="ls9">Activ<span class="_ _8"></span>ity<span class="_ _a"></span><span class="ff7 ls1b">做新的操作,可<span class="_ _8"></span>以通过调用</span></span></span></div><div class="t m0 x6 h8 y25 ff8 fs5 fc0 sc1 ls14 ws0">Context.startActivity()<span class="_ _8"></span><span class="ff7 fs4 ls1d">或者</span>Activity.startActivityForResult()<span class="_ _8"></span><span class="ff7 fs4 ls1d">方法。这两个方法需</span></div><div class="t m0 x6 h7 y26 ff7 fs4 fc0 sc1 ls0 ws0">要传入的<span class="ff3 ls1a">Intent</span>参数也称为活动行为意图<span class="_ _9"></span>(<span class="ff3 ls1e ws3">Activity Action Inten<span class="_ _8"></span>t</span>)<span class="_ _c"></span>,<span class="_ _9"></span><span class="ls15">根据<span class="ff3 ls1f">Intent</span><span class="ls0">对象对目标</span></span></div><div class="t m0 x9 ha y27 ff8 fs5 fc0 sc1 ls14 ws0">Activity</div><div class="t m0 x6 h7 y28 ff7 fs4 fc0 sc1 ls0 ws0">描述的不同,来启动与之相匹配的<span class="_ _3"></span><span class="ff3 ls9">Activity<span class="ff7 ls0">或传递信息。<span class="ff3"> <span class="_ _b"></span></span>刚刚我们提到的打开网页浏览器<span class="_ _3"></span>例子就</span></span></div><div class="t m0 x6 h7 y29 ff7 fs4 fc0 sc1 ls0 ws0">是一个<span class="ff3 ls20 ws4">Activity Action <span class="_ _1"></span>Intent</span>。<span class="ff3"> </span></div><div class="t m0 x7 h7 y2a ff3 fs4 fc0 sc1 ls11 ws0">(2) <span class="_ _d"> </span><span class="ff7 ls21">要启动一个新的服务,或者向一个已有的服务传递新的指令,调用</span></div><div class="t m0 x6 h8 y2b ff8 fs5 fc0 sc1 ls14 ws0">Context.startService()<span class="ff7 fs4 ls22">方法或调用</span>Context.bindService()<span class="_ _8"></span><span class="ff7 fs4 ls22">方法将调用此方法的上下文对</span></div><div class="t m0 x7 hb y2c ff5 fs6 fc0 sc1 ls0 ws0">通<span class="ff6"> </span></div><div class="t m0 xa hc y2d ff9 fs7 fc1 sc1 ls23 ws0">第5章<span class="_ _e"></span> </div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62b63d5b405aad31f7fe36f5/bg2.jpg"><div class="t m0 xb hd y1 ff3 fs0 fc0 sc1 ls24 ws0">322<span class="ff1 ls2"> 第<span class="_ _9"></span><span class="ff3 ls25">11<span class="_ _0"> </span><span class="ff1 ls0">章 <span class="_"> </span>虚拟软键盘与输入法<span class="ff3"> </span></span></span></span></div><div class="t m0 xc h3 y2 ff3 fs1 fc0 sc1 ls0 ws0"> </div><div class="t m0 xd h7 y2e ff7 fs4 fc0 sc1 ls0 ws0">象与<span class="ff3 ls26">Service</span><span class="ls15">绑定。</span><span class="ff3"> </span></div><div class="t m0 xe h7 y2f ff3 fs4 fc0 sc1 ls11 ws0">(3) <span class="_ _f"> </span><span class="ff7 ls27">通过</span></div><div class="t m0 xf h7 y30 ff8 fs5 fc0 sc1 ls14 ws0">Context.sendBroadcast()<span class="_ _10"> </span><span class="ff7 fs4 ls0">、<span class="_ _10"> </span></span>Context.sendOrderBroadcast()<span class="_ _10"> </span><span class="ff7 fs4 ls0">和<span class="ff3 ls10"> </span></span></div><div class="t m0 xd h7 y31 ff8 fs5 fc0 sc1 ls14 ws0">Context.sendStickBroadcast()<span class="ff7 fs4 ls28">这三个方法可以发送广播意图(<span class="ff3 ls29 ws5">Broadcast Intent</span><span class="ls0">)<span class="_ _c"></span><span class="ls28">。广播意图</span></span></span></div><div class="t m0 xd h7 y32 ff7 fs4 fc0 sc1 ls0 ws0">发送后,<span class="_ _4"></span>所有已注册的拥有与之相匹配<span class="ff3 ls16">IntentFilter</span>的<span class="ff3 ls2a">BroadcastReceiver</span>就会被激活。<span class="_ _4"></span>这种机制被广</div><div class="t m0 xd h7 y33 ff7 fs4 fc0 sc1 lsf ws0">泛运用于设备或系统状态变化的通知,一个常见的例子是,当<span class="ff3 ls2b">Android</span>的电池电量过低时,系统</div><div class="t m0 xd h7 y34 ff7 fs4 fc0 sc1 ls2c ws0">会发送<span class="ff3 ls2d">Action<span class="_"> </span></span><span class="ls0">为</span></div><div class="t m0 x10 h7 y35 ff8 fs5 fc0 sc1 ls14 ws0">BATTERY_LOW<span class="_ _0"> </span><span class="ff7 fs4 ls2c">的广<span class="_ _3"></span>播,接着任何可匹<span class="_ _3"></span>配该<span class="ff3 ls2e">Action<span class="_"> </span></span><span class="ls0">的<span class="_ _11"> </span><span class="ff3 ls2f">IntentFilter<span class="_"> </span></span></span>注册的</span></div><div class="t m0 xd h7 y36 ff3 fs4 fc0 sc1 ls30 ws0">BroadcastReceiver<span class="ff7 ls0">都会各自运行自定<span class="_ _3"></span>义的处理代码,<span class="_ _12"></span>比如关闭设备的<span class="ff3 ls10">WIFI</span>和<span class="_ _3"></span><span class="ff3 lsa">GPS<span class="ff7 ls0">以节省电池消耗<span class="_ _3"></span>。<span class="_ _c"></span><span class="ff3"> </span></span></span></span></div><div class="t m0 xe h7 y37 ff3 fs4 fc0 sc1 lse ws0">Intent<span class="_ _11"> </span><span class="ff7 ls31">一旦发出,</span><span class="ls32">Android<span class="_"> </span><span class="ff7 ls31">都会准确找到相<span class="_ _3"></span>匹配的一个或多个<span class="ff3 ls33">Activity<span class="_ _11"> </span></span><span class="ls0">、<span class="_ _11"> </span><span class="ff3 ls34">Service<span class="_ _13"> </span></span>或</span></span></span></div><div class="t m0 xd h7 y38 ff3 fs4 fc0 sc1 ls30 ws0">BroadcastReceiver<span class="ff7 ls28">作为响应。所以,不同类<span class="_ _8"></span>型的</span><span class="ls1f">Intent<span class="_ _8"></span><span class="ff7 ls28">消息不会出现重叠:</span><span class="ls29">Broadcast<span class="ff7 ls0">的<span class="_ _8"></span></span></span>Intent<span class="ff7 ls28">消息</span></span></div><div class="t m0 xd h7 y39 ff7 fs4 fc0 sc1 lsd ws0">只会发送给<span class="ff3 ls18">BroadcastReceiver</span>,而绝不可能发送给<span class="ff3 ls9">Activity</span><span class="ls0">或<span class="_ _8"></span><span class="ff3 ls18">Service</span></span>。由<span class="ff3 ls35">startActivty()<span class="_ _8"></span></span><span class="ls28">传递的消息</span></div><div class="t m0 xd h7 y3a ff7 fs4 fc0 sc1 ls0 ws0">也只可能发送给<span class="ff3 ls9">Activity</span>,由</div><div class="t m0 x11 h7 y3b ff8 fs5 fc0 sc1 ls14 ws0">startService()<span class="ff7 fs4 ls0">传递的<span class="ff3 ls1f">Intent</span>只可能发送给<span class="ff3 ls26">Service</span>。<span class="ff3"> </span></span></div><div class="t m0 xd he y3c ff6 fs8 fc0 sc1 ls36 ws0">Intent<span class="_ _0"> </span><span class="ff5 ls37">的主要组成部分</span><span class="ls0"> </span></div><div class="t m0 xe h7 y3d ff3 fs4 fc0 sc1 lse ws0">Intent<span class="ff7 ls0">对象抽象地描述了要<span class="_ _3"></span>执行的操作,<span class="_ _14"></span>其描述的基本内容可以分为组件名称<span class="_ _3"></span>、<span class="_ _14"></span><span class="ff3 ls29">Action<span class="_ _14"></span><span class="ff7 ls15">(动作)<span class="_ _14"></span><span class="ls0">、<span class="_ _c"></span><span class="ff3"> </span></span></span></span></span></div><div class="t m0 xd h7 y3e ff3 fs4 fc0 sc1 ls38 ws0">Data<span class="_ _7"></span><span class="ff7 ls0">(数据)<span class="_ _c"></span>、<span class="_ _6"></span><span class="ff3 ls2a">Category<span class="_ _7"></span><span class="ff7 ls0">(类别)<span class="_ _c"></span>、<span class="_ _7"></span><span class="ff3 ls39">Extra<span class="_ _7"></span><span class="ff7 ls0">(附加信息)<span class="_ _7"></span>和<span class="ff3 ls38">Flag<span class="_ _6"></span><span class="ff7 ls0">(标志位)<span class="_ _7"></span><span class="ff3">6<span class="ff7">部分,<span class="_ _7"></span>下面是详细的介绍。<span class="_ _c"></span><span class="ff3"> </span></span></span></span></span></span></span></span></span></span></div><div class="t m0 xe h7 y3f ff3 fs4 fc0 sc1 ls11 ws0">(1) <span class="_ _15"></span><span class="ff7 ls15">组件名称是指<span class="ff3 ls1f">In<span class="_ _8"></span>tent</span><span class="ls0">目标组件的名称。<span class="_ _3"></span>组件名称是一个</span></span></div><div class="t m0 x12 h8 y40 ff8 fs5 fc0 sc1 ls14 ws0">ComponentName<span class="ff7 fs4 ls0">对象,<span class="_ _15"></span>这种对象名</span></div><div class="t m0 xd h7 y41 ff7 fs4 fc0 sc1 lsf ws0">称是目标组件类名和目标组件所在应<span class="_ _3"></span>用程序的包名的组合。组件<span class="_ _3"></span>中包名不一定要和<span class="ff3 ls3a">manifest</span>文件</div><div class="t m0 xd h7 y42 ff7 fs4 fc0 sc1 lsf ws0">中的包名完全匹配。组件名称是一个可选项。如果<span class="ff3 ls26">Intent</span>消息中指明了目标组件的<span class="_ _8"></span>名称,这就是</div><div class="t m0 xd h7 y43 ff7 fs4 fc0 sc1 ls0 ws0">一个显式消息,<span class="_ _6"></span><span class="ff3 ls1f">Intent<span class="ff7 ls0">会传递给指明的组件。<span class="_ _6"></span>如果目标组件名称并没有指定<span class="_ _3"></span>,<span class="_ _6"></span><span class="ff3 ls8">Android<span class="ff7 ls15">则通过</span><span class="lse">Intent</span></span></span></span></div><div class="t m0 xd h7 y44 ff7 fs4 fc0 sc1 ls0 ws0">内的其他信息和已注册的<span class="ff3 ls16">IntentFilter</span>的比较来选择合适<span class="_ _3"></span>的目标组件。<span class="ff3"> </span></div><div class="t m0 xe h7 y45 ff3 fs4 fc0 sc1 ls34 ws6">(2) Action<span class="ff7 ls0 ws0">描述<span class="ff3 lse">Intent</span>所触发<span class="_ _3"></span>动作名字的字符串,对于<span class="ff3 ls3b ws7">Br<span class="_ _3"></span>oadcast Int<span class="_ _3"></span>ent<span class="ff7 ls0 ws0">来说,<span class="ff3 ls1c">Action</span>指被广播<span class="_ _3"></span>出</span></span></span></div><div class="t m0 xd h7 y46 ff7 fs4 fc0 sc1 ls0 ws0">去的动作。<span class="_ _15"></span>理论上<span class="ff3 ls2d">Action</span>可以为任何字符串,<span class="_ _7"></span>而与<span class="ff3 ls32">Android<span class="_ _8"></span></span>系统应用有关的<span class="ff3 ls1c">Action</span>字符串以静态<span class="_ _3"></span>字</div><div class="t m0 xd h7 y47 ff7 fs4 fc0 sc1 ls22 ws0">符串常量的形式定义在了<span class="ff3 ls1f">Inten<span class="_ _8"></span>t<span class="_ _8"></span></span>类中。<span class="sc0">错误!未找到引用源。<span class="_ _8"></span></span>列出了当前<span class="ff3 ls8">Androi<span class="_ _3"></span>d<span class="_ _8"></span><span class="ff7 ls22">系统中常见的</span></span></div><div class="t m0 xd h7 y48 ff3 fs4 fc0 sc1 ls3c ws8">Activity Action <span class="_ _1"></span>Intent<span class="ff7 ls0 ws0">的<span class="ff3 ls2e">Acti<span class="_ _3"></span>on<span class="ff7 ls0">,更多的介绍可以参见附<span class="_ _3"></span>录<span class="ff3">A</span>。<span class="ff3"> </span></span></span></span></div><div class="t m0 x13 hf y49 ff5 fs1 fc0 sc1 ls0 ws0">表<span class="sc0">错误!文档中没有指定样式的文字。</span><span class="ff6 ls3d">-1</span> <span class="_"> </span>常见的<span class="ff6 ws9">Activity Action Intent</span>的动作常量<span class="ff6"> </span></div><div class="t m0 x14 h10 y4a ff6 fs9 fc0 sc1 ls3e wsa">Activity Intent Action<span class="ff5 ls0 ws0">字符串常量<span class="ff6"> <span class="_ _16"> </span></span><span class="ls3f">描<span class="_ _12"></span> 述<span class="_ _12"></span><span class="ff6 ls0"> </span></span></span></div><div class="t m0 x15 h11 y4b ff8 fsa fc0 sc1 ls40 ws0">ACTION_CALL </div><div class="t m0 x16 h12 y4c ff7 fs9 fc0 sc1 ls0 ws0">拨出<span class="ff3 ls41">Data</span>里指定的电话号码<span class="ff3"> </span></div><div class="t m0 x15 h11 y4d ff8 fsa fc0 sc1 ls40 ws0">ACTION_EDIT </div><div class="t m0 x16 h12 y4e ff7 fs9 fc0 sc1 ls0 ws0">打开编辑<span class="ff3 ls41">Data</span>里指定数据相对应的应用程<span class="_ _8"></span>序<span class="ff3"> </span></div><div class="t m0 x15 h11 y4f ff8 fsa fc0 sc1 ls40 ws0">ACTION_MAIN </div><div class="t m0 x16 h12 y50 ff7 fs9 fc0 sc1 ls0 ws0">主程序入口,不会接收数据,结束后也不<span class="_ _8"></span>返回数据<span class="ff3"> </span></div><div class="t m0 x15 h11 y51 ff8 fsa fc0 sc1 ls40 ws0">ACTION_SYNC </div><div class="t m0 x16 h12 y52 ff7 fs9 fc0 sc1 ls0 ws0">在<span class="ff3 ls42">Android</span>平台和服务器之间同步数据<span class="ff3"> </span></div><div class="t m0 x15 h11 y53 ff8 fsa fc0 sc1 ls40 ws0">ACTION_VIEW </div><div class="t m0 x16 h12 y54 ff7 fs9 fc0 sc1 ls0 ws0">根据<span class="ff3 ls41">Data</span>类型的不同,打开相对应的应用<span class="_ _8"></span>程序以显示数据<span class="ff3"> </span></div><div class="t m0 x15 h11 y55 ff8 fsa fc0 sc1 ls40 ws0">ACTION_DIAL </div><div class="t m0 x16 h12 y56 ff7 fs9 fc0 sc1 ls0 ws0">启动<span class="ff3 ls41">Dialer</span>或其他拨号程序,并显<span class="_ _8"></span>示<span class="ff3 ls41">Data</span>里指定的电话号码<span class="ff3"> </span></div><div class="t m0 x15 h11 y57 ff8 fsa fc0 sc1 ls40 ws0">ACTION_SENDTO </div><div class="t m0 x16 h12 y58 ff7 fs9 fc0 sc1 ls0 ws0">向<span class="ff3 ls41">Data</span>里描述的目标地址发送数据<span class="ff3"> </span></div><div class="t m0 xe h7 y59 ff7 fs4 fc0 sc0 ls0 ws0">错误!未找到引用源。<span class="sc1">列出了常见的<span class="ff3 ls43 wsb">Broa<span class="_ _3"></span>dcast Intent<span class="_ _3"></span><span class="ff7 ls15 ws0">常量。<span class="ff3 ls0"> </span></span></span></span></div><div class="t m0 x17 hf y5a ff5 fs1 fc0 sc1 ls0 ws0">表<span class="ff6 ls44">5-2</span> <span class="_"> </span>常见的<span class="ff6 ls45 wsc">Broadcast Intent</span>常量<span class="ff6"> </span></div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62b63d5b405aad31f7fe36f5/bg3.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">什么是<span class="_ _0"> </span><span class="ff2 sc1 ls1">Intent<span class="ff1 ls2"> <span class="ff3 ls3">323 </span></span></span></div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc1 ls0 ws0"> </div><div class="t m0 x3 h4 y3 ff4 fs2 fc1 sc1 ls4 ws0">2 </div><div class="t m0 x3 h4 y4 ff4 fs2 fc1 sc1 ls4 ws0">3 </div><div class="t m0 x3 h4 y5 ff4 fs2 fc1 sc1 ls4 ws0">4 </div><div class="t m0 x3 h4 y6 ff4 fs2 fc1 sc1 ls4 ws0">5 </div><div class="t m0 x3 h4 y7 ff4 fs2 fc1 sc1 ls4 ws0">6 </div><div class="t m0 x3 h4 y8 ff4 fs2 fc1 sc1 ls4 ws0">7 </div><div class="t m0 x3 h4 y9 ff4 fs2 fc1 sc1 ls4 ws0">8 </div><div class="t m0 x3 h4 ya ff4 fs2 fc1 sc1 ls5 ws0">10 </div><div class="t m0 x3 h4 yb ff4 fs2 fc1 sc1 ls4 ws0">9 </div><div class="t m0 x3 h4 yc ff4 fs2 fc1 sc1 ls6 ws0">11<span class="_ _1"></span> </div><div class="t m0 x3 h4 yd ff4 fs2 fc1 sc1 ls5 ws0">13 </div><div class="t m0 x3 h4 ye ff4 fs2 fc1 sc1 ls5 ws0">12 </div><div class="t m0 x3 h4 yf ff4 fs2 fc1 sc1 ls4 ws0">1 </div><div class="t m0 x18 h10 y5b ff6 fs9 fc0 sc1 ls46 wsd">Broadcast Intent Action<span class="ff5 ls0 ws0">字符串常量<span class="ff6"> <span class="_ _17"> </span></span><span class="ls3f">描<span class="_ _12"></span> 述<span class="_ _12"></span><span class="ff6 ls0"> </span></span></span></div><div class="t m0 x19 h11 y5c ff8 fsa fc0 sc1 ls40 ws0">ACTION_TIME_TICK </div><div class="t m0 x1a h12 y5d ff7 fs9 fc0 sc1 ls0 ws0">系统时间每过一分钟发出的广播<span class="ff3"> </span></div><div class="t m0 x19 h11 y5e ff8 fsa fc0 sc1 ls40 ws0">ACTION_TIME_CHANGED </div><div class="t m0 x1a h12 y5f ff7 fs9 fc0 sc1 ls0 ws0">系统时间通过设置发生了变化<span class="ff3"> </span></div><div class="t m0 x19 h11 y60 ff8 fsa fc0 sc1 ls40 ws0">ACTION_TIMEZONE_CHANGED </div><div class="t m0 x1a h12 y61 ff7 fs9 fc0 sc1 ls0 ws0">时区改变<span class="ff3"> </span></div><div class="t m0 x19 h11 y62 ff8 fsa fc0 sc1 ls40 ws0">ACTION_BOOT_COMPLETED </div><div class="t m0 x1a h12 y63 ff7 fs9 fc0 sc1 ls0 ws0">系统启动完毕<span class="ff3"> </span></div><div class="t m0 x19 h11 y64 ff8 fsa fc0 sc1 ls40 ws0">ACTION_PACKAGE_ADDED </div><div class="t m0 x1a h12 y65 ff7 fs9 fc0 sc1 ls0 ws0">新的应用程序<span class="ff8 fsa ls40">apk</span>包安装完毕<span class="ff3"> </span></div><div class="t m0 x19 h11 y66 ff8 fsa fc0 sc1 ls40 ws0">ACTION_PACKAGE_CHANGED </div><div class="t m0 x1a h12 y67 ff7 fs9 fc0 sc1 ls0 ws0">现有应用程序<span class="ff8 fsa ls40">apk</span>包改变<span class="ff3"> </span></div><div class="t m0 x19 h11 y68 ff8 fsa fc0 sc1 ls40 ws0">ACTION_PACKAGE_REMOVED </div><div class="t m0 x1a h12 y69 ff7 fs9 fc0 sc1 ls0 ws0">现有应用程序<span class="ff8 fsa ls40">apk</span>包被删除<span class="ff3"> </span></div><div class="t m0 x19 h11 y6a ff8 fsa fc0 sc1 ls40 ws0">ACTION_UID_REMOVED </div><div class="t m0 x1a h12 y6b ff7 fs9 fc0 sc1 ls0 ws0">用户<span class="ff8 fsa ls40">id</span>被删除<span class="ff3"> </span></div><div class="t m0 x7 h7 y6c ff3 fs4 fc0 sc1 ls47 wse">(3) Data<span class="ff7 ls0 ws0">描述<span class="ff3 ls1f">Intent</span>要操作<span class="_ _8"></span>的数据<span class="ff3 ls30">URI</span>和数据类型。有<span class="_ _8"></span>的动作需要对相应的数<span class="_ _8"></span>据进行处理。比</span></div><div class="t m0 x6 h8 y6d ff7 fs4 fc0 sc1 ls48 ws0">如,对于动作</div><div class="t m0 x1b h7 y6e ff8 fs5 fc0 sc1 ls14 ws0">ACTION_EDIT<span class="_ _1"></span><span class="ff7 fs4 ls48">来说,它的数据可以<span class="_ _3"></span>为联系人、短信息等可编辑的<span class="ff3 ls30">URI<span class="_ _8"></span></span>。而对于</span></div><div class="t m0 x6 h7 y6f ff8 fs5 fc0 sc1 ls14 ws0">ACTION_CALL<span class="ff7 fs4 ls0">来说,它的数据可以是一个</span>tel://<span class="ff7 fs4 ls0">格式<span class="_ _3"></span>的电话号码<span class="ff3 lsc">URI</span>。<span class="ff3"> </span></span></div><div class="t m0 x7 h7 y70 ff7 fs4 fc0 sc1 lsd ws0">正确设置<span class="ff3 ls26">Intent</span>的数据对于<span class="ff3 ls10">Android</span>寻找系统中匹配<span class="ff3 ls26">Intent<span class="_ _8"></span></span>请求的组件很重要。如果你使用了</div><div class="t m0 x6 h7 y71 ff8 fs5 fc0 sc1 ls14 ws0">ACTION_CALL<span class="ff7 fs4 lsf">,但是你的数据却设置成了<span class="_ _3"></span><span class="ff8 fs5 ls14">mailto://<span class="ff7 fs4 ls0">格式的<span class="ff3 ls30">URI</span><span class="lsf">,那么你所期望的“启动打<span class="_ _3"></span>电话</span></span></span></span></div><div class="t m0 x6 h7 y72 ff7 fs4 fc0 sc1 lsf ws0">应用程序”这一动作会因为没有与之相对应的应用程序而不会被执行<span class="_ _8"></span>。所以每次使用<span class="ff3 ls49">Intent</span><span class="ls0">时,</span></div><div class="t m0 x6 h7 y73 ff7 fs4 fc0 sc1 ls0 ws0">我们都应该留意与设置的<span class="ff3 ls33">Action</span>相关的数据类型和<span class="_ _3"></span>格式。<span class="ff3"> </span></div><div class="t m0 x7 h7 y74 ff3 fs4 fc0 sc1 ls4a wsf">(4) Category<span class="ff7 ls0 ws0">是<span class="_ _3"></span>对被请求组件的额外描述信<span class="_ _3"></span>息。<span class="ff3 ls8">Androi<span class="_ _3"></span>d<span class="ff7 ls0">也在</span></span></span></div><div class="t m0 x1c h8 y75 ff8 fs5 fc0 sc1 ls14 ws0">Intent<span class="ff7 fs4 ls0">类中定义了一组静态字符</span></div><div class="t m0 x6 h7 y76 ff7 fs4 fc0 sc1 ls0 ws0">串常量表示<span class="ff3 ls13">Intent</span><span class="ls15">不同的类别<span class="_ _8"></span>,</span><span class="ff3"> </span></div><div class="t m0 x7 h7 y77 ff3 fs4 fc0 sc1 ls11 ws0">(5) <span class="ff7 ls0">列出了常用的</span><span class="ls2a">Category<span class="ff7 ls0">常量,更<span class="_ _3"></span>多内容请参见附录<span class="ff3">A</span>。<span class="_ _3"></span><span class="ff3"> </span></span></span></div><div class="t m0 x1d hf y78 ff5 fs1 fc0 sc1 ls0 ws0">表<span class="ff6 ls44">5-3</span> <span class="_"> </span><span class="ff6"> </span></div><div class="t m0 x1e h10 y79 ff6 fs9 fc0 sc1 ls41 ws0">Category<span class="ff5 ls4b">字符串常量</span><span class="ls0"> <span class="_ _18"> </span><span class="ff5 ls3f">描<span class="_ _12"></span> 述<span class="_ _12"></span><span class="ff6 ls0"> </span></span></span></div><div class="t m0 x19 h11 y7a ff8 fsa fc0 sc1 ls40 ws0">CATEGORY_BROWSABLE </div><div class="t m0 x1f h12 y7b ff7 fs9 fc0 sc1 ls0 ws0">目标<span class="ff3 ls4c">Activity</span>能通过在网页浏览器中点击链<span class="_ _8"></span>接而激活<span class="_ _19"></span>(比如,<span class="_ _19"></span>点击浏览器中的图片链<span class="_ _8"></span>接)</div><div class="t m0 x19 h11 y7c ff8 fsa fc0 sc1 ls40 ws0">CATEGORY_GADGET </div><div class="t m0 x1f h12 y7d ff7 fs9 fc0 sc1 ls0 ws0">表示目标<span class="ff3 ls4c">Activity</span>可以被内嵌到其他<span class="ff3 ls4c">Activity</span>当中<span class="_ _8"></span><span class="ff3"> </span></div><div class="t m0 x19 h11 y7e ff8 fsa fc0 sc1 ls40 ws0">CATEGORY_HOME </div><div class="t m0 x1f h12 y7f ff7 fs9 fc0 sc1 ls0 ws0">目标<span class="ff3 ls4c">Activity</span>是<span class="ff3 ls41 ws10">HOME Activity</span>,即手机开<span class="_ _8"></span>机启动后显示的<span class="ff3 ls4c">Activity</span>,或按下<span class="ff3 ls4d">HOME<span class="_ _8"></span></span>键后</div><div class="t m0 x20 h12 y80 ff7 fs9 fc0 sc1 ls0 ws0">显示的<span class="ff3 ls4e">Activity </span></div><div class="t m0 x19 h11 y81 ff8 fsa fc0 sc1 ls40 ws0">CATEGORY_LAUNCHER </div><div class="t m0 x1f h12 y82 ff7 fs9 fc0 sc1 ls0 ws0">表示目标<span class="ff3 ls4c">Activity</span>是应用程序中最优先被执<span class="_ _8"></span>行的<span class="ff3 ls3e">Activity </span></div><div class="t m0 x19 h11 y83 ff8 fsa fc0 sc1 ls40 ws0">CATEGORY_PREFERENCE </div><div class="t m0 x1f h12 y84 ff7 fs9 fc0 sc1 ls0 ws0">表示目标<span class="ff3 ls4c">Activity</span>是一个偏好设置的<span class="ff3 ls4e">Activity </span></div><div class="t m0 x7 h7 y85 ff3 fs4 fc0 sc1 ls0 ws0"> </div><div class="t m0 x7 h7 y86 ff3 fs4 fc0 sc1 ls4f ws11">(5) Extra<span class="ff7 lsf ws0">当我们使用<span class="ff3 lse">Intent</span>连接不同的组件时,有时需要在<span class="ff3 lse">Inte<span class="_ _3"></span>nt<span class="ff7 lsf">中附加额外的信息,以便将</span></span></span></div><div class="t m0 x6 h7 y87 ff7 fs4 fc0 sc1 ls1d ws0">数据传递给目标<span class="ff3 ls9">Activity<span class="_ _8"></span></span>。比如<span class="ff8 fs5 ls14">ACTION_TIMEZONE_CHANGED<span class="_ _8"></span></span>需要带有附加信息表示新的时区。</div><div class="t m0 x6 h7 y88 ff3 fs4 fc0 sc1 ls50 ws0">Extra<span class="ff7 ls0">用键值对结构保存在<span class="_ _3"></span><span class="ff3 lse">Intent<span class="ff7 ls0">对象当中,<span class="_ _15"></span><span class="ff3 ls1f">Intent<span class="ff7 ls0">对象通过调用方法</span></span></span></span></span></div><div class="t m0 x21 h8 y89 ff8 fs5 fc0 sc1 ls14 ws0">putExtras()<span class="ff7 fs4 ls0">和</span>getExtras()</div><div class="t m0 x6 h7 y8a ff7 fs4 fc0 sc1 ls28 ws0">来存储和获取<span class="ff3 ls50">Extra</span><span class="ls0">。<span class="ff3 ls39">Extra</span></span>是以<span class="ff8 fs5 ls14">Bundle<span class="_ _8"></span></span>对象的形式来保存<span class="_ _3"></span>的,<span class="ff8 fs5 ls14">Bundle</span>对象提供了一系列<span class="ff3 ls8">put</span><span class="ls0">和<span class="ff3 ls51">get</span></span></div><div class="t m0 x6 h7 y8b ff7 fs4 fc0 sc1 lsf ws0">方法来设置、提取相应键值信息。在<span class="ff3 ls30">Intent</span>类中同样为<span class="ff3 ls10">Android</span>系统应用的一些<span class="ff3 ls1c">Action</span>所附加信息</div><div class="t m0 x6 h7 y8c ff7 fs4 fc0 sc1 ls0 ws0">的键值定义了静态的字符串常量。<span class="_ _3"></span><span class="ff3"> </span></div><div class="t m0 x22 hf y8d ff5 fs1 fc0 sc1 ls0 ws0">表<span class="ff6 ls44">5-4</span> <span class="_"> </span>常用的附加信息常量<span class="ff6"> </span></div><div class="t m0 x23 h10 y8e ff6 fs9 fc0 sc1 ls4c ws0">Extra<span class="ff5 ls0">键值字符串常量<span class="ff6"> <span class="_ _1a"> </span></span>描述<span class="ff6"> </span></span></div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62b63d5b405aad31f7fe36f5/bg4.jpg"><div class="t m0 xb hd y1 ff3 fs0 fc0 sc1 ls24 ws0">324<span class="ff1 ls2"> 第<span class="_ _9"></span><span class="ff3 ls25">11<span class="_ _11"> </span><span class="ff1 ls0">章 <span class="_"> </span>虚拟软键盘与输入法<span class="ff3"> </span></span></span></span></div><div class="t m0 xc h3 y2 ff3 fs1 fc0 sc1 ls0 ws0"> </div><div class="t m0 x14 h11 y8f ff8 fsa fc0 sc1 ls40 ws0">EXTRA_BCC </div><div class="t m0 x24 h12 y90 ff7 fs9 fc0 sc1 ls0 ws0">装有邮件密送地址的字符串数组<span class="ff3"> </span></div><div class="t m0 x14 h11 y91 ff8 fsa fc0 sc1 ls40 ws0">EXTRA_CC </div><div class="t m0 x24 h12 y92 ff7 fs9 fc0 sc1 ls0 ws0">装有邮件抄送地址的字符串数组<span class="ff3"> </span></div><div class="t m0 x14 h11 y93 ff8 fsa fc0 sc1 ls40 ws0">EXTRA_EMAIL </div><div class="t m0 x24 h12 y94 ff7 fs9 fc0 sc1 ls0 ws0">装有邮件发送地址的字符串数组<span class="ff3"> </span></div><div class="t m0 x14 h11 y95 ff8 fsa fc0 sc1 ls40 ws0">EXTRA_INTENT </div><div class="t m0 x24 h12 y96 ff7 fs9 fc0 sc1 ls52 ws0">使用<span class="ff8 fsa ls40">ACTION_PICK_ACTIVITY<span class="_ _a"> </span></span>动作时装有<span class="ff3 ls53">Intent<span class="_ _a"></span></span><span class="ls54">选项的</span></div><div class="t m0 x25 h12 y97 ff3 fs9 fc0 sc1 ls55 ws0">Key </div><div class="t m0 x14 h11 y98 ff8 fsa fc0 sc1 ls40 ws0">EXTRA_KEY_EVENT </div><div class="t m0 x24 h12 y99 ff7 fs9 fc0 sc1 ls0 ws0">触发该<span class="ff3 ls53">Intent</span><span class="ls4b">的按键的<span class="ff8 fsa ls40">KeyEvent</span>对象</span><span class="ff3"> </span></div><div class="t m0 x14 h11 y9a ff8 fsa fc0 sc1 ls40 ws0">EXTRA_PHONE_NUMBER </div><div class="t m0 x24 h12 y9b ff7 fs9 fc0 sc1 ls0 ws0">使用拨打电话相关<span class="ff3 ls56">Action</span>时,<span class="_ _3"></span>电话号码字符串的<span class="ff3 ls4d">Key</span><span class="ls57">,类</span></div><div class="t m0 x25 h13 y9c ff7 fs9 fc0 sc1 ls0 ws0">型为</div><div class="t m0 x26 h12 y9d ff8 fsa fc0 sc1 ls40 ws0">String<span class="ff3 fs9 ls0"> </span></div><div class="t m0 x14 h11 y9e ff8 fsa fc0 sc1 ls40 ws0">EXTRA_SHORTCUT_ICON </div><div class="t m0 x14 h11 y9f ff8 fsa fc0 sc1 ls40 ws0">EXTRA_SHORTCUT_ICON_RESOURCE </div><div class="t m0 x14 h11 ya0 ff8 fsa fc0 sc1 ls40 ws0">EXTRA_SHORTCUT_INTENT </div><div class="t m0 x14 h11 ya1 ff8 fsa fc0 sc1 ls40 ws0">EXTRA_SHORTCUT_NAME </div><div class="t m0 x24 h13 ya2 ff7 fs9 fc0 sc1 ls58 ws0">使用<span class="ff8 fsa ls40">ACTION_CREATE_SHORTCUT<span class="_ _1"></span></span><span class="ls0">在<span class="_ _8"></span><span class="ff8 fsa ls40">HomeActivity<span class="_ _8"></span></span><span class="ls59">创建快</span></span></div><div class="t m0 x25 h13 ya3 ff7 fs9 fc0 sc1 ls5a ws0">捷方式时,对快捷方式的描述<span class="_ _3"></span>信息。其中</div><div class="t m0 x9 h13 ya4 ff8 fsa fc0 sc1 ls40 ws0">ICON<span class="_ _1b"> </span><span class="ff7 fs9 ls0">和</span></div><div class="t m0 x25 h13 ya5 ff8 fsa fc0 sc1 ls40 ws0">ICON_RESOURCE<span class="_ _1"></span><span class="ff7 fs9 ls5b">描述的是快捷方式<span class="_ _3"></span>的图标,类型分别为</span></div><div class="t m0 x25 h13 ya6 ff8 fsa fc0 sc1 ls40 ws0">Bitmap<span class="_ _8"></span><span class="ff7 fs9 ls0">和<span class="_ _8"></span></span>ShortcutIconResource<span class="_ _1"></span><span class="ff7 fs9 ls0">。</span>INTENT<span class="_ _1"></span><span class="ff7 fs9 ls5c">描述<span class="_ _3"></span>的是快捷</span></div><div class="t m0 x25 h12 ya7 ff7 fs9 fc0 sc1 ls0 ws0">方式相对应的<span class="ff3 ls5d">Intent</span>对象。</div><div class="t m0 x21 h12 ya8 ff8 fsa fc0 sc1 ls40 ws0">NAME<span class="ff7 fs9 ls0">描述的是快捷方式的名字<span class="ff3"> </span></span></div><div class="t m0 x14 h11 ya9 ff8 fsa fc0 sc1 ls40 ws0">EXTRA_SUBJECT </div><div class="t m0 x24 h12 yaa ff7 fs9 fc0 sc1 ls0 ws0">描述信息主题的<span class="ff3 ls55">Key </span></div><div class="t m0 x14 h11 y3c ff8 fsa fc0 sc1 ls40 ws0">EXTRA_TEXT </div><div class="t m0 x24 h13 yab ff7 fs9 fc0 sc1 ls0 ws0">使用<span class="ff8 fsa ls40">ACTION_SEND</span>动作时,用来描述要发送的文本<span class="_ _8"></span>信息,</div><div class="t m0 x25 h13 yac ff7 fs9 fc0 sc1 ls0 ws0">类型为</div><div class="t m0 x27 h12 yad ff8 fsa fc0 sc1 ls40 ws0">CharSequence<span class="ff3 fs9 ls0"> </span></div><div class="t m0 x14 h11 yae ff8 fsa fc0 sc1 ls40 ws0">EXTRA_TITLE </div><div class="t m0 x24 h12 y3d ff7 fs9 fc0 sc1 ls5e ws0">使用<span class="ff8 fsa ls40">ACTION_CHOOSER</span><span class="ls5f">动作时,描述对话框标题的<span class="ff3 ls60">Key</span><span class="ls0">,</span></span></div><div class="t m0 x25 h13 yaf ff7 fs9 fc0 sc1 ls0 ws0">类型为</div><div class="t m0 x27 h12 yb0 ff8 fsa fc0 sc1 ls40 ws0">CharSequence<span class="ff3 fs9 ls0"> </span></div><div class="t m0 x14 h11 yb1 ff8 fsa fc0 sc1 ls40 ws0">EXTRA_UID </div><div class="t m0 x24 h13 yb2 ff7 fs9 fc0 sc1 ls0 ws0">使用<span class="ff8 fsa ls40">ACTION_UID_REMOVED</span>动作时,<span class="_ _2"></span>描述删除的用户<span class="ff8 fsa ls40">id</span>的</div><div class="t m0 x25 h12 yb3 ff3 fs9 fc0 sc1 ls60 ws0">Key<span class="ff7 ls0">,类型为</span></div><div class="t m0 x28 h12 yb4 ff8 fsa fc0 sc1 ls40 ws0">int<span class="ff3 fs9 ls0"> </span></div><div class="t m0 xd h9 yb5 ff5 fs2 fc0 sc1 ls0 ws0">解析<span class="_ _5"> </span><span class="ff6 ls12">Intent </span></div><div class="t m0 xe h7 yb6 ff3 fs4 fc0 sc1 lse ws0">Intent<span class="ff7 lsf">是一种在不同组件之间传递的请求消息,是应用程序<span class="_ _8"></span>发出的请求和意图。作为一个完</span></div><div class="t m0 xd h7 yb7 ff7 fs4 fc0 sc1 ls0 ws0">整的消息传递机制,<span class="ff3 lse">Inte<span class="_ _3"></span>nt<span class="ff7 ls0">不仅需要发送端,还需要接<span class="_ _3"></span>收端。<span class="ff3 lsc">Android</span>如何解析<span class="ff3 lse">Intent</span>的请求内容,</span></span></div><div class="t m0 xd h7 yb8 ff7 fs4 fc0 sc1 ls0 ws0">并选择合适的组件响应<span class="ff3 ls1a">Intent</span>请求呢?我们马上就一起<span class="_ _3"></span>来学习这个内容。<span class="ff3"> </span></div><div class="t m0 xd he yb9 ff5 fs8 fc0 sc1 ls0 ws0">显式<span class="_ _1c"> </span><span class="ff6 ls36">Intent<span class="_ _11"> </span></span>和隐式<span class="_ _1c"> </span><span class="ff6 ls61">Intent </span></div><div class="t m0 xe h7 yba ff7 fs4 fc0 sc1 ls0 ws0">对于明确指出了目标组件名称的<span class="ff3 ls1f">Intent</span>,<span class="_ _1d"></span>我们称之为<span class="_ _1d"></span>“显式<span class="ff3 ls1f">Intent</span>”<span class="_ _c"></span>。<span class="_ _2"></span>对于没有明确指出目标组</div><div class="t m0 xd h7 ybb ff7 fs4 fc0 sc1 ls0 ws0">件名称的<span class="ff3 ls1a">Intent</span>,则称之为<span class="_ _15"></span>“隐式<span class="ff3 ls1f">Intent</span>”<span class="_ _c"></span>。<span class="ff3 ls8">Androi<span class="_ _3"></span>d<span class="ff7 ls0">系统使用</span><span class="ls2d ws12">Intent Filter </span><span class="ff7 ls0">来寻找与隐式</span><span class="ls1f">Intent<span class="ff7 ls15">相关的</span></span></span></div><div class="t m0 xd h7 ybc ff7 fs4 fc0 sc1 ls0 ws0">对象。<span class="_ _c"></span>(关于<span class="ff3 ls9 ws13">Intent Filter</span>我们马上就会讲到。<span class="_ _c"></span>)<span class="ff3"> </span></div><div class="t m0 xe h7 ybd ff7 fs4 fc0 sc1 lsf ws0">显式<span class="ff3 ls1f">Intent</span>直接用<span class="_ _8"></span>组件的名称定义目标组件,这种方式很直接。但是由于<span class="_ _8"></span>开发人员往往并不</div><div class="t m0 xd h7 ybe ff7 fs4 fc0 sc1 lsf ws0">清楚别的应用程序的组件名称,因此,显式<span class="ff3 ls49">Intent</span>更多用于在应用程序内部传递消<span class="_ _8"></span>息。比如在某</div><div class="t m0 xd h7 ybf ff7 fs4 fc0 sc1 ls0 ws0">应用程序内,一个<span class="ff3 ls9">Activity</span>启动一个<span class="ff3 ls18">Service</span>。隐式<span class="ff3 ls26">Intent</span>恰恰相反,它不会用组件名称定义需要激</div><div class="t m0 xd h7 yc0 ff7 fs4 fc0 sc1 ls0 ws0">活的目标组件,它更广泛地用于在不<span class="_ _3"></span>同应用程序之间传递消息。<span class="_ _3"></span><span class="ff3"> </span></div><div class="t m0 xe h7 yc1 ff7 fs4 fc0 sc1 lsd ws0">清楚了显式<span class="ff3 ls62">Intent</span>和隐式<span class="ff3 lse">Intent</span>的概念后,我们再来看看决定<span class="ff3 lse">Intent</span>目标组件的因素。在显式</div><div class="t m0 xd h7 yc2 ff3 fs4 fc0 sc1 lse ws0">Intent<span class="ff7 ls0">消息中,决定目标组<span class="_ _3"></span>件的唯一要素就是组件名称<span class="_ _3"></span>,因此,如果你的<span class="ff3 ls1f">Intent</span>中已经明确定义了</span></div><div class="t m0 xd h7 yc3 ff7 fs4 fc0 sc1 ls0 ws0">目标组件的名称,那么你就完全不用<span class="_ _3"></span>再定义其他<span class="ff3 ls1f">Intent</span>内容。而对于隐式<span class="ff3 ls1f">Intent</span>则不同,由于没有</div><div class="t m0 xd h7 yc4 ff7 fs4 fc0 sc1 ls0 ws0">明确的目标组件名称,<span class="_ _c"></span>所以必须由<span class="_ _3"></span><span class="ff3 lsc">Android<span class="ff7 ls0">系统帮助应用程序寻找与</span><span class="lse">Intent<span class="ff7 ls0">请求意图最匹配<span class="_ _3"></span>的组件。</span></span></span></div><div class="t m0 xd h7 yc5 ff7 fs4 fc0 sc1 ls0 ws0">具体的选择方法是:<span class="_ _4"></span><span class="ff3 lsc">Android<span class="ff7 ls0">将</span><span class="ls1f">Intent<span class="_ _8"></span><span class="ff7 ls0">的请求内容和一个叫做</span><span class="ls2f ws14">Intent Filter</span><span class="ff7 ls0">的过滤器比较,<span class="_ _4"></span><span class="ff3 ls2f ws15">Intent Filter</span></span></span></span></div><div class="t m0 xd h7 yc6 ff7 fs4 fc0 sc1 ls0 ws0">中包含系统中所有可能的待选组件<span class="_ _3"></span>。<span class="_ _1d"></span>如果<span class="ff3 ls63 ws16">Intent Filter</span>中某一组件匹配隐式<span class="ff3 ls1f">Intent</span>请求的内容,<span class="_ _4"></span>那么</div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62b63d5b405aad31f7fe36f5/bg5.jpg"><div class="t m0 x29 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">解析<span class="_ _0"> </span><span class="ff2 sc1 ls1">Intent<span class="ff1 ls2"> <span class="ff3 ls3">325 </span></span></span></div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc1 ls0 ws0"> </div><div class="t m0 x3 h4 y3 ff4 fs2 fc1 sc1 ls4 ws0">2 </div><div class="t m0 x3 h4 y4 ff4 fs2 fc1 sc1 ls4 ws0">3 </div><div class="t m0 x3 h4 y5 ff4 fs2 fc1 sc1 ls4 ws0">4 </div><div class="t m0 x3 h4 y6 ff4 fs2 fc1 sc1 ls4 ws0">5 </div><div class="t m0 x3 h4 y7 ff4 fs2 fc1 sc1 ls4 ws0">6 </div><div class="t m0 x3 h4 y8 ff4 fs2 fc1 sc1 ls4 ws0">7 </div><div class="t m0 x3 h4 y9 ff4 fs2 fc1 sc1 ls4 ws0">8 </div><div class="t m0 x3 h4 ya ff4 fs2 fc1 sc1 ls5 ws0">10 </div><div class="t m0 x3 h4 yb ff4 fs2 fc1 sc1 ls4 ws0">9 </div><div class="t m0 x3 h4 yc ff4 fs2 fc1 sc1 ls6 ws0">11<span class="_ _1"></span> </div><div class="t m0 x3 h4 yd ff4 fs2 fc1 sc1 ls5 ws0">13 </div><div class="t m0 x3 h4 ye ff4 fs2 fc1 sc1 ls5 ws0">12 </div><div class="t m0 x3 h4 yf ff4 fs2 fc1 sc1 ls4 ws0">1 </div><div class="t m0 x6 h7 y2e ff3 fs4 fc0 sc1 lsc ws0">Android<span class="ff7 ls0">就选择该组件作为该隐式</span><span class="lse">Intent<span class="ff7 ls0">的目标组件。<span class="_ _3"></span><span class="ff3"> </span></span></span></div><div class="t m0 x7 h7 y2f ff3 fs4 fc0 sc1 lsc ws0">Android<span class="_ _1b"> </span><span class="ff7 ls64">如何知道应用程序<span class="_ _8"></span>能够处理某种类型的</span><span class="lse">Intent<span class="_ _1b"> </span><span class="ff7 ls64">请求呢?这需要应用<span class="_ _8"></span>程序在</span></span></div><div class="t m0 x6 h7 y31 ff8 fs5 fc0 sc1 ls14 ws0">AndroidManifest.xml<span class="ff7 fs4 ls0">中声明自己所含组件的过滤器<span class="_ _4"></span>(即可以匹配<span class="_ _3"></span>哪些<span class="ff3 ls1f">Intent</span><span class="ls15">请求)<span class="_ _c"></span>。<span class="_ _1d"></span>一个没有声</span></span></div><div class="t m0 x6 h7 y32 ff7 fs4 fc0 sc1 ls0 ws0">明<span class="ff3 ls18 ws17">Intent Filter</span>的组件只能响应指明自己名字的显式<span class="ff3 ls26">Intent</span>请求,而无法响应隐式<span class="ff3 ls49">Intent</span>请求。而一</div><div class="t m0 x6 h7 y33 ff7 fs4 fc0 sc1 ls65 ws0">个声明了<span class="ff3 ls63 ws18">Intent Filter<span class="_ _8"></span></span>的组件既可以响应显式<span class="ff3 ls49">Intent<span class="_ _8"></span></span>请求,也可以响应隐式<span class="ff3 ls62">Intent</span>请求。在通过和</div><div class="t m0 x6 h7 y34 ff3 fs4 fc0 sc1 ls66 ws19">Intent Filter<span class="ff7 ls0 ws0">比较来解析隐式<span class="ff3 lse">Intent<span class="_ _3"></span><span class="ff7 ls0">请求时,<span class="ff3 ls32">Android</span>将以下三个因素作为选择的参考标准。<span class="ff3"> </span></span></span></span></div><div class="t m0 x2a h14 yc7 ffa fsa fc0 sc1 ls0 ws0"><span class="ff6"> </span></div><div class="t m0 x2b h7 yc8 ff3 fs4 fc0 sc1 ls9 ws0">Action </div><div class="t m0 x2a h14 yc9 ffa fsa fc0 sc1 ls0 ws0"><span class="ff6"> </span></div><div class="t m0 x2b h7 yca ff3 fs4 fc0 sc1 ls67 ws0">Data </div><div class="t m0 x2a h14 ycb ffa fsa fc0 sc1 ls0 ws0"><span class="ff6"> </span></div><div class="t m0 x2b h7 ycc ff3 fs4 fc0 sc1 ls2b ws0">Category<span class="_ _3"></span> </div><div class="t m0 x7 h7 ycd ff7 fs4 fc0 sc1 ls0 ws0">而<span class="ff3 ls50">Entra</span>和<span class="ff3 ls38">Flag</span>在解析收到<span class="ff3 ls13">Intent</span>时是并不起作用的。<span class="_ _3"></span><span class="ff3"> </span></div><div class="t m0 x6 he yce ff6 fs8 fc0 sc1 ls68 wsc">Intent Filter </div><div class="t m0 x7 h7 ycf ff7 fs4 fc0 sc1 ls0 ws0">应用程序的组件为了告诉<span class="ff3 ls32">Android</span>自己能响应、处理哪些隐式<span class="ff3 ls1f">Intent</span>请求,可以声<span class="_ _3"></span>明一个甚至</div><div class="t m0 x6 h7 yd0 ff7 fs4 fc0 sc1 ls0 ws0">多个<span class="ff3 ls2f ws14">Intent Filter</span><span class="ls69">。每<span class="_ _1"></span>个<span class="_ _1"></span><span class="ff3 ls63 ws16">Intent Filter</span></span>描述该组件所能响应<span class="_ _3"></span><span class="ff3 lse">Intent<span class="ff7 ls0">请求的能力——组件<span class="_ _3"></span>希望接收什么类</span></span></div><div class="t m0 x6 h8 yd1 ff7 fs4 fc0 sc1 ls0 ws0">型的请求行为,<span class="_ _6"></span>什么类型的请求数据。<span class="_ _2"></span>比如之前请求网页浏览器这个例子中,<span class="_ _6"></span>网页浏览器程序的</div><div class="t m0 x6 h7 yd2 ff3 fs4 fc0 sc1 ls63 ws1a">Intent Filter<span class="ff7 lsf ws0">就应该声明它所希望接收的</span><span class="ls20 ws1b">Intent Action<span class="ff7 ls0 ws0">是</span></span></div><div class="t m0 x2c h8 yd3 ff8 fs5 fc0 sc1 ls14 ws0">WEB_SEARCH_ACTION<span class="ff7 fs4 lsf">,以及与之相关的请</span></div><div class="t m0 x6 h7 yd4 ff7 fs4 fc0 sc1 ls0 ws0">求数据是网页地址<span class="ff3 lsa">URI</span>格式<span class="_ _3"></span>。<span class="ff3"> </span></div><div class="t m0 x7 h7 yd5 ff7 fs4 fc0 sc1 ls22 ws0">如何为组件声明自己的<span class="ff3 ls2d ws1c">Intent Filter? </span>常见的方法是在</div><div class="t m0 x2d h8 yd6 ff8 fs5 fc0 sc1 ls14 ws0">AndroidManifest.xml<span class="ff7 fs4 ls22">文件中用属<span class="_ _8"></span>性</span></div><div class="t m0 x6 h7 yd7 ff8 fs5 fc0 sc1 ls14 ws0"><Intent-Filter><span class="ff7 fs4 ls0">描述组件的<span class="ff3 ls6a ws1d">Intent Filter</span>。<span class="ff3"> </span></span></div><div class="t m0 x7 h7 yd8 ff7 fs4 fc0 sc1 ls0 ws0">前面我们提到,<span class="_ _6"></span>隐式<span class="ff3 ls1f">Intent</span>和<span class="ff3 ls2f ws15">Intent Filter</span>进行比较时的三要素是<span class="ff3 ls1a">Intent</span>的动作、<span class="_ _7"></span>数据以及类别。</div><div class="t m0 x6 h7 yd9 ff7 fs4 fc0 sc1 lsf ws0">实际上,一个隐式<span class="ff3 ls49">Intent</span>请求要能够传递给目标组件,必要通过这三个方面的检查<span class="_ _8"></span>。如果任何一</div><div class="t m0 x6 h7 yda ff7 fs4 fc0 sc1 ls0 ws0">方面不匹配,<span class="ff3 lsc">Android</span>都不会将该隐式<span class="ff3 ls1f">Intent</span>传递给目标组件。接下来我们讲解这<span class="_ _3"></span>三方面检查的具</div><div class="t m0 x6 h7 ydb ff7 fs4 fc0 sc1 ls0 ws0">体规则。<span class="ff3"> </span></div><div class="t m0 x7 h15 ydc ff6 fs4 fc0 sc1 ls0 ws0">1<span class="ff5">.动作测试</span> </div><div class="t m0 x2 h7 ydd ff8 fs5 fc0 sc1 ls14 ws0"><intent-filter><span class="ff7 fs4 ls0">元素中可以包括子元素</span><action><span class="ff7 ls0">,<span class="_ _15"></span><span class="fs4">比如:<span class="ff3"> </span></span></span></div><div class="t m0 x7 h16 yde ffb fs4 fc0 sc1 ls63 ws0"><intent-filter> </div><div class="t m0 x7 h16 ydf ffb fs4 fc0 sc1 ls63 ws0"> <action android:name="com.example.project.SHOW_CURRENT" /> </div><div class="t m0 x7 h16 ye0 ffb fs4 fc0 sc1 ls63 ws0"> <action android:name="com.example.project.SHOW_RECENT" /> </div><div class="t m0 x7 h16 ye1 ffb fs4 fc0 sc1 ls63 ws0"> <action android:name="com.example.project.SHOW_PENDING" /> </div><div class="t m0 x7 h16 ye2 ffb fs4 fc0 sc1 ls63 ws0"></intent-filter> </div><div class="t m0 x7 h8 ye3 ff7 fs4 fc0 sc1 ls1d ws0">一条</div><div class="t m0 x18 h7 ye4 ff8 fs5 fc0 sc1 ls14 ws0"><intent-filter><span class="_ _8"></span><span class="ff7 fs4 ls1d">元素至少应该包含一个</span><ac<span class="_ _3"></span>tion><span class="_ _8"></span><span class="ff7 fs4 ls65">,否则任何<span class="ff3 ls1f">In<span class="_ _8"></span>tent<span class="_ _8"></span></span><span class="ls1d">请求都不能和该</span></span></div><div class="t m0 x6 h7 ye5 ff8 fs5 fc0 sc1 ls14 ws0"><intent-filter><span class="ff7 fs4 ls0">匹配。<span class="ff3"> </span></span></div><div class="t m0 x7 h7 ye6 ff7 fs4 fc0 sc1 ls28 ws0">如果<span class="ff3 ls49">Intent</span>请求的</div><div class="t m0 x2e h7 ye7 ff8 fs5 fc0 sc1 ls14 ws0">Action<span class="ff7 fs4 ls0">和<span class="_ _8"></span></span><intent-filter><span class="ff7 fs4 ls28">中个某一条</span><action><span class="_ _8"></span><span class="ff7 fs4 ls28">匹配,那么该<span class="ff3 ls49">Intent</span>就通</span></div><div class="t m0 x6 h8 ye8 ff7 fs4 fc0 sc1 ls0 ws0">过了这条</div><div class="t m0 x18 h7 ye9 ff8 fs5 fc0 sc1 ls14 ws0"><intent-filter><span class="ff7 fs4 ls0">的动作测试。<span class="ff3"> </span></span></div><div class="t m0 x7 h7 yea ff7 fs4 fc0 sc1 ls0 ws0">如果<span class="ff3 ls1f">Intent</span><span class="ls15">请求或</span></div><div class="t m0 x2f h8 yeb ff8 fs5 fc0 sc1 ls14 ws0"><intent-filter><span class="ff7 fs4 ls0">中没有说明具体的</span>Action<span class="ff7 fs4 ls0">类型,那<span class="_ _3"></span>么会出现下面两种情</span></div><div class="t m0 x6 h7 yec ff7 fs4 fc0 sc1 ls0 ws0">况。<span class="ff3"> </span></div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>