问题描述
我尝试制作一个简单的应用程序,将智能手机连接到指定的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 :
通过扫描我的应用"中的QR码进行连接:
Connection by scanning QR Code from My App :
我们可以看到它好像已连接到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连接无法到达网关的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!