You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一设备上无需服务器,Web应用如何向MAUI Android应用传输文本数据

同一设备上Web应用向MAUI Android应用本地传输文本数据的实现方法

当然可以实现,无需服务器的本地方案有以下几种,操作步骤如下:

1. 自定义URL Scheme(最简单直接的方案)

  • MAUI Android端配置
    打开项目的Platforms/Android/AndroidManifest.xml,给主Activity添加intent-filter,定义自定义Scheme:
    <activity android:name="MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!-- 自定义Scheme,示例为myapp:// -->
            <data android:scheme="myapp" />
        </intent-filter>
    </activity>
    
    接着在MainActivity.cs中重写OnNewIntent方法,解析传入的URL获取文本:
    protected override void OnNewIntent(Intent intent)
    {
        base.OnNewIntent(intent);
        if (intent.Data != null)
        {
            // 提取URL中的参数,比如myapp://sendtext?data=HelloWorld
            string textData = intent.Data.GetQueryParameter("data");
            // 在这里处理文本,比如更新UI
            MainThread.BeginInvokeOnMainThread(() =>
            {
                // 示例:将文本显示在Label上
                // myLabel.Text = textData;
            });
        }
    }
    
  • Web应用端调用
    在网页中通过JS触发Scheme跳转,注意对文本进行URL编码:
    const sendText = (text) => {
        const encodedText = encodeURIComponent(text);
        window.location.href = `myapp://sendtext?data=${encodedText}`;
    };
    // 调用示例
    sendText("要发送的文本内容");
    
    注:部分浏览器会弹出跳转确认提示,避免被误判为恶意跳转。

2. 内嵌WebView的JS桥接(适合Web应用运行在MAUI内的场景)

如果Web应用是嵌入在MAUI的WebView中,可直接通过JS桥接实现数据传递:

  • MAUI端配置
    在创建WebView时,添加JS接口:
    var webView = new WebView();
    webView.JavascriptEnabled = true;
    // 注册JS可调用的桥接对象
    webView.AddJavascriptInterface(new TextBridge(), "AndroidTextBridge");
    
    // 桥接类定义
    public class TextBridge : Java.Lang.Object
    {
        [JavascriptInterface]
        [Export("receiveText")]
        public void ReceiveText(string text)
        {
            // 处理从Web端传来的文本
            MainThread.BeginInvokeOnMainThread(() =>
            {
                // 更新UI逻辑
            });
        }
    }
    
  • Web应用端调用
    直接调用MAUI注册的JS接口:
    AndroidTextBridge.receiveText("要发送的文本内容");
    

3. 本地Socket通信(适合实时或大量数据传输)

通过本地环回地址建立Socket连接,实现双向数据传输:

  • MAUI Android端启动Socket服务器
    开启本地TCP监听:
    private async Task StartLocalSocketServer()
    {
        var listener = new TcpListener(IPAddress.Loopback, 8888);
        listener.Start();
        while (true)
        {
            using var client = await listener.AcceptTcpClientAsync();
            using var stream = client.GetStream();
            using var reader = new StreamReader(stream);
            // 读取Web端发送的文本
            string receivedText = await reader.ReadLineAsync();
            // 处理文本
            MainThread.BeginInvokeOnMainThread(() =>
            {
                // 更新UI或存储数据
            });
        }
    }
    
    记得在AndroidManifest.xml中添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • Web应用端作为Socket客户端
    使用WebSocket连接本地服务器:
    const socket = new WebSocket('ws://localhost:8888');
    socket.onopen = () => {
        socket.send("要发送的文本内容");
    };
    socket.onclose = () => {
        console.log("连接关闭");
    };
    

内容的提问来源于stack exchange,提问作者Tuval Gueta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:40:59