解决方案 »

  1.   

    直接写一个访问网络的  判断是否有数据返回 比如访问www.baidu.com 如果有数据返回  说明网络是可用,否则网络不可用。 so easy。
      

  2.   

    手机端可以这样做吗? 一般app都是先请求网络的;不做请求也就判断网络是否链接;如果硬是要那样做你还要拿一个测试接口时时请求网络,如果中间有一次没请求成功才能判断网络是否链接错误
      

  3.   

    public static int getConnectedType(Context context) { 
    if (context != null) { 
    ConnectivityManager mConnectivityManager = (ConnectivityManager) context 
    .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); 
    if (mNetworkInfo != null && mNetworkInfo.isAvailable()) { 
    return mNetworkInfo.getType(); 


    return -1; 
    }
    这个方法可以,http://www.jb51.net/article/32920.htm 这是地址
      

  4.   

    public static boolean isNetworkAvailable(Context context) {
    ConnectivityManager connectivity = (ConnectivityManager) context
    .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity == null) {
    return false;
    } else {
    NetworkInfo[] info = connectivity.getAllNetworkInfo();
    if (info != null) {
    for (int i = 0; i < info.length; i++) {
    if (info[i].isConnected()) {
    return true;
    } }
    }
    }
    return false;
    }
      

  5.   

    从网络原理上考量,除了ping或者请求一个可靠设备之外,好像还真没法得知当前的internet连接是否存在。路由器是不会告知你目前internet是否联通的,而且这个判断是否能够联通internet也是有歧义的。比如,我的电脑wifi信号图标没有黄叹号,但是我上不了youtube,对于我而言是否算联通internet呢?
      

  6.   

    上不了youtube获取网络域名被限制了吧,这种情况微信一直能判断出来,但是有时候有网,微信偶尔也会提示网络链接异常,囧(/ □ \)
      

  7.   

    其实微信的判断方式也是去尝试连接自己的服务器来验证在他所定义的网络是否可用,包括windows的网络状态(受限、internet不可用)等其实原理都差不多,所以你想做网络条件判断还是连接自己的服务器为好
      

  8.   

    其实微信的判断方式也是去尝试连接自己的服务器来验证在他所定义的网络是否可用,包括windows的网络状态(受限、internet不可用)等其实原理都差不多,所以你想做网络条件判断还是连接自己的服务器为好其实用服务器判断也有个弊端,我们客户端判断请求超时的时间我们设置了5S,比如的确有网,但是如果服务器比较小,用户量大,请求时间过长,那就可能会误判是没网还是请求超时,当然,这种可能性很小
      

  9.   

    ping一下,什么意思?手机怎么ping啊,ping了之后看ip么
      

  10.   

    楼主,我用http协议帮你写了一个DEMO,你看看希望对你有用
    package app.example.test0929;import java.io.BufferedReader;
    import java.io.InputStreamReader;import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.util.Log;
    import android.view.Menu;
    import android.widget.TextView;
    import android.widget.Toast;public class MainActivity extends Activity implements Runnable {
    private TextView tv;
    private Handler hand = new Handler() {
    @Override
    public void handleMessage(Message msg) {
    // 这里面已经是主线程了
    if (msg.what == 0) {
    tv = (TextView) findViewById(R.id.tv);
    String s = ((StringBuilder) msg.obj).toString();
    tv.setText(s);
    }
    if (msg.what == 1) {
    Toast.makeText(MainActivity.this, "网络连接成功", 1000).show();
    } }
    }; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 必须在单独的线程进行网络连接
    new Thread(this).start();
    } @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    } @Override
    public void run() {
    // HttpClient连接对象
    HttpClient client = new DefaultHttpClient();
    StringBuilder builder = new StringBuilder();
    // HttpGet连接对象使用get方式请求 HttpGet myget = new HttpGet("http://www.baidu.com/"); try {
    // HttpResponse对象,连接成功后的一个响应对象
    HttpResponse response = client.execute(myget);
    Log.d("响应值为", response.getStatusLine().getStatusCode() + "");
    // 返回值为200,即为服务器成功响应了请求
    if (response.getStatusLine().getStatusCode() == 200) {
    hand.sendEmptyMessage(1);
    }
    // 包装后的输入流
    BufferedReader reader = new BufferedReader(new InputStreamReader(
    response.getEntity().getContent()));
    // 通过输入流,把响应对象里面的数据读取出来
    for (String s = reader.readLine(); s != null; s = reader.readLine()) {
    builder.append(s);
    } } catch (Exception e) {
    e.printStackTrace();
    } Message msg = new Message();
    msg.what = 0;// 装的是标示符
    msg.obj = builder;// 装的就是我们要传递的消息
    hand.sendMessage(msg);
    }}
    记得在注册表中给联网权限 <uses-permission android:name="android.permission.INTERNET" />
      

  11.   

    以下是layout布局文件
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >    <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" /></RelativeLayout>
      

  12.   

    嗯嗯,你这是直接用HttpClient先请求百度首页来判断的啊,谢谢, 还是得用读取服务器数据来判断啊
      

  13.   


    这很简单啊,你把HttpGet myget = new HttpGet("http://www.baidu.com/");
    这里的http://www.baidu.com/改成你需求得网址,然后再通过response 响应请求获取数据,再判断就行了啊。建议你自己先去看看Http的协议的Get和Postq请求的用法吧
      

  14.   


    这很简单啊,你把HttpGet myget = new HttpGet("http://www.baidu.com/");
    这里的http://www.baidu.com/改成你需求得网址,然后再通过response 响应请求获取数据,再判断就行了啊。建议你自己先去看看Http的协议的Get和Postq请求的用法吧我们项目中有这个公共方法的,如果真的只有这一种方式能确切的判断网络链接,那就是需要把URI提供一下就行了
      

  15.   



    ping的命令是"/system/bin/ping-c " + 1 + " " + "www.baidu.com"这个吗,一直报java.io.IOException: Error running exec(). Command: [/system/bin/ping-c, 1, www.baidu.com] Working Directory: null Environment: null异常啊,而且是不是要root权限的?