启动Activity有两种方式,显示和隐式调用。
显示调用需要明确地指定调用对象的组件信息,包括包名和类名。
隐式调用需要匹配AndroidManifest文件中的IntentFilter规则,IntentFilter由action,category,data组成。
1)如果IntentFilter匹配规则中出现了action,那么就必须使用setAction方法设置intent的action。
2)对于category可以不用调用addCategory来设置category,但是如果一旦调用了addCategory就必须与IntentFilter中的某一个category匹配,否则会
报找不到组件(Activty)的错误。之所以不需要addCategory也能找到组件,是因为系统会默认为Intent加上“android.intent.category.DEFAULT”。因此为了
能够隐式调用成功,必须在manifest文件的IntentFilter匹规则中添加<category android:name="android.intent.category.DEFAULT"/>,否则,即使调用了
addCategory,也无法找到组件
3)data的匹配规则和action类似,data是由URI和mimeType组成。需要注意的是如果没有在manifest文件中显示添加URI(例如<data android:scheme="http" android:host="www.baidu.com" />),需用会默认添加content或file。所以如果在IntentFilter的匹配规则中出现了data,即使没有URI,(例如 <data android:mimeType="text/plain"/>),那么在调用的地方也需要使用setDataAndType(Uri.parse("content://abc", "text/plain"))