android与h5的互相交互传参

本文探讨了在Android应用中如何与H5进行交互,包括使用WebView的构建和设置,以及如何处理H5页面的缓存清除和后退键功能。在混合开发中,正确配置WebView和处理两者间的通信至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近几年随着h5的强势崛起,越来越多的公司运用h5开发或者采用h5与android的混合开发,前端时间公司就碰到了一个h5就和android交互的项目,本人也是在摸索中一次次改进,废话不说了直接上代码:


1.建议使用new Webview构建webview对象而不是直接在布局xml文件中运用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:fitsSystemWindows="true"
    android:background="@color/loginbg"
    android:layout_height="match_parent">
    
        
    <LinearLayout
        android:id="@+id/ll_web"
        android:orientation="vertical"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp">
        </LinearLayout>
    
</LinearLayout>

2.new出webview对象,并通过websetting 类设置

webView = new WebView(MainActivity.this);
webView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT));
ll_web.addView(webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

3.webview加载h5

webView.loadUrl(surl);

4.将java方法暴露给h5代码,当webview界面上触发某个事件后调取java方法(我这里是因为h5触发java两个不同的方法所以下面暴露两个java方法给h5
webView.addJavascriptInterface(new Lateralinterface(MainActivity.this), "wst");
webView.addJavascriptInterface(new LoginSucinterface(MainActivity.this), "log");
以下是我定义的其中一个给h5调取的方法写法
public class Lateralinterface {
    private Context context;
    private UpdateUi updateui;
    private Loginout loginout;

    public Lateralinterface(Context context) {
        this.context = context;
        updateui= (UpdateUi) context;
        loginout= (Loginout) context;
    }

    /**
     * 侧滑
     * @param type
     */
    @JavascriptInterface
    public void showToast(String type){
        if(!TextUtils.isEmpty(type)){
         updateui.showOrhide(type);
        }
    }

    public interface UpdateUi{
        void showOrhide(String type);
    }

    /**
     * 退出
     */
    @JavascriptInterface
    public void loginOut(){

        loginout.loginoutact();

    }

    public interface Loginout{
        void loginoutact();
    }
}


5.java代码调取h5的方法并传递值给h5(一定要等到h5界面加载完成后才能调取h5的方法,否者调取不成功,所以就要用到webview的
WebViewClient()回掉方法里面去调取

 webView.setWebViewClient(new WebViewClient() {
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

//                return super.shouldOverrideUrlLoading(view, request.getUrl().toString());
                view.loadUrl(request.getUrl().toString());
                return true;

            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                progressBar.setProgress(0);
                progressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
//                progressBar.setVisibility(View.GONE);
                boolean b=SpUtils.getLoginsuc(MainActivity.this);
                if(!b) {
   //false 表示h5没登陆成功,没登录成功调取h5的方法,登陆成功就不调取
                    webView.loadUrl("javascript:getUserInfo('" + SpUtils.getpwd(MainActivity.this).get("user") + "','" + SpUtils.getpwd(MainActivity.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值