Android 10 wifi连接无法到达网关 [英] Android 10 wifi connection can't reach gateway

查看:130
本文介绍了Android 10 wifi连接无法到达网关的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试制作一个简单的应用程序,将智能手机连接到指定的wifi网络,并通过闪烁QR代码重定向到显示连接到wifi网络的网络服务器的Web视图.

I try to make a simple app that connect the smartphone to a specify wifi network and redirect to a webview that show a webserver connected on the wifi network by flashing a QR Code.

当我闪烁我的QR码(简单的Wifi QR码)时,应用程序询问我是否要连接到wifi网络,请确认并重定向到Web视图,但Web视图为空白...看起来像我在我已连接到wifi,但无法访问网络...

When I flash my QR Code (Simple Wifi QR Code) the app ask if I want to connect to the wifi network, I confirm and then it redirect to a webview but the webview is blank... It looks like I'm connected to the wifi but I can't reach the network...

我的QR码活动的一部分:

Part of my QR Code Activity :

public void successFlash(String ssid, String password) {

    WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
            .setSsid(ssid)
            .setWpa2Passphrase(password)
            .build();

    NetworkRequest request = new NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .setNetworkSpecifier(specifier)
            .build();

    ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);


    ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {

        public void onAvailable(Network network) {
                    openActivity_redirect_webview();
        }

        @Override
        public void onUnavailable() {
            // do failure processing here..
            openQrcodeActivity();
        }

    };
    connectivityManager.requestNetwork(request, networkCallback);
}

我的webview活动:

My webview Activity :

public class activity_redirect_webview extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_redirect_webview);

    webView = (WebView) findViewById(R.id.redirect_webview);
    webView.setWebViewClient(new WebViewClient());
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

    webView.loadUrl("http://192.168.4.1/index.html");
  }

}

AndroidManifest.xml中的权限

Permission in AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-feature android:name="android.permission.WRITE_SETTINGS"
    android:required="false"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.wifi" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.VIBRATE" />

我的手机是带有Android 10的Samsung Galaxy S20 Ultra

EDIT : My phone is a Samsung Galaxy S20 Ultra with Android 10

我安装了Network Analyzer应用程序,它确认我没有真正连接到wifi网络.

I install a Network Analyzer app and it confirm that I'm not really connected to the wifi network.

手动连接到wifi网络:

Manualy connection to the wifi network :

屏幕快照网络分析仪已手动连接到wifi

通过扫描我的应用"中的QR码进行连接:

Connection by scanning QR Code from My App :

截屏成功扫描QR码,确认连接

屏幕截图wifi设置实际网络是通过我的应用程序"连接的

通过我的应用"连接到wifi的屏幕截图网络分析器

我们可以看到它好像已连接到wifi网络,但它没有提供我的IP地址,而且我无法ping通我的Web服务器...

As we can see it's look like i'm connected to the wifi network but it doesn't gives me ip address and I can't ping my web server...

我需要在AndrooidManifest中获得更多权限吗?

Does I need more permissions in AndrooidManifest ??

我不明白为什么当我使用我的应用程序连接到wifi网络时出现此问题...我尝试使用其他wifi网络,这是相同的.我完全陷入困境,在论坛上找不到任何解决方案...

I don't understand why when I use my app to connect to a wifi network i got this problem... I try with others wifi network and it's the same. I'm totally stuck and I found no solution on forums...

推荐答案

我终于找到了解决方案,只需要添加一行代码,告诉应用程序将进程绑定到您刚刚连接的wifi网络即可.

I finally found the solution, just need to add a line that tell the app to bind the process to the wifi network you just connect.

connectivityManager.bindProcessToNetwork(network);

最终代码:

public void successFlash(String ssid, String password) {

WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
        .setSsid(ssid)
        .setWpa2Passphrase(password)
        .build();

NetworkRequest request = new NetworkRequest.Builder()
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        .setNetworkSpecifier(specifier)
        .build();

ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);


ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {

    public void onAvailable(Network network) {
                connectivityManager.bindProcessToNetwork(network);
                openActivity_redirect_webview();
    }

    @Override
    public void onUnavailable() {
        // do failure processing here..
        openQrcodeActivity();
    }

};
connectivityManager.requestNetwork(request, networkCallback);

}

这篇关于Android 10 wifi连接无法到达网关的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆