当前位置: 首页 > news >正文

Android与JavaScript的交互,以实现从WebView中打开原生页面并传递参数

在Android应用中,实现Android与JavaScript的交互,以实现从WebView中打开原生页面并传递参数,可以通过以下详细步骤完成:

1. 准备工作

  • 添加WebView至布局:在你的Activity或Fragment的XML布局文件中加入WebView控件。

2. 配置WebView

  • 启用JavaScript:在Java代码中设置WebView的属性,启用JavaScript支持。
WebView webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
  • 添加JavaScriptInterface:创建一个Java类作为桥梁,供JavaScript调用,用来打开原生页面。

3. 创建JavaScriptInterface

public class WebAppInterface {Context mContext;WebAppInterface(Context c) {mContext = c;}@JavascriptInterfacepublic void openNativePage(String url) {Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));mContext.startActivity(intent);}
}

确保在AndroidManifest.xml中注册所有可能被启动的Activity。

4. 注册URL Scheme

在目标Activity的AndroidManifest.xml中,通过Intent Filter注册自定义URL Scheme。

<activity android:name=".NativeActivity"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="myapp" android:host="native" /></intent-filter>
</activity>
5. 交互逻辑
  • 在WebView中嵌入JavaScript:在网页中编写JavaScript代码,通过调用WebAppInterface中的方法来打开原生页面。
<button onclick="openNativePage('myapp://native?key=value')">打开原生页面</button>
<script>function openNativePage(url) {window.Android.openNativePage(url);}
</script>
  • 传递参数:通过URL的查询参数(如?key=value)来传递数据。
6. 接收参数

在被启动的原生Activity中,通过Intent获取传递的参数。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_your_layout);// 获取IntentIntent intent = getIntent();if (intent != null && intent.getData() != null) {// 解析Intent中的UriUri data = intent.getData();// 从Uri中获取"key"参数的值String Key = data.getQueryParameter("key");// 使用codeValue进行后续操作if (Key != null) {Log.d("Key ", "key: " + Key );// 进行你需要的操作,比如显示在TextView上,或者作为请求参数等} else {Log.w("Key ", "key parameter was not found in the Intent's Uri.");}} else {Log.e("Intent Error", "Intent or Intent Data is null.");}
}
http://www.lryc.cn/news/387913.html

相关文章:

  • 信息(文字、图像、音频、视频等)在计算机中是如何存储及显示的
  • 【考研408计算机组成原理】微程序设计重要考点指令流水线考研真题+考点分析
  • 查看哪个docker环境在占用gpu
  • JVM相关总结
  • Python 面试【初级】
  • 机器学习SVR 随机森林 RBF神经网络做回归预测的MATLAB代码
  • Spring Boot中配置Swagger用于API文档
  • 学习java第一百一十六天
  • SQL Server的隐私盾牌:动态数据屏蔽(DMS)全面解析
  • Android中常见的线程池
  • C# YoloV8 模型效果验证工具(OnnxRuntime+ByteTrack推理)
  • 什么是Cookie?有什么用?如何清除浏览器中的Cookie?
  • 数据库基本管理
  • 43.三倍游戏
  • LoadBalance 负载均衡
  • Wails 安装初体验
  • 架构师篇-10、DDD实战篇:通过领域模型落地系统
  • C++ | Leetcode C++题解之第190题颠倒二进制位
  • Git安装与使用及整合IDEA使用的详细教程
  • 高效办公秘诀:使用Excel超级处理器提高工作效率,提升职场竞争力
  • 深入探讨Python中的元编程:装饰器与元类
  • MaxKb/open-webui+Ollama运行模型
  • 2-requests模块(6节课学会爬虫)
  • 使用ECharts创建动态数据可视化图表
  • Nacos配置中心客户端源码分析(一): 客户端如何初始化配置
  • gin数据解析,绑定和渲染
  • Django 对模型创建的两表插入数据
  • Lua: 轻量级多用途脚本语言
  • PotPlayer安装及高分辨率设置
  • 实现写入缓存策略的最佳方法探讨