2017-01-16 31 views
0

我想将变量传递给Android的JavaScript。当点击地图按钮,它会打开这个类有以下onCreate方法:与Android不工作的Javascript界面​​

@SuppressLint("JavascriptInterface") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.maps); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    myWebView = (WebView) findViewById(R.id.webview); 
    setMyWebviewSettings(myWebView.getSettings()); 

    myWebView.setWebViewClient(new WebViewClient()); 
    myWebView.setWebChromeClient(new WebChromeClient()); 

    Bundle extras = getIntent().getExtras(); 
    double[] coordinates = setCoordinates(extras); 

    myWebView.addJavascriptInterface(new JavaScriptInterface(coordinates), "JSInterface"); 

    myWebView.loadUrl("http://10.0.0.32:8887/services/maps/examples/basic-example.htm"); 
} 

这里是setMyWebviewSettings方法:

private void setMyWebviewSettings(WebSettings MyWebviewSettings){ 
    MyWebviewSettings.setAllowFileAccessFromFileURLs(true); 
    MyWebviewSettings.setAllowUniversalAccessFromFileURLs(true); 
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
    MyWebviewSettings.setJavaScriptEnabled(true); 
    MyWebviewSettings.setDomStorageEnabled(true); 
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
    MyWebviewSettings.setBuiltInZoomControls(true); 
    MyWebviewSettings.setAllowFileAccess(true); 
    MyWebviewSettings.setSupportZoom(true); 
} 

那么这里就是JavaScriptInterface

public class JavaScriptInterface { 

    double lat; 
    double lon; 
    double pan; 

    JavaScriptInterface(double[] coordinate) { 
     this.lat = coordinate[0]; 
     this.lon = coordinate[1]; 
     this.pan = coordinate[2]; 
    } 

    public double getLatValue() { 
     return lat; 
    } 

    public double getLonValue() { 
     return lon; 
    } 

    public double getPanValue() { 
     return pan; 
    } 
} 

这里是setCoordinates方法:

private double[] setCoordinates(Bundle extras) { 

    double[] coordinates = new double[3]; 

    coordinates[0] = 45.9049; 
    coordinates[1] = 13.3177; 
    coordinates[2] = 15; 

    if (extras != null) { 
     coordinates[0] = extras.getDouble("lat"); 
     coordinates[1] = extras.getDouble("lon"); 
     coordinates[2] = extras.getDouble("pan"); 
    } 
    return coordinates; 
} 

除了不加载地图以外的所有工作。 Bundle extrasNull。该如何解决这个问题?

回答

1

确保创建启动第二个活动的意图,当你传递的值。如果该包为空,则意味着它们不包含在意图中。

+0

是的,我发现我正在传递一个空的Bundle。谢谢 –

1

从这个doc,我认为,也许你错过了@JavascriptInterface注释:

public class JavaScriptInterface { 
    @JavascriptInterface 
    public double getLatValue() { 
     return lat; 
    } 

    @JavascriptInterface 
    public double getLonValue() { 
     return lon; 
    } 

    @JavascriptInterface 
    public double getPanValue() { 
     return pan; 
    } 
} 
+0

虽然这不是答案,但它帮助了很多。谢谢 –