文章来自:http://blog.csdn.net/intbird

官方文档:

http://cordova.apache.org/docs/en/5.0.0//index.html

intbird的俩DEMO:

https://github.com/intbird/cordova-android_cordova4.0.0.git

https://github.com/intbird/cordova-android_cordova3.7.2.git

下载安装nodeJS:

  1. https://nodejs.org/

下载安装cordova:

http://cordova.apache.org/docs/en/5.0.0//guide_cli_index.md.html#The%20Command-Line%20Interface

$ sudo npm install -g cordova

创建项目:

$ cordova create hello com.example.hello HelloWorld

加入平台支持:

  1. $ cordova platform add ios
  2. $ cordova platform add amazon-fireos
  3. $ cordova platform add android
  4. $ cordova platform add blackberry10
  5. $ cordova platform add firefoxos

Android Studio导入项目执行OK.

一路next;能够安装官方 guides 导入android目录;

改动界面;

改动assert下 index.html,加入两个button

  1. <body onload="onPageLoad()">
  2. <input type="button" onclick="btnStartActivity('web')" value="使用webView" class="button"/><br/>
  3. <input type="button" onclick="btnStartActivity('camera')" value="使用相机" class="button"/><br/>
  4. <input type="button" onclick="btnStartActivity('')" value="未处理" class="button"/>
  5. </body>

加入js事件 方式一,方式二文章末尾;

note: exec 中的第三个參数为res下config.xml文件配置的功能名称;

改动index.js

  1. function onPageLoad(){
  2. document.addEventListener("deviceready", handle, false);
  3. }
  4. function handle(){
  5. console.log("deviceready");
  6. document.addEventListener("resume",onResume,false);
  7. }
  8. function onResume(){
  9. showToast("onResume");
  10. }
  11. function btnStartActivity(arg){
  12. var calssName = "";
  13. switch(arg){
  14. case 'web':
  15. calssName = "com.intbird.soft.cordovar.WebViewActivity"
  16. break;
  17. case 'camera':
  18. calssName = "com.intbird.soft.cordovar.CameraActivity";
  19. break;
  20. default:
  21. showToast('ERROR');
  22. break;
  23. }
  24. if("" != calssName)
  25. cordova.exec(resultSuccess,resultError,"CallActivityPlugin","call",[calssName]);
  26. }
  27. function resultSuccess(result){
  28. showToast("success "+result);
  29. }
  30. function resultError(error){
  31. showToast("error "+error);
  32. }
  33. function showToast(message){
  34. cordova.exec(null, null, "ToastPlugin", "toast", [ message ]);
  35. }

Plugin插件编写;

http://cordova.apache.org/docs/en/5.0.0//guide_platforms_android_plugin.md.html#Android%20Plugins

如上面的

cordova.exec(null, null, “ToastPlugin”, “toast”, [ message ]);

弹出提示

  1. package com.intbird.soft.cordoca.plugins;
  2. import android.widget.Toast;
  3. import org.apache.cordova.CallbackContext;
  4. import org.apache.cordova.CordovaPlugin;
  5. import org.json.JSONArray;
  6. import org.json.JSONException;
  7. /**
  8. * Created by intbird on 15/6/11.
  9. */
  10. public class ToastPlugin extends CordovaPlugin {
  11. public static final String ACTION = "toast";
  12. @Override
  13. public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
  14. if (action.equals(ACTION)) {
  15. Toast.makeText(cordova.getActivity(), args.getString(0), Toast.LENGTH_SHORT).show();
  16. }
  17. return true;
  18. }
  19. }

调用Activity

  1. package com.intbird.soft.cordoca.plugins;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import org.apache.cordova.CallbackContext;
  6. import org.apache.cordova.CordovaPlugin;
  7. import org.apache.cordova.PluginResult;
  8. import org.json.JSONArray;
  9. import org.json.JSONException;
  10. /**
  11. * Created by intbird on 15/6/11.
  12. */
  13. public class CallActivityPlugin extends CordovaPlugin {
  14. public static final String ACTION = "call";
  15. @Override
  16. public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
  17. if(this.cordova.getActivity().isFinishing()) return true;
  18. if(action.equals(ACTION)){
  19. try{
  20. Intent intent = new Intent(cordova.getActivity(),Class.forName(args.getString(0)));
  21. this.cordova.startActivityForResult(this,intent,-1);
  22. PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT);
  23. mPlugin.setKeepCallback(true);
  24. callbackContext.sendPluginResult(mPlugin);
  25. callbackContext.success("activity started");
  26. callbackContext.error("activity not start.");
  27. }catch(Exception ex){
  28. ex.printStackTrace();
  29. return false;
  30. }
  31. }
  32. return true;
  33. }
  34. @Override
  35. public void onActivityResult(int requestCode, int resultCode, Intent intent) {
  36. switch (resultCode){
  37. case Activity.RESULT_OK:
  38. Bundle b = intent.getExtras();
  39. String str = b.getString("changge01");
  40. break;
  41. default:
  42. break;
  43. }
  44. }
  45. }

配置插件;

在 res/xml/config.xml中加入feature配置,同一时候改动背景色和其它标志

  1. <preference name="ShowTitle" value="true"/>
  2. <preference name="BackgroundColor" value="0x00FFFFFF"/>
  1. <?xml version='1.0' encoding='utf-8'?>
  2. <widget id="com.intbird.soft.cordoca" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
  3. <preference name="loglevel" value="DEBUG" />
  4. <allow-intent href="market:*" />
  5. <name>Cordoca</name>
  6. <description>
  7. A sample Apache Cordova application that responds to the deviceready event.
  8. </description>
  9. <author email="dev@cordova.apache.org" href="http://cordova.io">
  10. Apache Cordova Team
  11. </author>
  12. <content src="index.html" />
  13. <access origin="*" />
  14. <allow-intent href="http://*/*" />
  15. <allow-intent href="https://*/*" />
  16. <allow-intent href="tel:*" />
  17. <allow-intent href="sms:*" />
  18. <allow-intent href="mailto:*" />
  19. <allow-intent href="geo:*" />
  20. feature name="Whitelist">
  21. <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
  22. <param name="onload" value="true" />
  23. </feature>
  24. <feature name="ToastPlugin">
  25. <param name="android-package" value="com.intbird.soft.cordoca.plugins.ToastPlugin" />
  26. </feature>
  27. <feature name="CallActivityPlugin">
  28. <param name="android-package" value="com.intbird.soft.cordoca.plugins.CallActivityPlugin" />
  29. </feature>
  30. </widget>

报错;

06-11 17:47:24.708 12895-12895/com.intbird.soft.cordoca I/chromium﹕ [INFO:CONSOLE(41)] “Refused to execute inline event handler because it violates the following Content Security Policy directive: “default-src ‘self’ data: gap: https://ssl.gstatic.com ‘unsafe-eval’”. Note that ‘script-src’ was not explicitly set, so ‘default-src’ is used as a fallback.

“, source: file:///android_asset/www/index.html (41)

  1. 06-11 17:47:24.708 12895-12895/com.intbird.soft.cordoca I/chromium [INFO:CONSOLE(41)] "Refused to execute inline event handler because it violates the following Content Security Policy directive: "default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'". Note that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
  2. ", source: file:///android_asset/www/index.html (41)

直接凝视掉 index.html meta 第一行,又一次执行;

  1. <html>
  2. <head>
  3. <!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
  4. -->
  5. <meta name="format-detection" content="telephone=no">
  6. <meta name="msapplication-tap-highlight" content="no">
  7. <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
  8. <link rel="stylesheet" type="text/css" href="css/index.css">
  9. <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
  10. <script type="text/javascript" charset="utf-8" src="js/index.js"></script>
  11. <title>Hello World</title>
  12. </head>
  13. <body onload="onPageLoad()">
  14. <input type="button" onclick="btnStartActivity('web')" value="使用webView" class="button"/><br/>
  15. <input type="button" onclick="btnStartActivity('camera')" value="使用相机" class="button"/><br/>
  16. <input type="button" onclick="btnStartActivity('')" value="未处理" class="button"/>
  17. </body>
  18. </html>

AndroidManifest.xml

  1. <?
  2. xml version='1.0' encoding='utf-8'?>
  3. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  4. package="com.intbird.soft.cordovar"
  5. android:hardwareAccelerated="true"
  6. android:versionCode="1"
  7. android:versionName="0.0.1">
  8. <supports-screens
  9. android:anyDensity="true"
  10. android:largeScreens="true"
  11. android:normalScreens="true"
  12. android:resizeable="true"
  13. android:smallScreens="true"
  14. android:xlargeScreens="true" />
  15. <uses-permission android:name="android.permission.INTERNET" />
  16. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  17. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  18. <application
  19. android:hardwareAccelerated="true"
  20. android:icon="@drawable/icon"
  21. android:label="@string/app_name"
  22. android:supportsRtl="true">
  23. <activity
  24. android:name="MainActivity"
  25. android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
  26. android:label="@string/activity_name"
  27. android:launchMode="singleTop"
  28. android:theme="@android:style/Theme.Holo.Light"
  29. android:windowSoftInputMode="adjustResize">
  30. <intent-filter android:label="@string/launcher_name">
  31. <action android:name="android.intent.action.MAIN" />
  32. <category android:name="android.intent.category.LAUNCHER" />
  33. </intent-filter>
  34. </activity>
  35. <activity
  36. android:name=".CameraActivity"
  37. android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
  38. android:label="@string/activity_name"
  39. android:launchMode="singleTop"
  40. android:theme="@android:style/Theme.Holo.Light"
  41. android:windowSoftInputMode="adjustResize"></activity>
  42. <activity
  43. android:name="WebViewActivity"
  44. android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
  45. android:label="@string/activity_name"
  46. android:launchMode="singleTop"
  47. android:theme="@android:style/Widget.WebView"
  48. android:windowSoftInputMode="adjustResize"></activity>
  49. </application>
  50. <uses-sdk
  51. android:minSdkVersion="14"
  52. android:targetSdkVersion="22" />
  53. </manifest>

执行点击未处理默认提示,相机和webview见demo;

简单demo副本.http://download.csdn.net/detail/intbird/8797289

加入js事件方式二:

将插件函数独立出来在指定js文件里

改动前:

function showToast(message){

cordova.exec(null, null, “ToastPlugin”, “toast”, [ message ]);

}

改动后:

function showToast(message){

navigator.window.show(null, null, “ToastPlugin”, “toast”, [ message ]);

1.创建assert/www/plugins/intbird-plugins-package

2,在1目录内加入 showtoast.js文件;

  1. cordova.define("intbird-plugins-package.showtoast", function(require, exports, module) {
  2. var exec = require('cordova/exec');
  3. var showToast = function(message) {
  4. exec(null,null,"ToastPlugin","toast",[message]);
  5. };
  6. module.exports = showToast;
  7. });

3,配置插件文件cordova_plugins,

cordova_plugins.js文件

  1. {
  2. "file": "plugins/intbird-plugin-package/showtoast.js",
  3. "id": "intbird-plugins-package.showtoast",
  4. "clobbers": [
  5. "window.showToast"
  6. ]
  7. }
  8. module.exports.metadata =
  9. // TOP OF METADATA
  10. {
  11. "cordova-plugin-whitelist": "1.0.0",
  12. "intbird-plugins-package": "1.0.0",
  13. }

界面中使用

window.showToast(“Toast message”);

//note: “clobbers”: [ “window.showToast”]

demo:https://github.com/intbird/cordova-android-demo.git

文章来自 :http://blog.csdn.net/intbird

android:Cordova Android, hello Cordova ,PhoneGap android的更多相关文章

  1. Phonegap Android 项目使用Cordova

    要在已经创建好的Android项目里,使用Cordova. 1. 首先在Android Studio中创建Android项目 2. 创建cordova项目 cordova crate test com ...

  2. ionic2 自定义cordova插件开发以及使用 (Android)

    如何写一个cordova 用于ionic2项目中呢,在搜索了一番之后,千篇一律,我都怀疑那些文章是不是全部都是复制来复制去的,而且都不是很详细.我自己也捣鼓了一下午,踩了很多坑.所以特此写这下这篇,记 ...

  3. Cordova项目config.xml添加android权限

    最近在开发cordova项目,安卓APP需要调用照相机和系统相册,在添加安卓权限的时候,总是报错. 以下是部分config.xml代码 <platform name="android& ...

  4. Android H5混合开发(3):原生Android项目里嵌入Cordova

    前言 如果安卓项目已经存在了,那么如何使用Cordova做混合开发? 方案1(适用于插件会持续增加或变化的项目): 新建Cordova项目并添加Android平台,把我们的安卓项目导入Android平 ...

  5. 原生Android项目里嵌入Cordova

    Android H5混合开发():原生Android项目里嵌入Cordova 如果安卓项目已经存在了,那么如何使用Cordova做混合开发? 方案1(适用于插件会持续增加或变化的项目): 新建Cord ...

  6. 如何在原生Android项目里嵌入Cordova

    背景: 这段时间在维护一个Cordova混合项目,以前稍微接触过Cordova,也写过简单的纯纯的Cordova的Demo,但是没有尝试过混合原生的Cordova. 在接到项目后比较了一下项目架构和C ...

  7. 新手的第一个phonegap Android应用

    对PhoneGap开发感兴趣的请加入群 PhoneGap App开发 348192525   手机成为现在软件应用必不可少的一种设备,然而手机平台的不统一造成我们需要为不同手机重写代码,这对一般应用来 ...

  8. PhoneGap Android环境搭建

    原文地址:http://www.cnblogs.com/shawn-xie/archive/2012/08/15/2638480.html 一.安装 在安装PhoneGap开发环境之前,需要按顺序安装 ...

  9. phonegap android 输入法弹出会遮盖表单框的解决办法

    phonegap android 当页面内容比较多,表单超出屏幕范围时,点击输入,输入法会遮盖住表单框,而且无法向上滑动. 经过测试发现,是由于config.xml中设置了 FullScreen 的全 ...

随机推荐

  1. 转:Java SoftReference 使用构建对象缓存

    本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱和虚引用   在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说, ...

  2. jquery判断ie与使用ie来判断ie,推荐ie样式块

    用jquery来判断浏览器类型,如果只是仅仅为了判断浏览器的类型而使用该方法,那么不建议使用,只是在你已经使用了jquery才建议使用,因为没必要因为这么小的一个功能就加载那么大的类库吧 Jquery ...

  3. Oracle中DBMS_LOB包使用小结

    本文主要介绍oracle数据库中dbms_lob包的使用以及使用dbms_lob包来维护lob数据库类型的基本方法.随着社会的发展,在现代信息系统的开发中,需要存储的已不仅仅是简单的文字信息,同时还包 ...

  4. (转)Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

    刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...

  5. [置顶] Linux 虚拟地址与物理地址的映射关系分析【转】

    转自:http://blog.csdn.net/ordeder/article/details/41630945 版权声明:本文为博主(http://blog.csdn.net/ordeder)原创文 ...

  6. 第二部分:Spring中配置mongodb

    一.需要引用的jar包 1.spring-data-mongodb-1.9.4.RELEASE.jar 2.spring-data-commons-1.12.11.RELEASE.jar 3.mong ...

  7. J.U.C并发框架源码阅读(一)AtomicInteger

    基于版本jdk1.7.0_80 java.util.concurrent.atomic.AtomicInteger 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. ...

  8. (2)oracle服务、建库

     一.oracle的服务 oracle 11g安装后服务一般是7到8个 1.Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务(非必须启动) 2.Oracle ...

  9. HttpWebRequest 请求 Api 及 异常处理

    HttpWebRequest request = WebRequest.CreateHttp(url); request.Method = "post"; request.Head ...

  10. 新博客:11101001.com

    开了一个新blog 但还是会用这个写博客 新博客地址11101001.com