我能够从我的phonegap Java脚本函数和android 2.2使用Java函数
但是在API 17上未运行相同的代码。我该怎么做才能从API 17中的Java脚本调用 native Java代码。

我在我的java文件中使用此代码

 objCustomNativeAccess = new CustomNativeAccess(this, appView);
            appView.addJavascriptInterface(objCustomNativeAccess,
                    "CustomNativeAccess");
    super.loadUrl("file:///android_asset/www/index.html");

我的CustomNativeAccess类是
public class CustomNativeAccess {
        private WebView mAppView;
        private DroidGap mGap;

        /**
         * Constructor
         *
         * @param gap
         * @param view
         */
        public CustomNativeAccess(DroidGap gap, WebView view) {
            mAppView = view;
            mGap = gap;
        }

        /**
         * Get the device phone number
         *
         * @return
         */
        public JSONObject login(String email, String password) {
            JSONObject object = new JSONObject();
                    object.put("Login_Status", login_status);
            object.put("date", dateString);
            return object;
        }

在我的Java脚本中,我使用此行调用此登录功能
 var value = window.CustomNativeAccess.login(email,pass);

所以使用这个我成功地在api 2.2上调用了它,但是当我在api 17上运行此代码时给了我错误

未捕获的TypeError:对象[object Object]在file:///android_asset/www/index.html:81处没有方法“登录”

我如何在api 17上使用它

最佳答案

您在API 17上要做的就是用@JavascriptInterface注释您的方法:

public class CustomNativeAccess {
   @JavascriptInterface

然后摆脱构造器部分:
/*private WebView mAppView;
    private DroidGap mGap;
    public CustomNativeAccess(DroidGap gap, WebView view) {
        mAppView = view;
        mGap = gap;
    }
*/

另外,请确保在项目中导入JavascriptInterface:
 import android.webkit.JavascriptInterface;

您可以在这里了解更多信息:
WebView Android

编辑:您必须在要从Javascript访问的类中使用@JavascriptInterface注释每个方法。

10-06 13:35
查看更多