文章來自:http://blog.csdn.net/intbirdjavascript
http://cordova.apache.org/docs/en/5.0.0//index.htmlcss
https://github.com/intbird/cordova-android_cordova4.0.0.git
https://github.com/intbird/cordova-android_cordova3.7.2.githtml
https://nodejs.org/
http://cordova.apache.org/docs/en/5.0.0//guide_cli_index.md.html#The%20Command-Line%20Interfacejava
$ sudo npm install -g cordovanode
$ cordova create hello com.example.hello HelloWorldandroid
$ cordova platform add ios $ cordova platform add amazon-fireos $ cordova platform add android $ cordova platform add blackberry10 $ cordova platform add firefoxos
一路next;可以安裝官方 guides 導入android目錄;
ios
改動assert下 index.html,加入兩個buttongit
<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>
note: exec 中的第三個參數爲res下config.xml文件配置的功能名稱;
改動index.jsgithub
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 ]);
}
http://cordova.apache.org/docs/en/5.0.0//guide_platforms_android_plugin.md.html#Android%20Plugins
如上面的
cordova.exec(null, null, 「ToastPlugin」, 「toast」, [ message ]);web
彈出提示
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>
<?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>
簡單demo副本.http://download.csdn.net/detail/intbird/8797289
將插件函數獨立出來在指定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