gpt4 book ai didi

Android 10 wifi 连接无法到达网关

转载 作者:行者123 更新时间:2023-12-04 23:57:56 33 4
gpt4 key购买 nike

我尝试制作一个简单的应用程序,将智能手机连接到指定的 wifi 网络并重定向到一个 webview,该 webview 通过闪烁二维码显示连接到 wifi 网络的网络服务器。

当我刷我的 QR 码(简单 Wifi QR 码)时,应用程序询问我是否要连接到 wifi 网络,我确认然后它重定向到 webview 但 webview 是空白的......看起来我'我已连接到 wifi 但无法连接到网络...

我的部分二维码 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 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 中的权限

<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 的三星 Galaxy S20 Ultra

我安装了一个网络分析器应用程序,它确认我没有真正连接到 wifi 网络。

手动连接到wifi网络:

Screenshot Network Analyzer Manualy connected to wifi

从我的应用程序扫描二维码连接:

Screenshot Succes QR Code scan, confirm connection

Screenshot wifi settings actual network Connected via My App

Screenshot Network Analyzer connected to wifi via My App

正如我们所见,我似乎已连接到 wifi 网络,但它没有提供我的 IP 地址,而且我无法 ping 我的网络服务器...

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

我不明白为什么当我使用我的应用程序连接到 wifi 网络时我遇到了这个问题......我尝试使用其他 wifi 网络并且它是一样的。我完全卡住了,我在论坛上找不到解决方案...

最佳答案

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

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 连接无法到达网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63227000/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com