个人博客原文链接:http://www.zeromike.net/?p=64
上一篇:写一个phonegap插件 中的例子已经可以作为开发时的一个参考,但是我们要使用注解的方式简化if/else调用方法,注解方式,请参考我的这篇 java注解方式进行反射。
1.MyPlugin的代码
package com.mike; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaPlugin; import org.json.JSONArray; import org.json.JSONException; public class MyPlugin extends CordovaPlugin { // 方法map private static final Map<String, Method> METHOD_MAP = new HashMap<String, Method>(); // 加载类 private static final List<Class<?>> LOADED_CLASS = new LinkedList<Class<?>>(); public MyPlugin() { if (!LOADED_CLASS.contains(getClass())) { for (Method method : getClass().getDeclaredMethods()) { MyAnnontion anno = method.getAnnotation(MyAnnontion.class); if (anno != null) { METHOD_MAP.put(method.getName(), method); } } LOADED_CLASS.add(getClass()); } } @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { Method mth = METHOD_MAP.get(action); if (mth != null) { try { mth.invoke(this, args, callbackContext); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } return false; } @MyAnnontion private void echo(JSONArray args, CallbackContext callbackContext) throws JSONException { String message = args.getString(0); if (message != null && message.length() > 0) { callbackContext.success(message); } else { callbackContext.error("Expected one non-empty string argument."); } } }
MyPlugin的构造函数在每次调用插件方法时进行调用,初始化数据。
2.MyAnnontion
package com.mike; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME)//表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时 @Target(ElementType.METHOD)//说明该注解只能被声明在一个类的方法前 public @interface MyAnnontion { }
相关推荐
10. **更新与维护**:随着时间推移,JPush 和 PhoneGap 本身都可能发布新版本,开发者需要关注更新日志,适时升级插件,保持与最新技术的兼容性。 通过理解和应用这些知识点,开发者可以成功地在 Ionic2 应用中集成...
通过PhoneGap,开发者可以访问设备的硬件功能,如摄像头、GPS、加速计、联系人列表等,而无需编写原生代码。 2. **phonegap-2.9.1.jar**:这是PhoneGap Android版的核心库文件。这个JAR文件包含了所有必要的Java类...
通过编写插件,可以让 JavaScript 调用这些原生功能。 5. **处理异步问题**: - 对于异步操作,如百度定位插件获取经纬度,可以利用 `cordova.getActivity().runOnUiThread()` 方法在 Android 线程中处理,以实现...
本篇文章将深入探讨Cordova 4.2.0版本中的插件应用与开发,特别是如何获取手机信息、检查手机网络连接状态、实现弹出插件、创建自定义土司插件以及设置app自动升级。 首先,获取手机信息是移动应用中常见的需求。在...
6. **数据库升级**:测试数据库结构的升级过程,如何在不丢失数据的情况下添加新表或修改现有表结构。 在 "sqlitetest-master" 文件夹中,可能包含以下内容: - HTML 文件:PhoneGap 应用的用户界面。 - ...
HTML5的诞生源于对Web标准升级的需求。在HTML4之后,Web世界经历了快速的发展,特别是随着宽带互联网的普及和计算机性能的提升,用户对于更高质量的在线体验有了更高的期望,如流媒体视频和网页游戏。然而,当时的...
GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式浏览网页。Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得...