2017-02-22 56 views
0

我有一個android活動,包含webview和我有一個頁面,其中包含一個本地變量marks。當用戶得到正確答案時,局部變量會增加。在網頁中,有一個按鈕叫exit,該按鈕應該關閉網頁並返回到android中的活動,並且它應該將本地變量marks帶回到活動中。我想問一下如何在網頁中使用退出按鈕關閉頁面並使用Javascript返回本地變量,以及android中的活動如何從網頁接收本地變量。android studio webview獲取數據和onfinish

我的機器人活動:

private WebView webview; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //setContentView(R.layout.activity_main); 

    webview = new WebView(this); 
    webview.getSettings().setJavaScriptEnabled(true); 

    try { 
     webview.setWebViewClient(new WebViewClient()); 
     webview.loadUrl("file:///android_asset/index.html"); 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
    setContentView(webview); 
} 

我的退出按鈕是一個div:

<div class="exit" onclick="finish()">Exit</div> 

我將使用finish()函數返回的變量,並關閉網頁回活動在android中。

function finish() {} 

回答

0

通知主機應用程序頁面已完成加載。然後調用onPageFinished()

webview.setWebViewClient(new WebViewClient() { 

    public void onPageFinished(WebView view, String url) { 
     // do your stuff here 
    } 
}); 

SOURCE

+0

但活動如何取得局部變量,以及如何JavaScript的可以做到返回,並調用Android的活動onPageFinish()函數? – androidnewbie

0

你可以做一個thing..On就退出點擊調用任何URL像http://../getmark?marks=2一次從網頁流量的網頁流量光潔度/退出URL負載。在活動

webView.setWebViewClient(new WebViewClient() { 

    public void onPageFinished(WebView view, String url) { 
     // parse the url here to get marks 
    } 
}); 
+0

但我如何調用網址?作爲'location.href = http://../getmark?marks = 2'不適用於webview – androidnewbie

+0

以及Javascript如何返回並調用android activity中的'onPageFinish()'函數? – androidnewbie

0

註冊一個javascriptinterface到您的網頁視圖中的onCreate:

this.webview.addJavascriptInterface(new MyJSInterface(this), "Android"); 

在活動實施setCount方法:

public void setCount (int count) { 
    //do what ever you want with count 
} 

創建一個新的JavascriptInterface級:

public class MyJSInterface { 
    private YourActivity yourActivity = null; 
    public MyJSInterface (YourActivity yourActivity) { 
     this.yourActivity = yourActivity; 
    } 

    @JavascriptInterface 
    public void invoke (int count) { 
      this.yourActivity.setCount(count); 
    } 
} 

而且在javascript:

function finish(marks) { 
    if (Android !== undefined) { 
     if (Android.invoke !== undefined) { 
      Android.invoke(marks); 
     } 
    } 
}