phoneGap开发android,JS调用android方法/插件

独自空忆成欢 提交于 2019-12-05 19:42:48

前沿

废话不说phoneGap是什么不多介绍,官方网站:http://phonegap.com/

phoneGap开发IOS插件教程:http://my.oschina.net/jgy/blog/175643

使用场景

在开放过程中很多会使用到android原生的东西,当然phoneGap也封装了一些,不过那么一点点想开发Android程序还是不够的……我在开发中APP更新就要在JS中触发事件调用android方法传更新的URL过去,使用JAVA更新APP自动打开安装。

方法1:

插件类 Echo.java

public class Echo extends CordovaPlugin{  // 必须继承 CordovaPlugin
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        Log.e("-------------",action);
        Log.e("-------------",args.toString());
        if (action.equals("echo")) {
            
        }
        return false;
    }
}

MainActivity.java

public class MainActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setIntegerProperty("splashscreen", R.drawable.wandapad_splash);
        super.loadUrl("file:///android_asset/www/index.html", 4000);
    }
}

在res/xml中添加类注册

<plugin name="Echo" value="org.apache.cordova.plugin.Echo"/>

JS调用

cordova.exec(callback, function(err) {
        callback('Nothing to echo.');
    }, "Echo", "echo", ['参数']);

方法2:

这个也是我最喜欢的,简单,方便……不多说……上代码

MainActivity.java

public class MainActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.init();
        appView.getSettings().setJavaScriptEnabled(true);
        appView.addJavascriptInterface(new PluginMethod(this, appView), "SM"); // 注意这里一句
        super.setIntegerProperty("splashscreen", R.drawable.wandapad_splash);
        super.loadUrl("file:///android_asset/www/index.html", 5000);
    }}

PluginMethod.java

package com.example;

import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;
import com.plugin.UpdateApplication;
import org.apache.cordova.DroidGap;

/**
 * Created with IntelliJ IDEA.
 * User: FakeMr
 * Date: 13-7-15
 * Time: 下午4:12
 * To change this template use File | Settings | File Templates.
 */
public class PluginMethod {
    private WebView webView;
    private DroidGap droidGap;

    public PluginMethod(DroidGap gap, WebView view) {
        webView = view;
        droidGap = gap;
    }

    /**
     * JS调用  用于更新App
     * @param path 更新门店的地址
     */
    public void UpdateApp(final String path) {
        Log.e("---------------", path);  //注意这里日志输出
    }
}

JS使用:

window.SM.UpdateApp('http://192.168.0.1');  // 注意这里的SM.UpdateApp

ERROR:

第二种方法我报错

07-15 08:52:09.035: ERROR/AndroidRuntime(491): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.MainActivity}: java.lang.NullPointerException

解决方法:

super.init();

最后:以上是本人测试成功后以及经验分享,欢迎吐槽交流!嘎嘎~~~~

作者:FakeMr 郏高阳    ❤犒劳一杯咖啡❤

原文链接:http://my.oschina.net/jgy/blog/145385



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!