我注意到Marshmallow(例如Nexus 6P)以及一些最近更新的Lollipop手机(例如Galaxy S5),当我连接到没有互联网的wifi网络时,网络将无法完全连接,直到用户接受提示说明网络没有互联网接入.
有没有办法以编程方式绕过此检查并允许无线连接继续进行无线连接?
我的设备与wifi连接,但如果连接wifi如何,但这些没有互联网连接
以下是我的代码,我试图检查是否没有互联网连接
public static boolean isConnectedWifi(Context context) {
NetworkInfo info=null;
if(context!=null){
info= IsNetConnectionAvailable.getNetworkInfo(context);
}
return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI);
}
Run Code Online (Sandbox Code Playgroud)
当没有互联网访问时,它总是返回true
我几个月前开发了一些Android应用程序项目,它包括,
当时它运行良好.昨天我尝试在真实设备上运行它,我发现它无法进行任何Web服务调用.我在模拟器上期待同样的东西.但令我惊讶的是它在模拟器上运行良好 .....
我在真实设备上获得的异常是:ConnectionTimeOutException.
我想知道摆脱这个问题出了什么问题.我不确定我应该发布什么更多的信息.请问你是否要我发布一些东西
编辑:
AsyncTask<Void, Void, Boolean> gettingHttpOTP = new AsyncTask<Void, Void,Boolean>(){
HttpResponse httpresponse;
HttpClient client ;
JSONObject objSendjson;
HttpPost post ;
HttpEntity entity;
String result;
JSONObject objRetrievejson;
@Override
protected Boolean doInBackground(Void... arg0) {
client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 50000);
objSendjson = new JSONObject();
try
{
post = new HttpPost(Configurations.API_VERIFY_END_USER);
objSendjson.put("Mobile_Number", gCountryCodeAndMobileNumber);
objSendjson.put("Signature_Key", Configurations.SIGNATUREKEY);
post.setHeader("Content-type", "application/json");
post.setEntity(new StringEntity(objSendjson.toString(), "UTF-8"));
httpresponse = client.execute(post);
entity = httpresponse.getEntity();
gHttpResponseCode=httpresponse .getStatusLine().getStatusCode();
if(gHttpResponseCode==200)
{ …Run Code Online (Sandbox Code Playgroud) 我很惊讶在这种常见情况下我无法在互联网上找到任何信息:我如何开始上网?我看了一下,ConnectivityManager但它似乎只是为了监控网络连接.
PS:手机将被植根,所以这不是问题.
我在文档中读到connect方法"立即返回,并在后台连接到服务".但我认为情况并非如此,至少对我而言.
我甚至为connect方法创建了一个单独的线程,但是每次调用UI时仍然会冻结onStart方法(我正在尝试连接).
注意:只有在没有互联网连接时才会发生这种情况.
那么我该如何解决这个问题呢?谢谢
有没有办法检测Google Glass是否在运行时连接到互联网?例如,在我的应用中使用语音输入时,我经常收到"无法立即访问Google"的消息.相反,我想先发制人地拦截导致该消息并使用默认值而不是要求语音输入的条件.在搜索了一段时间之后,我唯一能找到的就是针对Android的相同问题的解决方案:
private boolean isConnected() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Run Code Online (Sandbox Code Playgroud)
我尝试将它用于我的Glassware但它似乎不起作用(我关闭了wifi和数据,但isConnected()仍然返回true,即使我得到"无法立即到达Google"消息).有谁知道GDK是否有办法做到这一点?或者应该类似于上述方法的工作?
编辑:这是我最终的解决方案,部分基于下面的EntryLevelDev的答案.
我不得不使用后台线程来使用HTTP GET请求以避免获得NetworkOnMainThreadException,因此我决定让它每隔几秒运行一次并更新本地isConnected变量:
public static boolean isConnected = false;
public boolean isDeviceConnectedToInternet() {
return isConnected;
}
private class CheckConnectivityTask extends AsyncTask<Void, Boolean, Boolean> {
protected Boolean doInBackground(Void... voids) {
while(true) {
// Update isConnected variable.
publishProgress(isConnected());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* Determines if the Glassware can access the …Run Code Online (Sandbox Code Playgroud) 我想我的Android设备连接到wifi热点.我创建了一个新的wificonfiguration并将其添加到wifimanager,这wificonfiguration有NetworkId.然后我调用该函数wifi.enableNetwork(NetworkId, true).
在那之后,我认为请求者将通过获取IP地址,身份验证,并最终物理连接到热点.那么有没有办法确定wifi是否物理连接?
我更喜欢类似处理程序的方法.
我想检查设备是否有互联网连接.我找到了很多解决方案,但在示例中我不能做这样的事情:
if(device has Internet connection){
webview.loadUrl("http://the.url.com")
}
else{
Toast.makeText(context, text, duration).show()
}
Run Code Online (Sandbox Code Playgroud) android ×7
android-wifi ×3
connection ×1
google-api ×1
google-gdk ×1
google-glass ×1
java ×1
web-services ×1
xml ×1