AndroidはwebviewでJSとデータをやり取り
アンドロイドはwebviewを使用する過程でjsと通信することが多い.今回は以下のように簡単にまとめました.
一、jsは安卓端にデータを伝達する.
メインactivity、
html,
主な方法は、js側がアンドロイド宣言を呼び出す方法、JavaScript:androidである.returnAndroid(「アプリへのデータを返す」)およびAndroid側が投げ出す方法は、具体的にはAndroid JavaScriptクラスを参照してください.
二、安卓端はjs端にデータを伝達する
主activity
html,
これは上記より簡単です.js宣言方法だけで、アンドロイドが直接呼び出せばいいです.loadUrl("javascript:javaCall('fasff')");
プロジェクトのダウンロードアドレス
一、jsは安卓端にデータを伝達する.
メインactivity、
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
private String url = "http://wechat-dev.cb3dp.com/testwebview.html";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = findViewById(R.id.webview);
initWebView();
}
private void initWebView() {
WebSettings settings = mWebView.getSettings();
//settings.setUseWideViewPort(true);// webview , ,
settings.setLoadWithOverviewMode(true);// WebView 。
mWebView.setVerticalScrollBarEnabled(false);//
mWebView.setHorizontalScrollBarEnabled(false);//
settings.setTextSize(WebSettings.TextSize.LARGEST);// WebSettings, HTML
settings.setJavaScriptCanOpenWindowsAutomatically(true);// JS
// WebView , Javascript
mWebView.getSettings().setJavaScriptEnabled(true);// js
mWebView.setWebViewClient(new WebViewClient());
mWebView.addJavascriptInterface(new AndroidJavaScript(getApplication()), "android");// js
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//
// mWebView.loadDataWithBaseURL(url, null, "text/html", "utf-8", null);
mWebView.loadUrl(url);
}
/**
* AndroidJavaScript
* h5 js ,
* returnAndroid @JavascriptInterface
*/
private class AndroidJavaScript {
Context mContxt;
public AndroidJavaScript (Context mContxt) {
this.mContxt = mContxt;
}
@JavascriptInterface
public void returnAndroid(String name) {// APP, HTML
if (name.isEmpty()||name.equals("")){
return ;
}
Toast.makeText(getApplication(),name,Toast.LENGTH_SHORT).show();
// ///////////////////////
//MainActivity ,
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("name",name);
startActivity(intent);
}
}
}
html,
アプリに るにはクリックしてください
主な方法は、js側がアンドロイド宣言を呼び出す方法、JavaScript:androidである.returnAndroid(「アプリへのデータを返す」)およびAndroid側が投げ出す方法は、具体的にはAndroid JavaScriptクラスを参照してください.
二、安卓端はjs端にデータを伝達する
主activity
public class SecondActivity extends AppCompatActivity {
private TextView tv;
private WebView mWebView;
// @SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
tv = findViewById(R.id.tv);
mWebView = findViewById(R.id.webview);
String name = getIntent().getStringExtra("name");
if (!TextUtils.isEmpty(name)){
tv.setText(name);
}
WebSettings webSettings = mWebView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
mWebView.setWebChromeClient(new MyWebChromeClient());
// mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
mWebView.loadUrl("http://wechat-dev.cb3dp.com/testwebview2.html");
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mWebView.loadUrl("javascript:javaCall('fasff')");
}
});
}
/**
* Provides a hook for calling "alert" from javascript. Useful for
* debugging your javascript.
*/
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d("TAG", message);
result.confirm();
tv.setText(message);
return true;
}
}
}
html,
function javaCall(str){
//lat = window.demo.GetLat();
alert("11111")
document.getElementById("btn").value = str;
}
Click me!
これは上記より簡単です.js宣言方法だけで、アンドロイドが直接呼び出せばいいです.loadUrl("javascript:javaCall('fasff')");
プロジェクトのダウンロードアドレス