显式intent
从一个activity启动另一个activity时,我们通常采用
startActivity(new Intent(MainActivity.this,AnotherActivity.class));
第一个参数说明当前activity,第二个参数说明将要启动的acticity的类。这种方式就称为显示intent,因为它直接指明了被启动的类的定义。
隐式intent
在AndroidManifest.xml文件中,我们给AnotherActivity添加一个action,里面可以输入任何字符串。在MainActivity里调用时,intent的参数只需要传入这个字符串既可以。
<activity android:name=".AnotherActivity">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="absdasjdlkandklwnkwladn" />
</intent-filter>
</activity>
startActivity(new Intent("absdasjdlkandklwnkwladn"));
这就是隐式intent,它的好处是,我们在A应用里面要启动B应用的一个activity时,我们是无法获得B应用里类的定义的,而此时采用隐式intent就能做到。如果想不允许一个activity被其他应用启动,可以在这个activity添加一个属性exported,设置为false即可。
intent过滤器
当一个action绑定了多个activity,这个action被执行时,它会弹出选项,让你选择启动哪个avtivity。
或者,我们可以在intent-filter里添加data字段,来特定的选择某个acticity。
<activity android:name=".AnotherActivity">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"></category>
<action android:name="absdasjdlkandklwnkwladn"></action>
<data android:scheme="app"></data>
</intent-filter>
</activity>
startActivity(new Intent("absdasjdlkandklwnkwladn", Uri.parse("app://hello"));