记录:IntentIntent过滤器和通用Intent
Posted 幽反丶叛冥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录:IntentIntent过滤器和通用Intent相关的知识,希望对你有一定的参考价值。
摘要:现在可以看中文的部分文档,可是内容真心不好记。看过之后就无名的又忘记了。还是摘抄一道的方式去加深记忆和当做一次笔记方便后面自己快速查找。记录一下,Intent,Intent的过滤和 常用的通用 Intent
Intent
intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中链接两个不同的组件。通过 intent,你的程序可以向 android表带某种请求或者意愿,Android会根据意愿的内容适当的组件来完成请求。比如,有一个 activity 希望打开网页浏览器查看某一网页内容,那么这个activity 只需要发出 WEB_SEARCH_ACTION给Android,Android就会根据 intent的请求内容,查询个组件注册是声明的 intentFilter,找到网页浏览器的 activity 来浏览网页。Android的三个基本组件——Activity,Service和Broadcast Receiver都是通过intent机制激活的,不同类型的组件有不同的传递intent:
●启动 Activity
Activity 表示应用中的一个屏幕。通过将 intent 传递给 startactivity( ),你可以启动新的 Activity实例。Intent 描述了要启动的 Activity,并携带了任何必要的数据。相应的 activity 可以通过 getIntent( )方法来查看激活它的 intent。Android 通过调用 activity的 onNewIntent( )方法来传递给它激发的 intent。
如果你希望在 Activity完成后收到结果,可以使用 startActivityForResult( )。在 Activity 的 onActivityResult()回调中,你的Activity将结果作为单独的 intent 对象接收。比如,如果它启动了另一个activity已使用户挑选一张照片,它也许想知道那张照片被选中了。结果将会被封装在一个 intent对象中,并传递给发出调用的activity的onActivityResult( )方法。
●启动 Service
service是一个不使用用户界面而在后台执行操作的组件。通过将 intent传递给 startService( ),可以启动服务执行一次性操作(例如:下载文件)。intent描述了要启动的服务,并携带了任何必要的数据。
如果服务旨在使用客服单-服务器接口,则通过将 intent 传递给 bindService( ),可以从其它组件绑定到此服务。
●传递广播
广播是任何应用均可以接收的消息。系统将针对系统时间(例如:系统启动或设备开始充电时)传递各种广播。通过将 intent 传递给 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast(),发送之后,所有已注册的并且拥有与之相匹配 intentFilter 的 Broadcast就会被激活。
intent一旦发出,Android都会准确找到相匹配的一个或者多个 Activity,service或者BroadcastReceiver做响应。所以,不同类型的intent消息不会出现重叠,即Broadcast的intent消息只会发送给 Broadcastreceiver,而决定不会发送给 activity或者 service。由startactivity( )传递消息也只会发给activity,由startService()传递的Intent只会发送给Service。
intent类型
intent分为 两种类型:
●显示 intent:按名称(完全限定类名)指定要启动的组件。指定 component属性的intent(调用setComponentName)或者setClass(Context context,Class clz)。通过指定具体的组件类,通知应用启动对应的组件。
Intent intent = new Intent();
// 构造的参数为当前Context和目标组件的类路径名
ComponentName cn = new ComponentName(HelloActivity.this, "com.hu.smaple.OtherActivity");
intent.setComponent(cn);
startActivity(intent);
相当于以下常用方法:
Intent intent = new Intent();
intent.setClass(HelloActivity.this, OtherActivity.class);
startActivity(intent);
Intent intent = new Intent();
intent.setClass(Context packageContext, OtherActivity.class);
startActivity(intent);
●
隐式 intent:不指定特定的组件,声明要执行的常规操作,从而允许其它应用中的组件来处理它。例如,如果需要地图上向用户显示位置,则可以使用隐式intent,请求里有一个具有此功能的应用在地图上显示指定的位置。
创建隐式intent时,Android系统通过将intent的内容与在设备上其他应用的清单文件中声明的 intent 过滤器进行比较,从而找到要启动的相应的组件。如果 intent与intent过滤匹配,则系统将启动组件。并向其传递intent对象。如果多个intent过滤器兼容,则系统会显示一个对话框,支持用户选取要使用的应用。
intent过滤器是应用清单文件中的一个表达式,它指定该组件要接收的intent类型。例如:通过为 activity声明intent过滤器,你可以会用其它应用能够直接使用某一特定类型的 intent 启动 activity。同样,如果没有给activity声明任何intent过滤器,则 activity只能通过显示 intent启动。
以上是关于记录:IntentIntent过滤器和通用Intent的主要内容,如果未能解决你的问题,请参考以下文章