Android互联网访问控制

时间:2011-12-14 18:01:28

标签: android

我正在创建一个依赖于Web服务的应用程序,为了使应用程序正常工作,我需要检查手机是否能够连接到该Web服务。我首先检查手机是否有任何互联网连接,如果有,我尝试连接到我的网络服务。如果它可以连接到网站一切正常,但如果我由于某种原因无法访问它,如果我在我的PC上禁用连接,该应用程序仍然尝试连接到网站导致强制关闭。有没有办法让应用程序尝试连接到Web服务15秒,如果在此期间无法连接,它将停止。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    if (httpzRequest() == true) {
        Toast t = Toast.makeText(this, "Success!", Toast.LENGTH_LONG);
        t.setGravity(Gravity.CENTER, 0, 0);
        t.show();

    } else {
        Toast t = Toast.makeText(this,
                "There's a problem with your internet connection",
                Toast.LENGTH_LONG);
        t.setGravity(Gravity.CENTER, 0, 0);
        t.show();
    }

}

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager
            .getActiveNetworkInfo();
    return activeNetworkInfo != null;
}

public boolean httpzRequest() {
    if (isNetworkAvailable() == true) {
        try {

            HttpClient client = new DefaultHttpClient();
            URI site = new URI("http://www.google.se/");
            HttpGet request = new HttpGet();
            request.setURI(site);
            HttpResponse response = client.execute(request);

            return true;
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println(e);
            return false;
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            System.out.println(e);
            return false;
        }
    } else {
        return false;
    }
}

}

3 个答案:

答案 0 :(得分:0)

使用倒数计时器尝试:

new CountdownTimer(30000, 1000) {  //This is 30 seconds so change it to 1500 to make it 15 seonds

 public void onTick(long millisUntilFinished) {
     mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
 }

 public void onFinish() {
     mTextField.setText("done!"); //Here run your code.
 }
 }.start();

还要确保添加互联网连接的清单权限

答案 1 :(得分:0)

我建议你看看这个问题 How to set HttpResponse timeout for Android in Java

您需要设置HttpConnectionParams。

答案 2 :(得分:0)

我认为是一个选项,

获取一个全局变量秒。用零初始化它。现在将您的web服务代码放在一个线程内,同时(true)或while(flag)循环。当你因为任何事情没有得到回应时,你可以用catch块获得它。在那里增加全局变量值。将线程睡眠放入内部持续调用Web服务的时间间隔。现在,在捕获异常的位置放置if条件,如果全局变量和用户定义变量匹配则打破循环。并完成了。 :)

我建议你在线程内部运行web服务调用,因为有时没有线程的调用会冻结UI线程。