如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]
Posted
技术标签:
【中文标题】如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]【英文标题】:how to check if internet is available not if mobile or wifi is turned on in android [duplicate]如果在android中打开了移动设备或wifi,如何检查互联网是否可用[重复] 【发布时间】:2014-02-14 13:40:27 【问题描述】:我有两个活动
第一个名为:MainActivity
第二个名为:MountLebanonActivity
在第二个活动中,我使用此代码从网站检索文本
private TextView txtdata;
final String textSource = "http://orthodoxprayers.yolasite.com/resources/saint_elie_sinelfil.txt";
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
setContentView(R.layout.activity_mount_lebanon);
txtdata = (TextView)findViewById(R.id.txtdata);
new MyTask().execute();
URL textUrl;
try
textUrl = new URL(textSource);
BufferedReader bufferReader
= new BufferedReader(new InputStreamReader(textUrl.openStream()));
String StringBuffer;
String stringText = "";
while ((StringBuffer = bufferReader.readLine()) != null)
stringText += StringBuffer;
bufferReader.close();
txtdata.setText(stringText);
catch (MalformedURLException e)
e.printStackTrace();
txtdata.setText(e.toString());
catch (IOException e)
e.printStackTrace();
txtdata.setText(e.toString());
private class MyTask extends AsyncTask<Void, Void, Void>
String textResult;
@Override
protected Void doInBackground(Void... params)
URL textUrl;
try
textUrl = new URL(textSource);
BufferedReader bufferReader
= new BufferedReader(new InputStreamReader(textUrl.openStream()));
String StringBuffer;
String stringText = "";
while ((StringBuffer = bufferReader.readLine()) != null)
stringText += StringBuffer;
bufferReader.close();
textResult = stringText;
catch (MalformedURLException e)
e.printStackTrace();
textResult = e.toString();
catch (IOException e)
e.printStackTrace();
textResult = e.toString();
return null;
@Override
protected void onPostExecute(Void result)
txtdata.setText(html.fromHtml(textResult));
super.onPostExecute(result);
在第一个活动中,我将此代码放在按钮的 onclick 事件中
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
android.net.NetworkInfo wifi = cm
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
android.net.NetworkInfo datac = cm
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if ((wifi != null & datac != null)
&& (wifi.isConnected() | datac.isConnected()
&& (wifi.isAvailable() | datac.isAvailable())))
//connection is available
Intent intent_main_time = new Intent(MainActivity.this,
MountLebanonActivity.class);
startActivity(intent_main_time);
finish();
else
//no connection
Toast toast = Toast.makeText(getBaseContext(), "No Internet",
Toast.LENGTH_LONG);
toast.show();
如果打开或关闭 wifi 或移动设备,此代码可以正常工作
但是如果我的 wifi 已打开并且没有互联网连接,则此代码不起作用,因为我没有得到 toast,但第二个活动打开时出现错误代码 java.net.connectesception: failed to connect .. . 80 端口连接失败 econnrefused(连接被拒绝)
有什么帮助吗?
【问题讨论】:
“互联网可用”是什么意思?你的意思是你可以访问每一个曾经连接过的主机吗?或者也许只是您连接到当前连接的每个主机?更有可能的是,您的意思是您可以访问一小组主机。 ping 他们。 我的意思是我的 wifi 已打开但没有互联网连接 此代码检查 wifi 或移动设备是否已打开但我还需要检查是否有互联网连接 使用此代码,您将永远无法访问 else: (wifi.isConnected() | datac.isConnected()if
将在 wifi.isConnected() 工作时启动。
只是检查你是否可以连接到你的url,它没有返回连接错误
在启动 Activity 之前尝试连接。
【参考方案1】:
你是对的。您提供的代码仅检查是否有网络连接。检查是否存在活动 Internet 连接的最佳方法是尝试通过 http 连接到已知服务器。
public static boolean hasActiveInternetConnection(Context context)
if (isNetworkAvailable(context))
try
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 200);
catch (IOException e)
Log.e(LOG_TAG, "Error checking internet connection", e);
else
Log.d(LOG_TAG, "No network available!");
return false;
【讨论】:
我应该把这段代码放在哪里 在你的广播接收器类中 请这样尝试。 twigstechtips.blogspot.in/2013/07/…以上是关于如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]的主要内容,如果未能解决你的问题,请参考以下文章