//打开指定网页
Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.google.com"));startActivity(intent);//进行关键字搜索
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);intent.putExtra(SearchManager.QUERY, "android"); //keywords: androidstartActivity(intent);//
Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:235345"));startActivity(intent);Uri.parse("prefix:num") // “http:”或“https:”表示网络地址类型,// “tel:”表示电话号码类型,“mailto:”表示邮件地址类型,等在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则:
android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”...之外,我们可以定义自己的前缀android:host 匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名android:port 匹配url中的端口android:path 匹配url中的路径// for example:
<activity android:name=".TargetActivity"> <intent-filter> <action android:name="com.scott.intent.action.TARGET"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="scott" android:host="com.scott.intent.data" android:port="7788" android:path="/target" /> </intent-filter> </activity><-- android:pathPrefix="/target"
scott://com.scott.intent.data:7788/target/hello-->Intent intent = new Intent("com.scott.intent.action.TARGET");
intent.setData(Uri.parse("scott://com.scott.intent.data:7788/target"));//mergestartActivity(intent);// put Bundle Data
Intent intent = new Intent("xxxxx");Bundle bundle = new Bundle();bundle.putInt("id", 0);bundle.putString("name", "scott");intent.putExtras(bundle);startActivity(intent);// get Bundle Data
Bundle bundle = intent.getExtras();int id = bundle.getInt("id");String name = bundle.getString("name");or int id = intent.getIntExtra();String name = intent.getStringExtra();也可以使用Intent的getIntExtra和getStringExtra方法获取,其数据源都是Intent中的Bundle类型的实例对象
以上涉及到了Intent的三个属性:
Intent包括以下属性:1.action,要执行的动作2.data和extras,即执行动作要操作的数据和传递到目标的附加信息3.category,要执行动作的目标所具有的特质或行为归类<category android:name="android.intent.category.LAUNCHER" />
几个常见的category如下:Intent.CATEGORY_DEFAULT (android.intent.category.DEFAULT) //默认的categoryIntent.CATEGORY_PREFERENCE (android.intent.category.PREFERENCE) // 表示该目标Activity是一个首选项界面Intent.CATEGORY_BROWSABLE (android.intent.category.BROWSABLE) //指定了此category后,在网页上点击图片或链接时,系统会考虑将此目标Activity列入可选列表,供用户选择以打开图片或链接。intent.addCategory(String category); //在为Intent设置category时,应使用addCategory(String category)方法向Intent中添加指定的类别信息,来匹配声明了此类别的目标Activity。
4.type:要执行动作的目标Activity所能处理的MIME数据类型
例如:一个可以处理图片的目标Activity在其声明中包含这样的mimeType:<data android:mimeType="image/*">在使用Intent进行匹配时,我们可以使用setType(String type)或者setDataAndType(Uri data, String type)来设置mimeType。setType(String type)setDataAndType(Uri data, String type)5.component,目标组件的包或类名称
在使用component进行匹配时,一般采用以下几种形式:intent.setComponent(new ComponentName(getApplicationContext(), TargetActivity.class));intent.setComponent(new ComponentName(getApplicationContext(), "com.scott.intent.TargetActivity")); intent.setComponent(new ComponentName("com.scott.other", "com.scott.other.TargetActivity"));其中,前两种是用于匹配同一包内的目标,第三种是用于匹配其他包内的目标。需要注意的是,如果我们在Intent中指定了component属性,系统将不会再对action、data/type、category进行匹配。
Activity:startActivity(), startActivityForResult()Service:
startService(), bindService()Broadcasts:
sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast()activity.setResult() --> startActivityForResult()
+++++++++++++++++++++++++++++++++++++++++++++++++Intent对象由以下六个部分组成:1.Component name2.Action3.Data4.Category5.Extras6.FlagsComponent name
Component name即组件名称,是要处理这个Intent对象的组件名称。 组件名称对象由ComponentName类来封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。 组件名称通过 setComponent(),setClass(),setClassName()设置,通过getComponent()获取。 需要注意的是Component name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。Action
Action是指Intent要完成的动作,是一个字符串常量。 ACTIONS: ACTION_CALL, ACTION_EDIT, ACTION_MAIN, ACTION_SYNC, ACTION_BATTERY_LOW, ACTION_HEADSET_PLUG, ACTION_SCREEN_ON, ACTION_TIMEZONE_CHANGED使用 setAction() 和 getAction()来设置和读取Action属性。
Data
Data属性是执行动作的URI和MIME类型,不同的动作有不同的数据规格。 比如,Action是ACTION_EDIT时,数据域将是文档的URI;Action是ACTION_CALL时,数据域是 tel: URI ,带有要拨打的电话号码;如果Action是 ACTION_VIEW,则数据域是http: URI。当匹配intent和能够处理intent所带的数据的组件时,知道数据类型(MIME类型)是很重要的。比如,一个展示图像的组件不应该被叫去播放一个音频。
很多情况下,从URI可以看出数据类型,比如content: URIs,表示数据是在设备上,但是是由content provider控制。 数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME type,setDataAndType() 指定它既为URI又为MIME type。读取的时候URI用getData(),MIME type用getType()。Category
Category是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类。 一个Intent对象中可以包含任意数量的category描述信息。 与category相应的方法有添加addCategory()、移除removeCategory() 和获取所有category getCategories() 。Extras
传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。 数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。Flags
各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。+++++++++++++++++++++++++++++++++++++++++++++++++<data android:mimeType="video/mpeg" android:scheme="http"><data android:mimeType="audio/mpeg" android:scheme="http">每一个<data>元素可以指定一个URI和一个数据类型(MIME media type)。
每一个URI包含下列属性:
scheme, host, port, path如:scheme://host:port/path
例如,在下面的URI中:
content://com.example.project:200/folder/subfolder/etc