android webview 内的原始 tcp 套接字
Raw tcp socket inside android webview
简介
我正在开发一个 Android 应用程序,它允许非程序员使用可视化编程语言(基于块)对教育机器人进行编程。这个机器人运行 lua 虚拟机,可以设置自己的 wifi 网络,我将从我的 Android 设备连接到该网络。
问题
我需要将代码发送给机器人,我需要在 Android 网络视图中执行此操作,因为重要的是用户可以在机器人执行时继续看到基于块的程序,并且将反馈发送回移动设备(这将突出显示正在实时执行的代码块)。 所以基本上:我需要使用我自己的通信协议通过原始 tcp 套接字从 Android webview 内部发送和接收数据。
我尝试了什么?
我一直在搜索有关如何解决此问题的信息。到目前为止我已经学会了:
- Plain javascript:您只能使用支持 http 协议的 websockets,不支持我的自定义协议。
React native:我认为它可以让我解决这个问题,因为它是基于 node.js 并且 node.js 提供了支持原始套接字的库。(丢弃因为显然 React Native 不使用 webview)
- Androidjs:它是一个框架,显然可以让我在我的 android 应用程序上使用 node.js,这个框架的问题是它似乎不是很popular 和 github 似乎有点被遗弃了,不确定我是否应该使用它。另一个问题是我不是 100% 清楚它是否允许我在 android 网络视图中使用 node.js 包。
我没有找到在 webview 中使用原始 tcp 套接字的方法。
但是我能够解决这个问题,将 javascript 接口绑定到我的 webview,允许 webview 和接口(Java class)之间的通信,然后在我很容易实现 tcp 套接字的接口,因为它是 Java.
Java脚本接口信息:
https://developer.android.com/guide/webapps/webview.html#BindingJavaScript
我以前从 Android 到 webview 的通信方式是在我的 webview 中的 js 文件 运行 中定义一个 javascript 函数,我们称它为“myJsFunction()” ,将使用 WebView 的 loadurl() 方法调用,如下所示:
WebView myWebView = ...;
myWebView.loadUrl("javascript:myJsFunction()");
简介
我正在开发一个 Android 应用程序,它允许非程序员使用可视化编程语言(基于块)对教育机器人进行编程。这个机器人运行 lua 虚拟机,可以设置自己的 wifi 网络,我将从我的 Android 设备连接到该网络。
问题
我需要将代码发送给机器人,我需要在 Android 网络视图中执行此操作,因为重要的是用户可以在机器人执行时继续看到基于块的程序,并且将反馈发送回移动设备(这将突出显示正在实时执行的代码块)。 所以基本上:我需要使用我自己的通信协议通过原始 tcp 套接字从 Android webview 内部发送和接收数据。
我尝试了什么?
我一直在搜索有关如何解决此问题的信息。到目前为止我已经学会了:
- Plain javascript:您只能使用支持 http 协议的 websockets,不支持我的自定义协议。
React native:我认为它可以让我解决这个问题,因为它是基于 node.js 并且 node.js 提供了支持原始套接字的库。(丢弃因为显然 React Native 不使用 webview)- Androidjs:它是一个框架,显然可以让我在我的 android 应用程序上使用 node.js,这个框架的问题是它似乎不是很popular 和 github 似乎有点被遗弃了,不确定我是否应该使用它。另一个问题是我不是 100% 清楚它是否允许我在 android 网络视图中使用 node.js 包。
我没有找到在 webview 中使用原始 tcp 套接字的方法。
但是我能够解决这个问题,将 javascript 接口绑定到我的 webview,允许 webview 和接口(Java class)之间的通信,然后在我很容易实现 tcp 套接字的接口,因为它是 Java.
Java脚本接口信息: https://developer.android.com/guide/webapps/webview.html#BindingJavaScript
我以前从 Android 到 webview 的通信方式是在我的 webview 中的 js 文件 运行 中定义一个 javascript 函数,我们称它为“myJsFunction()” ,将使用 WebView 的 loadurl() 方法调用,如下所示:
WebView myWebView = ...;
myWebView.loadUrl("javascript:myJsFunction()");