zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C# 把一个文件夹下所有文件复制到另一个文件夹下 把一个文件夹下所有文件删除(转)
    【总结整理】webGIS学习thinkGIS(四)WebGIS中通过行列号来换算出多种瓦片的URL 之离线地
    ARCGIS空间叠加分析(转)
    ARCGIS中怎么去除重复的面?(转)
    关于写作赚钱(转)
    【总结整理】WebGIS学习-thinkGIS(三):关于影像金字塔、瓦片行列号、分辨率resolution
    【总结整理】WebGIS学习-thinkGIS(地理常识):
    【总结整理】WebGIS学习-thinkGIS(二):关于level,比例尺scale,分辨率resolution
    【总结整理】AMAP学习AMAP.PlaceSearch()
    logging、hashlib、collections模块
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7244904.html
Copyright © 2011-2022 走看看