phoneGap开发android,JS调用android方法

phoneGap开发android,JS调用android方法


使用场景

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

方法1:

使用插件访问Native code,见“PhoneGap 4.2.0插件指南.docx”。

方法2:

addJavascriptInterface

MainActivity.java

public class MainActivity extends DroidGap {

    @Override

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

 

   //解决错误:07-1508: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()

        super.init();

 

                //有Javascript的页面必须设置setJavaScriptEnabled为true

        appView.getSettings().setJavaScriptEnabled(true);

 

   //第一个参数就是我们一般会实现一个自己的类,类里面提供我们要提供给javascript访问的方法;第二个参数是访问我们在obj中声明的方法时候所用到的js对象

        appView.addJavascriptInterface(new PluginMethod(this,appView), "SM");

 

        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

 * Tochange 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 更新门店的地址

     * @JavascriptInterface 必须加,为了解决Android 2.2所带来的安全漏洞

    *在Javascript Bridge对象下的所有回调方法使用@JavascriptInterface 进行注解声明,表示index.html可以调用的addJavascriptInterface()的实例中的方法

     */

    public void UpdateApp(final String path) {

        Log.e("---------------",path);  //注意这里日志输出

    }

}


JS使用:

window.SM.UpdateApp('http://192.168.0.1'); // 注意这里的SM表示JavascriptInterface的实例

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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章