Android与JS的交互

博客介绍了安卓与JS的相互调用方法。安卓调JS方法需借助webview,先在Layout文件写webview控件,再在MainActivity里设置webview并进行相关设置;JS调安卓方法则需使用@JavascriptInterface注解定义方法。

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

安卓调JS方法

webview是安卓与JS交互的桥梁,我们是通过webview来实现他们的相互调用。
1.先在Layout文件写webview控件。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false">
    <!--webview-->
    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--android:paddingBottom="49.5dp">-->

        <WebView
            android:id="@+id/web"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            </WebView>
    </LinearLayout>
    </RelativeLayout>

2.在MainActivity里设置webview

package com.xq.jztc.activity;

import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ClipData;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.alipay.sdk.app.H5PayCallback;
import com.alipay.sdk.app.PayTask;
import com.alipay.sdk.util.H5PayResultModel;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.umeng.socialize.UMShareAPI;
import com.xq.jztc.JavaScriptinterface;
import com.xq.jztc.R;
import com.yzq.zxinglibrary.common.Constant;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

import io.reactivex.functions.Consumer;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private WebView webView;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = findViewById(R.id.web);
         setWebView();
        }
}

3.设置webView

private void setWebView() {
        assert webView != null;
        webView.setVerticalScrollbarOverlay(true);
        //加载网页
        webView.loadUrl(https://www.baidu.com/);
        //android js交互
        javaScriptinterface = new JavaScriptinterface(this, webView);
        webView.addJavascriptInterface(javaScriptinterface, "android");
        //处理各种通知 & 请求事件
        webView.setWebViewClient(webViewClient);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);                       //可执行js
        settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);   //设置页面默认缩放密度
        settings.setDefaultTextEncodingName("UTF-8");              //设置默认的文本编码名称,以便在解码html页面时使用
        settings.setAllowContentAccess(true);                      //启动或禁用WebView内的内容URL访问
        settings.setAppCacheEnabled(false);                        //设置是否应该启用应用程序缓存api
        settings.setBuiltInZoomControls(false);                    //设置WebView是否应该使用其内置的缩放机制
        settings.setUseWideViewPort(true);                         //设置WebView是否应该支持viewport
        settings.setLoadWithOverviewMode(true);                    //不管WebView是否在概述模式中载入页面,将内容放大适合屏幕宽度
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);          //重写缓存的使用方式
        settings.setJavaScriptCanOpenWindowsAutomatically(true);   //告知js自动打开窗口
        settings.setLoadsImagesAutomatically(true);                //设置WebView是否应该载入图像资源
        settings.setAllowFileAccess(true);                         //启用或禁用WebView内的文件访问
        settings.setDomStorageEnabled(true);                       //设置是否启用了DOM存储API,默认为false
        settings.setRenderPriority(WebSettings.RenderPriority.HIGH);
        settings.setSavePassword(false);
        webView.setWebChromeClient(new WebChromeClient() {
            // For Android < 3.0
            public void openFileChooser(ValueCallback<Uri> valueCallback) {
                uploadMessage = valueCallback;
                openImageChooserActivity();
            }

            // For Android  >= 3.0
            public void openFileChooser(ValueCallback valueCallback, String acceptType) {
                uploadMessage = valueCallback;
                openImageChooserActivity();
            }

            //For Android  >= 4.1
            public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) {
                uploadMessage = valueCallback;
                openImageChooserActivity();
            }

            // For Android >= 5.0
            @Override
            public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
                uploadMessageAboveL = filePathCallback;
                openImageChooserActivity();
                return true;
            }
        });
    }

JS调安卓方法

@JavascriptInterface
public void JS的方法名(参数) {
安卓要走的方法体
}
例子:

 //打电话
    @JavascriptInterface
    public void apptel(String tel) {
        Intent intent = new Intent(Intent.ACTION_DIAL);
        Uri data = Uri.parse("tel:" + tel);
        intent.setData(data);
        context.startActivity(intent);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值