PS4手机连接到电脑不显示 电脑不显示

在线时间0 小时
积分 25, 距离下一级还需 25 积分
积分 25, 距离下一级还需 25 积分
V8.0.10.0.MAGCNDH
wifi连接后浏览器弹不出认证登录界面,直接显示连不上网
遇到的人越多,MIUI开发组会越关注
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
Copyright (C) 2016 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号wifi portal 检测(wifi连接后需要登陆验证的网络判断) - 简书
wifi portal 检测(wifi连接后需要登陆验证的网络判断)
如果文章中一些错误或不准确甚至不正确的地方,请告诉我,以免误导他人。如果有幸文章被转载也希望保留原地址。
在测试过程中也发现应用下载的文件大小都是16B,直觉告诉我这是网络出了问题,但是又能下载说明请求本身是成功的,最后发现是测试时所处的网络在连接后还需要登陆的网络,所下载的内容是一个登陆页面html代码。由此引出了今天我们要讨论的问题,wifi portal 登陆检测。
那什么是portal认证?概念我就不讲了,举个栗子:你去交通银行办理业务在排队的时候发现他家有免费的wifi,你链接上,打开浏览器,提示你需要输入手机号和验证码,你按照指示输入内容点击“我要上网”。然后你就可以链接上网络了。这个过程中“你已经接入网络,网络提示你输入手机号和验证码已验证你的身份”这个过程就是portal认证。
试过的错误方式
这个方式尽管来头不小,可是不管用(也或许我使用的方式不对)
这个方式来自于Android官方文档 (查看文档需要翻墙)
so i save it as img for you
我翻译下(三级英语水平):有些wifi网络需要打开登陆页面并登陆后才能使用。这种打开登陆页面的方式通常是通过重定向http请求实现的。你可以用getURL()方法来判断你的链接是否被重定向。这种检测方式在使用时要保证请求返回的response headers内容已经返回,你可以在读取返回内容前调用getHeaderFileds()或者getInputStream()方法,来确保response已经返回。下面举个栗子,检测response是否被重定向到了其他host。
笔者认为,上面解释及下面的栗子主要思想就是:你发送一个请求,请求中包含了你请求地址的host如果请求没有被重定向到登陆界面,那么response中host的地址依然还是原来的host,否则他就不应该是原来的host。
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
if (url.getHost().equals(urlConnection.getURL().getHost())) {
// we were redirected! kick the user out to the browser to sign on?
} finally {
urlConnection.disconnect();
我要讲的方法
其实想想这个功能对于手机系统是个蛮重要的,难道Android没有实现么,我不用说你也知道答案了。确实有,但是由于Google服务器在墙外,导致了这个功能不能用了。程序员搜索要用Google程序员搜索要用Google程序员搜索要用Google我在百度搜索了半天的解决方案,始终是没有头绪,只好Google了下,分分钟找到了这个方法。(又一次深深的教育了我:程序员用Google)
为了避免大家一头雾水,我先说说他的原理:
当我们发送一个request请求时,我们得到的response总是会携带一个(除非请求超时)。WiFi portal同样也要遵循这样的规则,WiFi portal拦截网络请求时,返回给我们一个response(内容是登陆页面)。我们的这次请求虽然被拦截了,但是无疑他是一个成功的请求,也就是说response携带的状态码应该是 200 。这时,我们与服务器端商定一个请求链接http :///genera_204,固定返回一个状态码 204。当网络状态发生变化时候,我们就去请求这个链接。如果我们的response携带的状态码是204说明我们请求成功,如果我们得到的是200,说明需要进行WiFi 验证。
这个方法来自Android4.0.1AOSP源码
private boolean isWifiSetPortal() {
// 商定的请求链接
final String mWalledGardenUrl = "/generate_204";
// 设置请求超时
final int WALLED_GARDEN_SOCKET_TIMEOUT_MS = 10000;
HttpURLConnection urlConnection =
URL url = new URL(mWalledGardenUrl);
urlConnection = (HttpURLConnection) url.openConnection();
// 是否应该自动执行 http 重定向(响应代码为 3xx 的请求)。
urlConnection.setInstanceFollowRedirects(false);
urlConnection.setConnectTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);
urlConnection.setReadTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);
urlConnection.setUseCaches(false);
urlConnection.getInputStream();
// 判断返回状态码是否与预设的204相同
return urlConnection.getResponseCode() != 204;
} catch (IOException e) {
} finally {
if (urlConnection != null) {
// 记得释放资源
urlConnection.disconnect();
抱大腿对于个人开发者或者“小厂商”不建议在我们自己的服务器上处理http :///generate_204,除非你家的服务器很稳定,基本上不出现问题。这时候我们可以考虑下“大厂商”是否已经有类似的功能。像UC啊什么的。他们都能自动提醒你网络需要登陆,他们也是使用了同样的方式,至于链接地址,就靠大家自己了。
下面是我写好的代码,但是我还没有应用于生产环境\我还没有应用于生产环境\我还没有应用于生产环境,所以不保证在真实应用下的效果。
import java.io.IOE
import java.net.HttpURLC
import java.net.URL;
import android.os.AsyncT
* 检测wifi是否需要登陆
* @author like
* 使用方式:
* NetNeedLoginCheckUtil.needLoginNetworkCheck(new NeedLoginCallBack() {
public void needLogin(boolean needLogin) {
if (needLogin) {
wifi 需要登陆
* 实现方式来至Android4.0.1AOSP code
* @link /file//java/ext/com.google.android/android/4.0.1_r1/android/net/wifi/WifiWatchdogStateMachine.java#WifiWatchdogStateMachine.isWalledGardenConnection%28%29
public class NetNeedLoginCheckUtil extends AsyncTask&Integer, Integer, Boolean&{
NeedLoginCallBack callB
public NetNeedLoginCheckUtil(NeedLoginCallBack callBack) {
this.callBack = callB
protected Boolean doInBackground(Integer... params) {
return isWifiSetPortal();
protected void onPostExecute(Boolean result) {
if (callBack != null) {
callBack.needLogin(result);
private boolean isWifiSetPortal() {
final String mWalledGardenUrl = "http://connect./generate_204";
final int WALLED_GARDEN_SOCKET_TIMEOUT_MS = 10000;
HttpURLConnection urlConnection =
URL url = new URL(mWalledGardenUrl);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setInstanceFollowRedirects(false);
urlConnection.setConnectTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);
urlConnection.setReadTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);
urlConnection.setUseCaches(false);
urlConnection.getInputStream();
return urlConnection.getResponseCode() != 204;
} catch (IOException e) {
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
public static void needLoginNetworkCheck(NeedLoginCallBack callBack) {
new NetNeedLoginCheckUtil(callBack).execute();
public interface NeedLoginCallBack{
void needLogin(boolean needLogin);后使用快捷导航没有帐号?
平板/笔记本
WiFi连接后没有弹出认证界面
&登堂入室&
来自:浏览器
WiFi连接后没有弹出认证界面这个要怎么解决呢,谢谢了
width:100%">
&独步江湖&
来自:浏览器
都不容易,帮顶一下
width:100%">
&渐入佳境&
来自:浏览器
你说的是不是公共网络,要输入号码验证密码的那种吗?
要是没有弹出来的话,你可以直接进入浏览器的,然后浏览器页面就会直接显示认证界面的哦
我连接公共网络的时候都是这样做的
width:100%">
&花粉版主&
来自:浏览器
你好,粉粉,可以直接进入浏览器打开网页,会自动跳转登录界面的
width:100%">
&登堂入室&
来自:浏览器
我也是,苹果的是自动跳出,微软8.1的自动跳出,升10后就和mate8一样了,要去打开浏览器,任意点击一下,才调到认证界面
width:100%">

我要回帖

更多关于 ps4连接电脑显示器 的文章

 

随机推荐