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

 

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