android - Android中的进程间通信

标签 android sockets tcp webview

我正在尝试开发一个 android 应用程序,它在(另一个后台运行的应用程序的)webview 中读取加载的 HTML 内容

chrome 远程调试 中得到灵感,它将特定端口中的 tcp 连接转发到 UNIX Domain socket

adb forward tcp:9222 localabstract:webview_devtools_remote_"process_id"

我尝试使用 LocalSocketwebview_devtools_remote_pid 套接字通信

    //https://developer.chrome.com/devtools/docs/protocol/1.1/page#command-enable
    JSONObject jo = new JSONObject();
    jo.put("id", 1);
    jo.put("method", "Page.enable");
    LocalSocket s = new LocalSocket();
    try {
        s.connect(new LocalSocketAddress("webview_devtools_remote_<p_id>"));
        OutputStream oss = s.getOutputStream();
        oss.write(jo.toString().getBytes("utf-8"));
        InputStream iss = s.getInputStream();
        Integer i;
        String res = "";
        while((i = iss.read()) != -1) {
            res += i.toString();
        }
    } catch (Exception e) {
        Log.e("Error", e.toString());
    }

但每次都连接被同行重置

编辑: 有时会出现 java.io.IOException: Broken pipe

关于这个问题的任何想法。

有没有其他更简单的方法来完成这个?

最佳答案

我假设,您正在尝试从在同一设备上运行的应用程序连接到远程网络调试套接字?这只有在您的应用程序以“root”或“shell”用户身份运行,或者如果它使用与您连接的应用程序相同的 key 签名时才有可能,请参阅 the code .

解决此问题后,您需要遵守 DevTools 远程调试协议(protocol)才能获取页面的 HTML 内容,请参阅 the list of existing remote debugging clients and libraries .

关于android - Android中的进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641618/

相关文章:

c - 在 c 中制作和发送混合 double 和整数数组

c# - 检查P2P UDP C#中的断开连接

java - 使用 TCP 通过套接字发送字符串

apache - 关闭由 QNetworkAccessManager 处理的连接

android - 使用 Youtube Player API 播放不同的 youtube 视频

java - 如何从 Android 应用程序更改 Facebook 个人资料中的电子邮件、姓氏、生日?

java - 创建可从 Android 应用程序调用的 NodeJS 微服务

android - Spinner、单击外部后 AutoCompleteTextView 填充(错误?)

c++ - 发送和接收 int C++

c# - WCF 与二进制通过 TCP