You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将Android Web App连接到USB连接的Android设备上的Django开发服务器

如何让真实Android设备的WebView访问本地Django服务

我之前刚好遇到过一模一样的需求,折腾了一会儿搞定了,给你整理下关键步骤,照着来基本没问题:

1. 让Django服务允许局域网访问

默认情况下,Django的runserver只绑定127.0.0.1,也就是只有本机能访问。要让同一局域网的Android设备能连上,得改成绑定所有网卡:

python manage.py runserver 0.0.0.0:8000

解释下:0.0.0.0表示允许通过电脑的任何网卡(包括局域网网卡)访问Django服务,端口还是用8000就行。

2. 获取你的电脑局域网IP地址

Android设备要访问的不是127.0.0.1(那是设备自己的本地地址),而是你电脑在局域网里的真实IP:

  • Windows:打开命令提示符,输入ipconfig,找到「以太网适配器 WLAN」或「以太网」下的IPv4地址,比如192.168.1.105
  • Mac/Linux:打开终端,输入ifconfig(或ip addr),找到对应网卡的inet字段,比如192.168.3.2

3. 配置Android项目的网络权限和明文访问

3.1 添加网络权限

AndroidManifest.xml里,<application>标签外面加上:

<uses-permission android:name="android.permission.INTERNET" />

这是WebView访问网络必须的权限。

3.2 允许明文HTTP访问(Android 9+)

从Android 9(API 28)开始,系统默认禁止App访问明文HTTP地址(Django默认是HTTP)。解决方法二选一:

  • 方法一:在AndroidManifest.xml<application>标签里添加属性:
    android:usesCleartextTraffic="true"
    
  • 方法二:给Django配置HTTPS(相对麻烦,适合正式环境,测试阶段用方法一就行)

4. 编写WebView加载代码

在你的Activity里,配置WebView并加载电脑的局域网IP地址:

WebView webView = findViewById(R.id.webview);

// 开启JavaScript支持(如果你的Django页面用到JS的话,可选)
webView.getSettings().setJavaScriptEnabled(true);

// 设置WebViewClient,避免跳转系统浏览器
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        view.loadUrl(request.getUrl().toString());
        return true;
    }
});

// 替换成你自己的电脑局域网IP
webView.loadUrl("http://192.168.1.105:8000");

5. 排查可能的坑

  • 防火墙拦截:电脑的防火墙可能会阻止Android设备访问8000端口。你需要在防火墙里添加入站规则,允许8000端口的TCP连接,或者直接允许Python程序的网络访问权限。
  • 局域网连接问题:确保Android设备和电脑连接的是同一个WiFi(或有线局域网),可以先在Android设备的自带浏览器里访问http://你的电脑IP:8000,如果能打开Django页面,说明网络没问题,再用WebView加载就肯定能成。

内容的提问来源于stack exchange,提问作者Redgren Grumbholdt

火山引擎 最新活动