当在App内需要从某个Activity跳转到其他Activity,或是启动一个指定的service,一般写法是
Intent intent = new Intent(this,SecondActivity.class);
startActivity(intent);
这就是一个显式意图,指定了目标类。
隐式意图,举个例子,App的入口Activity在Manifest中是这样配置的
<activity android:name=".MainActivity">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
这样就实现了解耦,Launcher在启动App时无需知道入口是哪个类,只要发送一个Action为”android.intent.action.MAIN”的隐式意图。
调用系统拨号界面、打开相机、相册也是同样的原理,在开启系统相册选择图片时,发起者并不知道系统中的相册App的目标类是哪个,甚至要打开的App包名都不知道,通过隐式意图,设置Action为Intent.ACTION_PICK,系统就知道你要打开相册选择图片了。
有时在微信里选择“用浏览器打开”,会跳出多个App让用户选择,这里就是有多个Intent-Filter匹配上了Action和Category。
网友评论