2017-01-16 77 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

雖然這不是答案,但它幫助了很多。謝謝 –