In principle, therefore, an Intent object with no categories should always pass this test, regardless of what's in the filter. That's mostly true.
However, with one exception, Android treats all implicit intents passed to
startActivity()
as if they contained at least one category: "android.intent.category.DEFAULT
" (the CATEGORY_DEFAULT
constant). Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT
" in their intent filters. (Filters with "
android.intent.action.MAIN
" and "android.intent.category.LAUNCHER
" settings are the exception. They mark activities that begin new tasks and that are represented on the launcher screen. They can include "android.intent.category.DEFAULT
" in the list of categories, but don't need to.) See Using intent matching, later, for more on these filters.) 所有愿意接受隐形Intent的组件都必须将该action包含在android.intent.category.DEFAULT的的类别下,因为startActivity默认将该Intent的动作包含在该类别里。
如“被呼叫方”可以添加这样的项:
<intent-filter>
<action android:name="com.logansoft.testpia.TESTPIA" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
而“呼叫方”可以启动它:
Intent intent = new Intent();
intent.setAction("com.logansoft.testpia.TESTPIA");
startActivity(intent);