android:Cordova Android, hello Cordova ,PhoneGap android
文章来自: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:
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
加入平台支持:
$ cordova platform add ios
$ cordova platform add amazon-fireos
$ cordova platform add android
$ cordova platform add blackberry10
$ cordova platform add firefoxos
Android Studio导入项目执行OK.
一路next;能够安装官方 guides 导入android目录; 
 
改动界面;
改动assert下 index.html,加入两个button
<body onload="onPageLoad()">
    <input type="button" onclick="btnStartActivity('web')" value="使用webView" class="button"/><br/>
    <input type="button" onclick="btnStartActivity('camera')" value="使用相机" class="button"/><br/>
    <input type="button" onclick="btnStartActivity('')" value="未处理" class="button"/>
    </body>加入js事件 方式一,方式二文章末尾;
note: exec 中的第三个參数为res下config.xml文件配置的功能名称; 
改动index.js
function onPageLoad(){
    document.addEventListener("deviceready", handle, false);
}
function handle(){
     console.log("deviceready");
     document.addEventListener("resume",onResume,false);
}
function onResume(){
    showToast("onResume");
}
function btnStartActivity(arg){
    var calssName = "";
    switch(arg){
        case 'web':
        calssName = "com.intbird.soft.cordovar.WebViewActivity"
            break;
        case 'camera':
        calssName = "com.intbird.soft.cordovar.CameraActivity";
            break;
        default:
        showToast('ERROR');
            break;
    }
    if("" != calssName)
        cordova.exec(resultSuccess,resultError,"CallActivityPlugin","call",[calssName]);
}
function resultSuccess(result){
    showToast("success "+result);
}
function resultError(error){
    showToast("error "+error);
}
function showToast(message){
    cordova.exec(null, null, "ToastPlugin", "toast", [ message ]);
}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 ]);
弹出提示
package com.intbird.soft.cordoca.plugins;
import android.widget.Toast;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
/**
 * Created by intbird on 15/6/11.
 */
public class ToastPlugin extends CordovaPlugin {
    public static final String  ACTION = "toast";
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals(ACTION)) {
            Toast.makeText(cordova.getActivity(), args.getString(0), Toast.LENGTH_SHORT).show();
        }
        return true;
    }
}
调用Activity
package com.intbird.soft.cordoca.plugins;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
/**
 * Created by intbird on 15/6/11.
 */
public class CallActivityPlugin extends CordovaPlugin {
    public static final String  ACTION = "call";
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if(this.cordova.getActivity().isFinishing()) return true;
        if(action.equals(ACTION)){
            try{
                Intent intent = new Intent(cordova.getActivity(),Class.forName(args.getString(0)));
                this.cordova.startActivityForResult(this,intent,-1);
                PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT);
                mPlugin.setKeepCallback(true);
                callbackContext.sendPluginResult(mPlugin);
                callbackContext.success("activity started");
                callbackContext.error("activity not start.");
            }catch(Exception ex){
                ex.printStackTrace();
                return  false;
            }
        }
        return true;
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        switch (resultCode){
            case Activity.RESULT_OK:
                Bundle b = intent.getExtras();
                String str = b.getString("changge01");
                break;
            default:
                break;
        }
    }
}
配置插件;
在 res/xml/config.xml中加入feature配置,同一时候改动背景色和其它标志
   <preference name="ShowTitle" value="true"/>
    <preference name="BackgroundColor" value="0x00FFFFFF"/><?xml version='1.0' encoding='utf-8'?>
<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">
    <preference name="loglevel" value="DEBUG" />
    <allow-intent href="market:*" />
    <name>Cordoca</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    feature name="Whitelist">
        <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
        <param name="onload" value="true" />
    </feature>
    <feature name="ToastPlugin">
        <param name="android-package" value="com.intbird.soft.cordoca.plugins.ToastPlugin" />
    </feature>
    <feature name="CallActivityPlugin">
        <param name="android-package" value="com.intbird.soft.cordoca.plugins.CallActivityPlugin" />
    </feature>
</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)
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)直接凝视掉 index.html meta 第一行,又一次执行;
<html>
    <head>
        <!-- <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 *">
        -->
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
        <script type="text/javascript" charset="utf-8" src="js/index.js"></script>
        <title>Hello World</title>
    </head>
    <body onload="onPageLoad()">
    <input type="button" onclick="btnStartActivity('web')" value="使用webView" class="button"/><br/>
    <input type="button" onclick="btnStartActivity('camera')" value="使用相机" class="button"/><br/>
    <input type="button" onclick="btnStartActivity('')" value="未处理" class="button"/>
    </body>
</html>
AndroidManifest.xml
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.intbird.soft.cordovar"
    android:hardwareAccelerated="true"
    android:versionCode="1"
    android:versionName="0.0.1">
    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <application
        android:hardwareAccelerated="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity
            android:name="MainActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
            android:label="@string/activity_name"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Holo.Light"
            android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".CameraActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
            android:label="@string/activity_name"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Holo.Light"
            android:windowSoftInputMode="adjustResize"></activity>
        <activity
            android:name="WebViewActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
            android:label="@string/activity_name"
            android:launchMode="singleTop"
            android:theme="@android:style/Widget.WebView"
            android:windowSoftInputMode="adjustResize"></activity>
    </application>
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="22" />
</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文件;
cordova.define("intbird-plugins-package.showtoast", function(require, exports, module) {
var exec = require('cordova/exec');
var showToast = function(message) {
    exec(null,null,"ToastPlugin","toast",[message]);
};
module.exports = showToast;
});3,配置插件文件cordova_plugins, 
 cordova_plugins.js文件
{
        "file": "plugins/intbird-plugin-package/showtoast.js",
        "id": "intbird-plugins-package.showtoast",
        "clobbers": [
            "window.showToast"
        ]
    }
module.exports.metadata = 
// TOP OF METADATA
{
    "cordova-plugin-whitelist": "1.0.0",
    "intbird-plugins-package": "1.0.0",
}界面中使用 
window.showToast(“Toast message”); 
//note: “clobbers”: [ “window.showToast”]
demo:https://github.com/intbird/cordova-android-demo.git 
文章来自 :http://blog.csdn.net/intbird
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号