上一篇文章说到,当利用WebViewClient或者WebChromeClient来处理由html页面传过来的请求的时候,都会将对应的服务名称,操作方法和对应的参数数据传给一个叫PluginManager的类。
PluginManager类的作用是什么?
大家知道,当利用Android原生环境的功能,比如照像机,比如相册等,这些功能都是很分散的,说不清楚什么时候是需要这些功能,什么时候是不需要这些功能的,所以我们希望能够像插件一样,需要的时候就加载进来,不需要的时候不去理他,而PluginManager类就是一个这样的管理类。
它主要负责几件事情:
1)进入HTML页面的时候,去加载我们定义好的控件。
mPluginManager = new PluginManager(this);
mPluginManager.loadPlugin();
那么PluginManager怎么知道本个应用要加载多少plugin来去响应由Html页面来的请求呢?
我们是通过一个叫plugin.xml配置文件来定义的。
<plugins>
<plugin name="App" class="com.lms.xxx.bridge.plugin.App" />
<plugin name="Toast" class="com.lms.xxx.plugin.Toast" />
<plugin name="Dialog" class="com.lms.xxx.bridge.plugin.Dialog" />
<plugin name="User" class="com.lms.xxx.bridge.plugin.User" />
</plugins>
可以联想到,Toast和Dialog都是Android原生环境下的显示窗口,我们虽然用html页面来实现界面,但是为了保持整个应用的一致性,我们就会用到原生环境中的Toast或者我们自定义的对话框等控件。
需要用到什么,就在这里定义什么。
我们再来看一下loadPlugin方法:
public void loadPlugin() {
int identifier = context.getResources().getIdentifier("plugins", "xml",
context.getPackageName());
if (identifier == 0) {
pluginConfigurationMissing();
}
XmlResourceParser xml = context.getResources().getXml(identifier);
try {
int eventType = -1;
while ((eventType = xml.next()) != XmlResourcePar