关于Intent的一点小事
2012-03-28 20:06
225 查看
一点小事...
显式Intent:直接用组件的名称定义目标组件
Intent it = new Intent(MainActivity.this,SecondActivity.class);
startActivity(it);
如此直接而已...
隐式Intent:不直接用组件的名称定义目标组件
Intent intent = new Intent();
intent.setData("...");
intent.setAction("...");
...
startActivity(intent);
如此麻烦而已....
隐式启动Activity的intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data,可以是全部或部分匹配,同样适用于Service和BroadcastReceiver
任何一个需要隐式启动的Activity都必须要有这项:<category android:name="android.intent.category.DEFAULT"/>
intent.addCategory(Intent.CATEGORY_DEFAULT);
这两个有点特殊:
android.intent.category.MAIN 主activity
android.intent.category.LAUNCHER launcher可见
看一下几个配对
<action android:name=".....">
intent.setAction(".....");
<category android:name="..." />
intent.addCategory("...");
<data android:scheme="......"></data>
Uri uri = Uri.parse("......:");
in.setData(uri);
<data android:mimeType="..." />
in.setType("...");
别人一总结:
1. <action/>包含在 <intent-filter></intent-filter> 标签对里,而且是必不可少的!不管以哪一种方式来匹配,都不可缺少这个<action/> ,可以有多个,至少要有一个。
如有多个的,话只需要匹配其中一个即可找到这个activity
<action>里的属性值大多数是在Intent里定义的,比如<action android:name="android.intent.action.VIEW"/>里的属性值就等于 Intent.ACTION_VIEW,
在这个Intent类里以ACTION开头定义的常量都是。当然,也可以自定义。
2. 任何一个需要隐式启动的Activity都必须要有这项:<category android:name="android.intent.category.DEFAULT"/>
例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的 filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题
<category> 里的属性值大多数是在Intent里定义的,比如 <category android:name="android.intent.category.DEFAULT"/>里的属性值就等于 Intent.CATEGORY_DEFAULT,
在这个Intent类里以CATEGORY开头定义的常量都是。当然,也可以自定义。
3.一个Activity里可以有多对<intent-filter></intent-filter> 只要匹配其中一对,即可启动这个Activity
4.在<intent-filter></intent-filter>里可以有多个<data android:mimeType="xxxx"/>,只需匹配其中一个即可.注意:不可以同时出现第5点的标签对,即下面这条。
5. 在<intent-filter></intent-filter>里可以有多个<data android:scheme="xxxx" android:host="yyyy" android:port="uuu"/>,只需匹配其中一个即可。
语法:
<data android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string" />
可以分开写,如:
<data android:scheme="something" android:host="project.example.com" android:port="80"/>
等同于这样写:
<data android:scheme="something"/>
<data android:host="project.example.com"/>
<data android:port="80"/>
在java代码里,Uri的格式:scheme://host:port/path or pathPrefix or pathPattern
注意:不可以同时出现第4点的标签对,即上面那条。
6.在<intent-filter></intent-filter>里可以有多个<action android:name="xxxx"> ,只需匹配其中一个即可。
7.当匹配不上任何Activity的话,会发生异常,跳出对话框:很抱歉...某某应用程序意外停止,请重试。
8. 上面所说的全部适用于Service和BroadcastReceiver,只需把<activity ...></activity>换成<service ...></service>或<receiver ...></receiver>即可。
这小点事完了...
显式Intent:直接用组件的名称定义目标组件
Intent it = new Intent(MainActivity.this,SecondActivity.class);
startActivity(it);
如此直接而已...
隐式Intent:不直接用组件的名称定义目标组件
Intent intent = new Intent();
intent.setData("...");
intent.setAction("...");
...
startActivity(intent);
如此麻烦而已....
隐式启动Activity的intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data,可以是全部或部分匹配,同样适用于Service和BroadcastReceiver
任何一个需要隐式启动的Activity都必须要有这项:<category android:name="android.intent.category.DEFAULT"/>
intent.addCategory(Intent.CATEGORY_DEFAULT);
这两个有点特殊:
android.intent.category.MAIN 主activity
android.intent.category.LAUNCHER launcher可见
看一下几个配对
<action android:name=".....">
intent.setAction(".....");
<category android:name="..." />
intent.addCategory("...");
<data android:scheme="......"></data>
Uri uri = Uri.parse("......:");
in.setData(uri);
<data android:mimeType="..." />
in.setType("...");
别人一总结:
1. <action/>包含在 <intent-filter></intent-filter> 标签对里,而且是必不可少的!不管以哪一种方式来匹配,都不可缺少这个<action/> ,可以有多个,至少要有一个。
如有多个的,话只需要匹配其中一个即可找到这个activity
<action>里的属性值大多数是在Intent里定义的,比如<action android:name="android.intent.action.VIEW"/>里的属性值就等于 Intent.ACTION_VIEW,
在这个Intent类里以ACTION开头定义的常量都是。当然,也可以自定义。
2. 任何一个需要隐式启动的Activity都必须要有这项:<category android:name="android.intent.category.DEFAULT"/>
例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的 filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题
<category> 里的属性值大多数是在Intent里定义的,比如 <category android:name="android.intent.category.DEFAULT"/>里的属性值就等于 Intent.CATEGORY_DEFAULT,
在这个Intent类里以CATEGORY开头定义的常量都是。当然,也可以自定义。
3.一个Activity里可以有多对<intent-filter></intent-filter> 只要匹配其中一对,即可启动这个Activity
4.在<intent-filter></intent-filter>里可以有多个<data android:mimeType="xxxx"/>,只需匹配其中一个即可.注意:不可以同时出现第5点的标签对,即下面这条。
5. 在<intent-filter></intent-filter>里可以有多个<data android:scheme="xxxx" android:host="yyyy" android:port="uuu"/>,只需匹配其中一个即可。
语法:
<data android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string" />
可以分开写,如:
<data android:scheme="something" android:host="project.example.com" android:port="80"/>
等同于这样写:
<data android:scheme="something"/>
<data android:host="project.example.com"/>
<data android:port="80"/>
在java代码里,Uri的格式:scheme://host:port/path or pathPrefix or pathPattern
注意:不可以同时出现第4点的标签对,即上面那条。
6.在<intent-filter></intent-filter>里可以有多个<action android:name="xxxx"> ,只需匹配其中一个即可。
7.当匹配不上任何Activity的话,会发生异常,跳出对话框:很抱歉...某某应用程序意外停止,请重试。
8. 上面所说的全部适用于Service和BroadcastReceiver,只需把<activity ...></activity>换成<service ...></service>或<receiver ...></receiver>即可。
这小点事完了...
相关文章推荐
- 关于Notification的一点愚见(PendingIntent工作流程)
- 自己关于Intent的一点大致的理解
- iOS关于微信支付的一点小事
- 转 -- 关于Intent的七大属性 感谢_江南一点雨博主
- 关于ios自动旋转的一点小事.
- 关于intentservice和handlerthread的一点小理解
- iOS旋转 — 关于Transform的一点小事
- <iOS>关于viewWithTag的一点说明
- 关于响应式的一点总结
- 关于KMP算法的一点个人理解
- 关于REST的一点想法
- 关于多核多CPU多线程和并行计算的一点补充
- 关于might_sleep的一点说明---CONFIG_DEBUG_ATOMIC_SLEEP【转】
- 安装nagios中一点关于tar命令的小结
- 关于bfc的一点理解
- 关于WinCE6.0补丁包的一点说明(何老师写了,我就转载过来,本来我想自己写一下的。)
- 2016.4.11-关于失败的一点思考
- vue中关于computed的一点理解
- 关于排序算法的一点知识——实例和伪代码
- wpf 关于类的静态成员的一点想法