在HybridApp开发中,非常多业务我们是没有办法通过HTML5+js实现的,比方调用第三方的包括Activity的jar包,一些必须使用原生代码才干实现的功能,比方复杂的UI的效果,调用通讯相关的协议栈,第三方支付sdk等。这样的情况我们须要通过写cordova插件的方式,包装android原生代码为插件,供上层javascript调用。本文解说一个调用Activity并返回Activity结果的cordova插件样例,帮助大家掌握cordova plugin的开发 。

Cordova插件是通过cordova plugin add (插件包名须要在cordova plugins官方注冊,或插件代码存放的git地址)加入,通过cordova plugin rm 插件包名删除。一个插件主要文件包含插件配置文件plugin.xml,插件描写叙述文件package.json,平台相关的资源和源代码,能够包含图片,xml,java源代码,jar包,so静态库等。以下是我做的android图案锁屏cordova插件的文件夹结构。

插件文件夹结构

能够看到这个插件支持ios和android平台,包括源代码和图片资源,还是挺复杂的。

我们今天介绍的不会这么麻烦了,仅仅是简单的调用Activity,先看config.xml

配置文件config.xml代码

<?xml version="1.0" encoding="UTF-8"?>

<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="com.qianmi.cordova.demoapp"
version="0.0.3">
<name>DemoPlugin</name>
<description>Qianmi <span style="font-family: Arial, Helvetica, sans-serif;">DemoPlugin </span><span style="font-family: Arial, Helvetica, sans-serif;"> Plugin</description></span>
<license>Apache 2.0</license>
<keywords>Qianmi,<span style="font-family: Arial, Helvetica, sans-serif;">DemoPlugin</span><span style="font-family: Arial, Helvetica, sans-serif;"></keywords></span> <js-module src="www/demo.js" name="demo">
<clobbers target="cordova.plugins.demo" /> <!--js中调用的名字啊 -->
</js-module> <!-- android -->
<platform name="android"> <config-file target="res/xml/config.xml" parent="/*">
<feature name="DemoApp">
<param name="android-package" value="com.qianmi.cordova.demoapp<span style="font-family: Arial, Helvetica, sans-serif;">" /></span> </feature>
</config-file> <source-file src="src/android/DemoApp.java" target-dir="src/com/qianmi/cordova/demoapp /></span> </platform> </plugin>

插件www/js的代码

var argscheck = require('cordova/argscheck'),
utils = require('cordova/utils'),
exec = require('cordova/exec'); var DemoApp = function () {
}; //ExitApp
<pre name="code" class="javascript">DemoApp<span style="font-family: Arial, Helvetica, sans-serif;">.exit = function () {</span>

console.log('----exit'); exec(null, null, "DemoApp", "demoAction", [null, null, null]);};module.exports = DemoApp;


插件java代码

重点的插件java代码(仅仅是演示样例啊,不完整的)给Activity传值,接受返回结果,回传给js都在这里了

public class LockPattern extends CordovaPlugin {
private static final String TAG = "LockPattern"; private static final String NICK_NAME = "nickName";
private static final String MODE = "mode"; public static final int REQUEST_CODE_SET_LOCK_PATTERN = 10001;
public static final int REQUEST_CODE_VERIFY_LOCK_PATTERN = 10002; private CallbackContext mCallbackContext; @Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException {
Log.i(TAG, action + " " + args);
mCallbackContext = callbackContext; Intent intent = new Intent().setClass(
cordova.getActivity(),
LockPatternActivity.class);
intent.putExtra(MODE, LockPatternActivity.MODE_STEP_1);
intent.putExtra(NICK_NAME, nickName);
this.cordova.startActivityForResult(this, intent,
REQUEST_CODE_SET_LOCK_PATTERN); return false;
} @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i(TAG, "---onActivityResult:" + requestCode + " " + resultCode); switch (requestCode) {
case REQUEST_CODE_SET_LOCK_PATTERN:
if (Activity.RESULT_OK == resultCode && null != mCallbackContext) {
mCallbackContext.success(LockPatternUtils.loadFromPreferences(cordova.getActivity()));
}
break; }
} }

一个cordova 插件就这么简单,大家能够轻松的从js调用activity了

十分钟开发一个调用Activity的PhoneGap插件的更多相关文章

  1. 利用MyEclipse开发一个调用webservice接口的程序

    上一篇文章我们已经学习了如何使用Java 工具MyEclipse开发一个webservice接口,那么接口开发好了如何调用?接下来我们就来解决这个问题. 1:首先随便创建一个Java project选 ...

  2. 30 分钟开发一个简单的 watchOS 2 app <oneVcat>

    Apple Watch 和 watchOS 第一代产品只允许用户在 iPhone 设备上进行计算,然后将结果传输到手表上进行显示.在这个框架下,手表充当的功能在很大程度上只是手机的另一块小一些的显示器 ...

  3. 5分钟开发一个简单的基于HTML5的移动应用

    首先写一个config.xml 代码如下: <?xml version="1.0" encoding="UTF-8"?> <widget xm ...

  4. 十分钟通过一个实际问题,真正教会大家如何解决Bug

    前言 这篇文章从实际问题 -> 问题解决步骤 -> 问题解决思路,帮助大家能够明白如何在程序中发现问题,定位问题,解决问题.并真正理解那些问题解决思路. 首先说说这个实际问题是什么,又是怎 ...

  5. 3分钟搭建一个网站?腾讯云Serverless开发体验

    作为一个开发者,应该都能理解一个网站从开发到上线,要经过很多繁琐的步骤. 编写代码,部署应用,部署数据库,申请域名,申请SSL证书,域名备案,到最终上线起码要几天时间. 作为一个不精通代码的业务玩家, ...

  6. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例

    引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...

  7. 十分钟掌握Activity的生命周期与启动模式

    1. Activity的生命周期 正常情况下的Activity生命周期如下图所示(来自Android Developer): 当资源相关的系统配置变更时(比如设备屏幕方向改变,键盘可见性变化),会导致 ...

  8. 基于Laravel开发博客应用系列 —— 十分钟搭建博客系统

    1.创建文章数据表及其模型(0:00~2:30) 我们已经在上一节中为博客项目完成了大部分准备工作,现在首先要做的就是为这个项目创建一个新的文章表 posts及该表对应的模型类 Post,使用如下Ar ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(十四)——开发环境容器调试小技巧

    之前有很多同学提到如何做容器调试,特别是k8s环境下的容器调试,今天就讲讲我是如何调试的.大家都知道在vs自带的创建项目模板里勾选docker即可通过F5启动docker容器调试.但是对于启动在k8s ...

随机推荐

  1. java多线程监听JMS、MQ队列

    本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可. 转载请注明出处和作者.http://blog.csdn.net/xtj332 背景:消息队列中有非常多的消息需要 ...

  2. No persister for 编译器每行执行两次的解决方法

    是前台的  js  的 datagrid 部件加了 oncheck  事件引起

  3. Dispatcher & Redirect

    首先理解一下二者的含义:Dispatcher请求转发,直接把客户端的请求在服务器处理以后跳转到下一个页面或者是处理类.此时的地址栏上的URL是不会变化的. Redirect是重定向.客户端的请求到达服 ...

  4. <climits>头文件使用方法

    <climits>头文件定义的符号常量 CHAR_MIN  char的最小值SCHAR_MAX  signed char 最大值SCHAR_MIN   signed char 最小值UCH ...

  5. QT5.6 编译SQLServer驱动

    简要说下编译的主要步骤 @1:打开vs2015的命令行编译环境 ‘ @2:进入到cd到源码目录:cd C:\Qt\Qt5.6.0\5.6\Src\qtbase\src\plugins\sqldrive ...

  6. 设计模式(七)组合模式Composite(结构型)

    设计模式(七)组合模式Composite(结构型) 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面. 例子1:就是多级树形菜单. 例子2:文件和文件夹目录 2.问题 ...

  7. TreePuzzle 一点感想

    题目链接 这一道题看起来像是一道贪心的水题,但是情况较难考虑周全,比如下图,我就考虑漏了这种情况,点0是可以移动到点1的.然后我就各种奇怪的分类讨论.最终还是没能A,决定放弃治疗. 然后我看了看解答, ...

  8. 【行业干货】2013中国零售商排名 - 课程公告板 - 京东内部论坛 - Powered by Discuz!

    [行业干货]2013中国零售商排名 - 课程公告板 - 京东内部论坛 - Powered by Discuz! [行业干货]2013中国零售商排名 [复制链接]     bjpanzhoulan   ...

  9. 什么是TimeTunnel

    index - Taocode 欢迎使用TimeTunnel PageOutline(1-3,,inline) 什么是TimeTunnel !TimeTunnel(简称TT)是一个基于thrift通讯 ...

  10. CocoaPods on Xcode 6 and Yosemite

    老子今天又给环境跪了..... cocoapods 在升级完新系统以后无法工作 解决cocoapods 在 mac 10.10下报错 错误例如以下. /System/Library/Framework ...