【问题标题】:Android - Check internet connection by pinging url addressAndroid - 通过 ping url 地址检查互联网连接
【发布时间】:2019-09-07 00:15:29
【问题描述】:

我需要一个在后台不断 ping 谷歌的服务。但我不知道该怎么做。我刚来这地方。我的方法不行就不重复了。它只工作一次,并且总是返回“false”。

isConnectedToServer 函数

 public boolean isConnectedToServer(String url, int timeout) {
try{
  URL myUrl = new URL(url);
  URLConnection connection = myUrl.openConnection();
  connection.setConnectTimeout(timeout);
  connection.connect();
  return true;
} catch (Exception e) {
  // Handle your exceptions
  return false;
}}

onCreate

     @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 if(isConnectedToServer("http://www.google.com",3000)){
      Toast.makeText(this, "Okay", Toast.LENGTH_SHORT).show();
    }else{
      Toast.makeText(this, "Not Okay", Toast.LENGTH_SHORT).show();
    }}

清单

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

我在屏幕上看到一次 Not Okay。只有一次。即使我有互联网连接。我该怎么办?

【问题讨论】:

  • 您可以做的第一件事是从您的 try catch 中打印错误日志,这可能会给您一个提示。您可能还需要互联网许可。
  • 请更新您的问题的日志异常。

标签: java android server ping


【解决方案1】:

尝试创建一个扩展 AsyncTask 的类

public class CheckInternet extends AsyncTask<Void, Void, Boolean>{
 private static final String TAG = "CheckInternet";
private Context context;


public CheckInternet(Context context) {
    this.context = context;

}

@Override
protected Boolean doInBackground(Void... voids) {
    Log.d(TAG, "doInBackground: ");
    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    assert cm != null;
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null &&
            activeNetwork.isConnected();

    if (isConnected) {
        if ( executeCommand()) return true;
    }
    return false;
}

private boolean executeCommand(){
    System.out.println("executeCommand");
    Runtime runtime = Runtime.getRuntime();
    try
    {
        Process  mIpAddrProcess = runtime.exec("/system/bin/ping -c "+"www.google.com");
        int mExitValue = mIpAddrProcess.waitFor();
        System.out.println(" mExitValue "+mExitValue);
        if(mExitValue==0){
            return true;
        }else{
            return false;
        }
    }
    catch (InterruptedException ignore)
    {
        ignore.printStackTrace();
        System.out.println(" Exception:"+ignore);
    }
    catch (IOException e)
    {
        e.printStackTrace();
        System.out.println(" Exception:"+e);
    }
    return false;
}

【讨论】:

  • 无法解析符号 'HelperMethods' ,常量 'Interface expected here' 得到这些错误。我也看不到 www.google.com 中的代码。我需要 ping 谷歌。
  • 立即尝试。我已经更新了代码。在助手类中,我创建了 sharedpreferences 方法。我已经删除了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2016-08-28
  • 2017-11-30
  • 2012-02-21
  • 2013-02-02
  • 2011-02-14
相关资源
最近更新 更多