由于是自学的安卓,一直看的是《安卓疯狂讲义》。虽然书里面写只要在activity的intent-filter里面配置相关属性即可被隐式intent启动,但是实际测试中却好像碰到了问题。
当程序创建Intent时,该Intent默认启动Category属性值为Intent.CATEGORY_DEFAULT常量(常量值为android.category_DEFAULT)的组件。
*既然是默认启动,如果我们在创建Intent时指定了category属性的值,而且目标组件的IntentFilter中也有该category的值,这样的隐式intent可以启动目标组件吗?
(经测试,不能启动!02-26 09:41:59.007: E/AndroidRuntime(404): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.aishang5wpj.intent.action.TEST_DIALOG cat=[com.aishang5wpj.intent.category.TEST_DIALOG] }
)
因此,虽然上面的粗体字代码并未指定目标的Intent的Category属性,但该Intent已有一个android.intent.category_DEFAULT属性值,因此被启动Activity的配置元素的<intent-filter.../>元素里至少还包括一个如下的<category../>子元素。
<category android:name="android.intent.category.DEFAULT" />
总结起来就是说,配置Activity时它的intent过滤器中必须有Category属性值为Intent.CATEGORY_DEFAULT常量,否则无法通过隐式intent启动。