小米无法连接ws,其他手机可以

问题描述 投票:0回答:3

我在使用小米 Mi 9 SE 开发的应用程序中遇到问题,而我的其他(较旧)手机(例如 BQ M5 或某些三星)则没有这个问题。

我的APP连接到Web服务以获取一些信息。我有这个 Web 服务的 3 个环境:测试(在本地 LAN 中的 PC 中)、预生产和生产。

测试:“http://10.60.8.223:8080/ws/webservice.wsdl”; (小米连接不上,其他可以连接)

PRE:“https://ws-pre.myaplication.com/ws/webservice.wsdl”; (全部连接正确)

专业版:“https://ws-pro.myaplication.com/ws/webservice.wsdl”; (全部连接正确)

使用任何其他手机,我可以连接到 3 个环境,但是使用小米,我无法连接到我正在调试 Web 服务的 TEST url。

你知道发生了什么事吗? 我可以尝试什么? 也许小米阻止了http连接但承认了https?

提前非常感谢您。 阿德里安。

java android web-services connection xiaomi
3个回答
1
投票

我已经解决了:

在RES文件夹中创建一个名为network_security_config.xml的xml文件。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android">
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

在 Android Manifest 中,应用程序标签内:

<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">

0
投票

你也可以这样做。

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

0
投票

如果其他人也有同样的问题,并且“网络安全配置”仍然不允许来自小米的连接,但该应用程序可以在其他设备上使用,并且您不断收到类似的信息:

"connect failed: EACCES (Permission denied)"

D/client: java.net.ConnectException: failed to connect to /192.168.100.6 (port 8089) from /:: (port 48643): connect failed: EACCES (Permission denied)
W/System.err: java.net.ConnectException: failed to connect to /192.168.100.6 (port 8089) from /:: (port 48643): connect failed: EACCES (Permission denied)
        at libcore.io.IoBridge.connect(IoBridge.java:137)
        at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:137)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
        at java.net.Socket.connect(Socket.java:621)
        at java.net.Socket.connect(Socket.java:570)
        at java.net.Socket.<init>(Socket.java:450)
        at java.net.Socket.<init>(Socket.java:292)
        at twenkid.android.basic.recreatetwenkid_reader_1.MultiTouchActivity$ClientThread.run(MultiTouchActivity.java:207)
        at java.lang.Thread.run(Thread.java:764)
W/System.err: Caused by: android.system.ErrnoException: connect failed: EACCES (Permission denied)
        at libcore.io.Linux.connect(Native Method)
        at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:118)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:151)
        at libcore.io.IoBridge.connect(IoBridge.java:129)
        ... 11 more`

然后:

从手机的 GUI 中卸载该应用程序,并在下次从 PC/Android Studio 等运行时再次安装它。 最终为我解决了这个问题...我们假设当我们按“运行”时,更新后会重新安装该应用程序在 IDE 中,但这些权限似乎没有更新,至少在我的手机上是这样。

感谢 Adrian,在重新阅读提供的网络安全明文配置后,我意识到/回忆起立即尝试重新安装,该配置比我迄今为止使用的版本更短,但我的和这个都不起作用(我的也包括域...,即使有特定的 LAN 地址,甚至端口)。

另一种可能的设置是特定站点和地址的域配置。

<domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">example.com</domain>        
</domain-config>

https://developer.android.com/privacy-and-security/security-config

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.