欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hybird简介以及安卓应用hybird初体验

程序员文章站 2022-07-12 20:58:45
...

hybird简介:

        有一篇文章写的很好,有兴趣的同学可以去看一下hybird app

        如今app应用大概分三种:

        1、原生app    顾名思义是纯原生写出的app

        2、web app   顾名思义是web写出的app

        3、hybird app 原生+web写出的app

hybird app 用通俗的话来解释就是web运行在app的webview上,其关键点在于web和原生的交互

那么web和原生怎么交互呢?(这里的原生解释一下,比如web如何调用手机的相机,相册等)

有兴趣的同学可以看看我写的这篇文章,写了一点交互基础点击打开链接

安卓webview中setWebViewClient方法,WebViewClient中有个方法为

shouldOverrideUrlLoading

这个方法可以拦截到页面跳转的url,那么如果web要让客户端做什么的时候,是可以将一些参数加到跳转url中的,在跳转的时候,客户端拦截到web传过来的url,解析url做相应的事情

OK web------->客户端走通了,那么客户端---------->web呢?答案在上面的链接中,不懂的同学可以去看看

好的,接下来上代码

web.html位置:hybird简介以及安卓应用hybird初体验

<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript">

function javaToJS(){
     document.getElementById("content").innerHTML =
         "<br\>JAVA调用了JS的无参函数";
}

function javaToJsWith(arg){
     <!--document.getElementById("content").innerHTML =-->
         <!--("<br\>"+arg);-->
         document.location=arg;
}
function hybird(){
document.location="jump&ddididisisidisdi"
    <!--window.location.href="jump&ddididisisidisdi";-->
}
</script>
</head>
<body>
以下为html内容<br/>
<h1><div id="content">显示一条文本</div></h1>
<br/>
<input type="button"  value="调用java代码,且无参" onclick="window.java.noParameterFunction()" />
<br/>
<br/>
<input type="button"  value="调用java代码,且有参" onclick="window.java.parameterFunction('JS->android 有参成功')"/>
<br/>
<br/>
<button id="btn" onclick="hybird()">hybird 测试</button>
</body>
</html>

MainActivity.java

package com.example.zyy.androidtohtml;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

/**
 * Created by zyy on 2018/2/27.
 */
public class MainActivity extends Activity {
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webview);
        // 启用javascript
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.indexOf("jump")>-1){
                    Toast.makeText(MainActivity.this,"hahahahahha",Toast.LENGTH_LONG).show();
                    return true;
                }else if (url.startsWith("http")){
                    view.loadUrl(url);
                    return true;
                }
                return false;
            }
        });
        webView.setWebChromeClient(new WebChromeClient());
        // 从assets目录下面的加载html
        webView.loadUrl("file:///android_asset/web.html");
        webView.addJavascriptInterface(MainActivity.this, "java");//name:android在网页里面可以用window.name.方法名调用java方法

        //Button1按钮 无参调用HTML js方法
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 无参数调用 JS的方法
                    webView.loadUrl("javascript:javaToJS()");

            }
        });
        //Button2按钮 有参调用HTML js方法
        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 传递参数调用JS的方法,点击后调用document.location=arg切换网页
                webView.loadUrl("javascript:javaToJsWith(" + "'https://baike.so.com/doc/456230-483111.html'" + ")");
            }
        });


    }

    //由于安全原因 targetSdkVersion>=17需要加 @JavascriptInterface
    //JS调用java,且无参
    @JavascriptInterface
    public void noParameterFunction() {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Button button = (Button) findViewById(R.id.button2);
                button.setText("JS->android 无参成功");
            }
        });
    }

    //JS调用java,且传参
    @JavascriptInterface
    public void parameterFunction(final String parameter) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Button button = (Button) findViewById(R.id.button2);
                button.setText(parameter);
            }
        });
    }
}

效果:

hybird简介以及安卓应用hybird初体验