- 浏览: 74654 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wangkuichina:
此event坐标单位是什么呢?
android view的触摸事件坐标 -
coolismonster:
正好用得到 谢谢分享
android文件夹管理器 -
shim:
HashMap不是线程安全的,这么搞有风险
Gallery异步加载图片 -
Lifehopeness:
谢谢分享
android自定义带多选框的listview并避免出现自动选中另外选项 -
czbnlzd920706:
Acitivity中 44行 stopS ...
android音乐播放器拖放播放进度设计
原文地址:http://www.apkbus.com/android-1386-1-1.html
一.Intent接收原理
當使用者發送一個intent出來,要求元件去執行動作,如果這個intent裡有很清楚的設定了ComponentName,那麼intent就會直接被送到指定的元件,並啟動該元件,如果沒有設定,則會由Android系統自動去判斷該把這intent送到哪個元件上啟動他。
大多數在本身專案內元件可以處理的動作,intent通常都會直接指明要給哪個元件處理,如果沒有指定元件名稱的intent大多是用來啟動其他Application上的元件
二.Intent Filter的作用
Android系統如何判斷哪個元件可以接收哪個intent,就是依靠在ManiFest檔案內,宣告元件(Activity,Service)時所加入的Intent Filter設定,每個Activity內可以設定0~多組的intent filter,每一組的Intent Filter都是一份比對規則
當intent發出來時,系統會去檢查Manifest內各元件內的intent filter,而啟動適合的元件,若元件沒有設定filter,那就只能接收到有清楚指定component的intent
三.Intent Filter
Intent filter內會設定的資料包括action,data與category三種。也就是說filter只會與intent裡的這三種資料做比對動作,而在每個filter內可以同時存在著多個data action與category
雖然每個Intent Filter都屬於IntentFilter類別,但因Android系統在元件啟動錢就必需測試其相容性,所以Intent Filter都是以XML方式寫在AndroidManifest.xml檔內,而不以Java Code去產生。唯一的例外是broadcast receivers的intent filter可以透過Context.registerReceiver()來動態設定
例
在註冊時,把filter動態加入
Intent Filter內要設定的值,包括action,data與category都定義在Intent Class內,也就是說在Intent物件內設定這3種資料的值與Intent Filter內要設定這3種資料的值都定義在Intent Class內,在JavaCode裡,可以透過Class引用參數,但在Manifest內設定,需要設定字串值,就要去查Class內參數實體的字串值
例:Manifest.xml設定filter
JavaCode設定intent Object的Category
四.Intent Test 找到要接收intent的元件
當intent發出來時,會與元件在Manifest內所定義的intent filter做比對,比對時需進行3個test,當這3個test都通過時,才會確認這元件可以接手處理這Intent。若同時有不只一個的Activity或Service通過Test,那系統會問你要啟動哪一個,若都不符合,則會發生錯誤
五.Intent Test-Action Test
1.當一個intent object若沒有指定Action,則這項pass2.filter內至少要有一項action,若都沒有就沒有任何intent 可以通過這filter
例
六.Intent Test-Category Test
1.若intent有設定Category,必須intent object可以通過所有filter設定 的Category,Test才會pass2.若intent沒有設定Category,則設定pass3.當執行startActivity()而使用沒有明確設定目標的intent,都會當作他 至少會有一個Category: Intent.CATEGORY_DEFAULT (也就是"android.intent.category.DEFAULT")
因此若Activity要能夠接收到這intent,則在Mainfest內定義這Activity的intent filter部份需要有Category為"android.intent.category.DEFAULT"的值,才會有可能接收到,也就是說在Manifest內的Activity,至少要有Intent.CATEGORY_DEFAUL(也就是"android.intent.category.DEFAULT")的值,而在已經設定為啟動的Activity內多設定Intent.CATEGORY_DEFAUL,也可以但並無用處
在filter內設定category值,需設定完整字串值,這部份查Intent Class,因為在xml tag接受的值是字串,而在Java Code內設定intent的Category就可以用Class的常數去書寫
七.Intent Test-Data Test
每個data tag都包含了URI與data type (MIME media type)
而URI會以scheme, host, port,與 path來表示
也就是可以把一個完整的URI看成
scheme://host:port/path
若host沒指定,則port可略
data type可以用*代表允許任何型態的資料
如text/*" or "audio/*"
例
URI為
data在filter與intent內data比對的原則是1.當filter內沒有設定任何data tag,而intent內也沒有設定URI與data type, 那這test就通過2.當filter有設定URI,沒有設定data type,而intent object也是只有URI沒有 data type,這時候通過,這通常只會發生在mailto: 與tel: 時3.當filter內只有設定data type 沒有設定URI,而intent object有設定相同 的data type無URI則通過4.當filter內設定的data type與URI都與intent Object內設定的對應即通過 若filter內只有設定data type而URI不設定,只有在intent Object內的 data type有對應,而URI為content: 或file:才會通過
八.Example
1.設定元件可以顯示local端 任何Image檔案
當要由local contentProvider顯示檔案,這樣寫即可,不需再指定URI部份用content:或file:
2.設定允許播放來自internet的任何影片檔
當使用者透過web page連結要開啟一個資源,會先使用html page開啟看看,若不行,則會與未指定對象
的intent一樣,去查找哪一個Activity適合去開啟這個資源,若不知道,則會開啟Download Manager去下載
3.設定啟動預設執行的Activity
不需透過任何intent去觸發,在開啟App即會自動執行這個Activity
九.Intent與Intent Filter
Intent Filter的作用,不僅是找出intent所要啟動的元件,還包括了設定元件該出現在Device的相關訊息
例如在Filter內設定了
"android.intent.action.MAIN"與"android.intent.category.LAUNCHER"
這元件會出現在device最上層的Launch清單上
若元件的filter設定了android.intent.category.HOME"
那這元件就會顯示在Home screen上
利用PackageManager Class的相關method針對指定intent找出適合的元件
透過query..() method可以讓你找到可以接收指定intent的component透過resolve..()可以找到最適合接收指定intent的component
例如queryIntentActivities()可以取得所有適合的Activity清單
一.Intent接收原理
當使用者發送一個intent出來,要求元件去執行動作,如果這個intent裡有很清楚的設定了ComponentName,那麼intent就會直接被送到指定的元件,並啟動該元件,如果沒有設定,則會由Android系統自動去判斷該把這intent送到哪個元件上啟動他。
大多數在本身專案內元件可以處理的動作,intent通常都會直接指明要給哪個元件處理,如果沒有指定元件名稱的intent大多是用來啟動其他Application上的元件
二.Intent Filter的作用
Android系統如何判斷哪個元件可以接收哪個intent,就是依靠在ManiFest檔案內,宣告元件(Activity,Service)時所加入的Intent Filter設定,每個Activity內可以設定0~多組的intent filter,每一組的Intent Filter都是一份比對規則
當intent發出來時,系統會去檢查Manifest內各元件內的intent filter,而啟動適合的元件,若元件沒有設定filter,那就只能接收到有清楚指定component的intent
三.Intent Filter
Intent filter內會設定的資料包括action,data與category三種。也就是說filter只會與intent裡的這三種資料做比對動作,而在每個filter內可以同時存在著多個data action與category
雖然每個Intent Filter都屬於IntentFilter類別,但因Android系統在元件啟動錢就必需測試其相容性,所以Intent Filter都是以XML方式寫在AndroidManifest.xml檔內,而不以Java Code去產生。唯一的例外是broadcast receivers的intent filter可以透過Context.registerReceiver()來動態設定
例
Context.registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
在註冊時,把filter動態加入
Intent Filter內要設定的值,包括action,data與category都定義在Intent Class內,也就是說在Intent物件內設定這3種資料的值與Intent Filter內要設定這3種資料的值都定義在Intent Class內,在JavaCode裡,可以透過Class引用參數,但在Manifest內設定,需要設定字串值,就要去查Class內參數實體的字串值
例:Manifest.xml設定filter
<intent-filter . . . > <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> . . . </intent-filter>
JavaCode設定intent Object的Category
intent.setCategory(Intent.CATEGORY_DEFAULT);
四.Intent Test 找到要接收intent的元件
當intent發出來時,會與元件在Manifest內所定義的intent filter做比對,比對時需進行3個test,當這3個test都通過時,才會確認這元件可以接手處理這Intent。若同時有不只一個的Activity或Service通過Test,那系統會問你要啟動哪一個,若都不符合,則會發生錯誤
五.Intent Test-Action Test
1.當一個intent object若沒有指定Action,則這項pass2.filter內至少要有一項action,若都沒有就沒有任何intent 可以通過這filter
例
<intent-filter . . . > <action android:name="com.example.project.SHOW_CURRENT" /> <action android:name="com.example.project.SHOW_RECENT" /> . . . </intent-filter>
六.Intent Test-Category Test
1.若intent有設定Category,必須intent object可以通過所有filter設定 的Category,Test才會pass2.若intent沒有設定Category,則設定pass3.當執行startActivity()而使用沒有明確設定目標的intent,都會當作他 至少會有一個Category: Intent.CATEGORY_DEFAULT (也就是"android.intent.category.DEFAULT")
因此若Activity要能夠接收到這intent,則在Mainfest內定義這Activity的intent filter部份需要有Category為"android.intent.category.DEFAULT"的值,才會有可能接收到,也就是說在Manifest內的Activity,至少要有Intent.CATEGORY_DEFAUL(也就是"android.intent.category.DEFAULT")的值,而在已經設定為啟動的Activity內多設定Intent.CATEGORY_DEFAUL,也可以但並無用處
在filter內設定category值,需設定完整字串值,這部份查Intent Class,因為在xml tag接受的值是字串,而在Java Code內設定intent的Category就可以用Class的常數去書寫
七.Intent Test-Data Test
每個data tag都包含了URI與data type (MIME media type)
而URI會以scheme, host, port,與 path來表示
也就是可以把一個完整的URI看成
scheme://host:port/path
若host沒指定,則port可略
data type可以用*代表允許任何型態的資料
如text/*" or "audio/*"
例
URI為
content://com.example.project:200/folder/subfolder/etc 則設定Filter的寫法為 <intent-filter . . . > <data android:mimeType="video/mpeg" android:scheme="content" android:host="com.example.project" android:port="200" android:path="folder/subfolder/etc"/> <data android:mimeType="audio/mpeg" android:scheme="http" . . . /> . . . </intent-filter>
data在filter與intent內data比對的原則是1.當filter內沒有設定任何data tag,而intent內也沒有設定URI與data type, 那這test就通過2.當filter有設定URI,沒有設定data type,而intent object也是只有URI沒有 data type,這時候通過,這通常只會發生在mailto: 與tel: 時3.當filter內只有設定data type 沒有設定URI,而intent object有設定相同 的data type無URI則通過4.當filter內設定的data type與URI都與intent Object內設定的對應即通過 若filter內只有設定data type而URI不設定,只有在intent Object內的 data type有對應,而URI為content: 或file:才會通過
八.Example
1.設定元件可以顯示local端 任何Image檔案
<data android:mimeType="image/*" />
當要由local contentProvider顯示檔案,這樣寫即可,不需再指定URI部份用content:或file:
2.設定允許播放來自internet的任何影片檔
<data android:scheme="http" android:type="video/*" />
當使用者透過web page連結要開啟一個資源,會先使用html page開啟看看,若不行,則會與未指定對象
的intent一樣,去查找哪一個Activity適合去開啟這個資源,若不知道,則會開啟Download Manager去下載
3.設定啟動預設執行的Activity
<intent-filter . . . > <action android:name="code android.intent.action.MAIN" /> <category android:name="code android.intent.category.LAUNCHER" /> </intent-filter>
不需透過任何intent去觸發,在開啟App即會自動執行這個Activity
九.Intent與Intent Filter
Intent Filter的作用,不僅是找出intent所要啟動的元件,還包括了設定元件該出現在Device的相關訊息
例如在Filter內設定了
"android.intent.action.MAIN"與"android.intent.category.LAUNCHER"
這元件會出現在device最上層的Launch清單上
若元件的filter設定了android.intent.category.HOME"
那這元件就會顯示在Home screen上
利用PackageManager Class的相關method針對指定intent找出適合的元件
透過query..() method可以讓你找到可以接收指定intent的component透過resolve..()可以找到最適合接收指定intent的component
例如queryIntentActivities()可以取得所有適合的Activity清單
发表评论
-
DrawLayout几个注意点
2014-03-08 22:55 1461package com.example.navigationd ... -
layout_weight解惑
2014-02-20 13:25 0http://www.chess-ix.com/blog/th ... -
LayoutInflater注意事项
2014-02-20 10:52 0http://www.doubleencore.com/201 ... -
混淆掉Log.i输出
2013-12-26 15:42 0混淆配置文件加入 -assumenosideeffects c ... -
android TextView字体大小对应
2013-11-30 16:36 731设备信息:小米1 density=1.5, width=480 ... -
PopupWindow使用注意3点
2013-10-18 19:32 528使用PopupWindow注意点: ...... View v ... -
android 数据库同步
2013-10-14 13:35 1314package org.jerry; import or ... -
android singleTask几个注意点
2013-07-06 11:42 843android官网地址:http://developer.an ... -
转:WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法
2013-05-02 00:59 965文章原址:http://www.jcodecraeer.com ... -
Android onTouchEvent, onClick及onLongClick的调用机制
2013-04-28 02:21 0http://blog.csdn.net/ddna/artic ... -
Touch一些东西
2013-04-28 02:03 0package com.example.touchdemo; ... -
电话状态变化
2013-04-27 23:39 1833电话拨出,随后挂断 04- ... -
Toast重复利用
2013-04-26 00:10 1165package com.example.toastdemo; ... -
dp sp与px的相互转化
2013-04-23 01:19 0TextView.java /** * ... -
Android手机分辨率基础知识(DPI,DIP计算)
2013-04-22 22:57 0原文地址:http://blog.csdn.net/morui ... -
9.png NinePatchDrawable
2013-04-17 00:27 0地址: docs/tools/help/draw9patch. ... -
BaseAdapter
2013-04-16 09:43 0http://blog.csdn.net/pkxiuluo01 ... -
Android Intent的几种用法全面总结
2013-04-11 01:21 0Intent应该算是Android中特有的东西。你可以在Int ... -
Android中的Intent详细讲解
2013-04-11 01:18 0在一个Android应用中,主要是由四种组件组成的,这四种组件 ... -
PopupWindow
2013-04-26 00:11 1265PopupWindow,实质是使用WindowManager添 ...
相关推荐
在Android应用开发中,Intent是连接应用程序组件的重要机制,它是一种消息传递对象,用于启动其他组件(如Activity、Service、BroadcastReceiver)或者传递数据。Intent-filters则定义了组件能够响应的Intent类型,...
在Android开发环境中,Intent是应用间通信的重要工具,它用于启动其他组件或传递数据。本实验将深入探讨Android Studio中Intent的使用,帮助你更好地理解如何在不同的Activity之间跳转和传递信息。 首先,让我们...
在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...
8. 使用Intent传递大对象: - 对于大对象,如Bitmap,推荐使用Parcelable接口进行序列化。 - 使用Bundle.putParcelable()添加到Intent,然后在接收端使用Bundle.getParcelable()获取。 9. Intent的其他用途: - ...
Intent在Android开发中扮演着至关重要的角色,它是四大组件(Activity、Service、BroadcastReceiver和ContentProvider)间通信的关键。Intent不仅用于应用间的交互,也可以在同一个应用内的不同组件之间传递信息。...
`Intent` 是Android中的一个消息传递对象,用于在组件之间传递请求或数据。它可以用来启动另一个 `Activity`,启动或绑定到 `Service`,发送广播等。`Intent Filter` 是 `Activity` 或 `BroadcastReceiver` 在清单...
3. 通过Intent传递基本数据类型和复杂数据结构(如ArrayList)。 4. 实现BroadcastReceiver,展示如何通过Intent发送广播并接收。 在该项目中,你可以看到如何创建Intent,设置不同参数,以及如何在不同的组件中...
Intent是Android系统中至关重要的组件通信工具,它扮演着消息传递者的角色,使得应用程序的不同组件(如Activity、Service、BroadcastReceiver)能够相互通信。Intent不仅可以启动新的Activity,还能启动或绑定...
本资源"Android Intent切换.rar"提供了相关的源码,适用于开发者学习如何在Android应用中有效地使用Intent进行界面间的跳转和数据传递。 Intent主要分为显式Intent和隐式Intent两种类型。显式Intent明确指定了要...
本压缩包"AndroidIntent1 (2).zip"包含了实现代码跳转的各种示例,这将帮助我们深入理解Intent的工作原理和用法。 1. **Intent基本类型** - **显式Intent**: 显式Intent通过指定目标组件的完整类名来明确指定要...
在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)以及内容提供者(ContentProvider)之间的交互。...
在Android应用开发中,Intent是连接应用程序组件的重要机制,它用于在组件之间传递消息和启动操作。本资料主要聚焦于Android Intent中的Action概念,详细解析了Android Intent Action大全。 Intent通常包含两个关键...
在Android操作系统中,Intent是一种强大的机制,用于在应用程序的不同组件之间传递消息,它扮演着连接应用内部或跨应用通信的关键角色。本篇文章将全面解析Android Intent的使用及相关知识点。 首先,Intent主要有...
在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者传递数据。本示例将深入探讨Intent的基本用法和常见应用场景。 首先,Intent分为显式Intent和隐式...
在Android系统中,Intent是一种非常重要的组件间通信机制,它用于启动其他应用程序组件或传递数据。"intent-action-send"这个主题通常与发送数据到其他应用的功能相关,比如分享文本、图片或者文件。在这个场景下,...
四、Intent传递数据 Intent不仅可以启动组件,还能携带数据。常用的方法有putExtra()和getExtra(),用于在Intent中添加和获取键值对数据,数据类型可以是基本类型、字符串、Parcelable对象等。例如: ```java intent...
Intent是Android系统中的一个对象,它封装了应用程序的意图,即表达开发者想要执行的操作。Intent分为显式Intent和隐式Intent。显式Intent指定了要调用的具体组件(如Activity或Service的完整类名),而隐式Intent...