如何在没有Internet连接时阻止Web视图活动启动?

时间:2016-06-21 03:26:23

标签: android android-webview

我有一个带有Web视图的应用程序,可以在第二个活动中加载。该应用程序有两个活动。第二个活动在第一个活动中按下按钮时开始。

我的问题是,我想阻止第二个活动开始并保留在第一个活动上,如果没有互联网连接则显示祝酒词。我的网络检查在第二个活动中完成。

这是我的第一个活动:

public class FirstActivity extends AppCompatActivity {

    public void startSecondActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }

这是我的第二项活动:

public class SecondActivity extends AppCompatActivity {

    private WebView mWebView;

    public static boolean checkInternetConnection(Context context) {
        ConnectivityManager con_manager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);

        if (con_manager.getActiveNetworkInfo() != null
                && con_manager.getActiveNetworkInfo().isAvailable()
                && con_manager.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        if (!SecondActivity.checkInternetConnection(this)) {
            Toast.makeText(getApplicationContext(), "No Internet Connection!!!", Toast.LENGTH_SHORT).show();
        } else {
            mWebView = (WebView) findViewById(R.id.webView);
            mWebView.setWebViewClient(new CustomWebViewClient());
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.loadUrl("http://m.sovran.in/index.php?id=" + token);
        }
    }

3 个答案:

答案 0 :(得分:0)

试试这个:

public void startSecondActivity(View view) {
    if (!SecondActivity.checkInternetConnection(this)) {
        Toast.makeText(getApplicationContext(), "No Internet Connection!!!", Toast.LENGTH_SHORT).show();
    } else {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
}

答案 1 :(得分:0)

在开始第二次Activity之前,您需要检查互联网连接。要检查您的互联网连接,请使用以下代码。将函数放在项目的任何类中。这是一个public static函数,可以从任何地方访问。

public static boolean isConnectionAvailable(Context context) {
    if (context == null) return false;

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();
    return info != null && info.isConnected();
}

现在在FirstActivity中用此替换函数startSecondActivity。请注意,您实际上并不需要在View函数中传递startSecondActivity

public void startSecondActivity() {

    if(!isConnectionAvailable(this)) return; 

    Intent intent = new Intent(this, SecondActivity.class);
    startActivity(intent);
}

答案 2 :(得分:0)

试试这个

public class FirstActivity extends AppCompatActivity {

 public static boolean checkInternetConnection(Context context) {
        ConnectivityManager con_manager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);

        if (con_manager.getActiveNetworkInfo() != null
                && con_manager.getActiveNetworkInfo().isAvailable()
                && con_manager.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    }

    public void startSecondActivity(View view) {
         if(checkInternetConnection(this))
         {
          Intent intent = new Intent(this, SecondActivity.class);
          startActivity(intent);
          }
         else
         Toast.makeText(getApplicationContext(), "No Internet Connection!!!", Toast.LENGTH_SHORT).show();
    }

正如你所评论的那样。您似乎需要将checkInternetConnection放在公共静态类中并在您的情况下检查两次? 1.一旦启动SecondActivityIntent 2.加载SecondActivity的Web视图时

所以它会像

public class HelperClass{
public static boolean checkInternetConnection(Context context){
// your code for checking internet as you have written
...................................................
....................................
    }
    }

以这种方式使用

只需致电HelperClass.checkInternetConenction(this) 从任何活动中检查,传递上下文

// -------------------------------------- 以下是你的Classe Hirarchy应该如何 enter image description here

这是静态类

package workgroundspace.gs.com.workgroundspace;

import android.content.Context;
import android.net.ConnectivityManager;

/**
 * Created by godslave on 6/21/16.
 */
 public class HelperClass {

    public static boolean checkInternetConnection(Context context) {
        ConnectivityManager con_manager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);

        if (con_manager.getActiveNetworkInfo() != null
                && con_manager.getActiveNetworkInfo().isAvailable()
                && con_manager.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    }

}

我在这里调用静态方法进行互联网状态检查

package workgroundspace.gs.com.workgroundspace;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        if(HelperClass.checkInternetConnection(this)){
            Intent goToOtherActivity = new Intent(this,OtherActivity.class);

            startActivity(goToOtherActivity);
        }
        else
        {
            Log.d("MainActivity", "no internet");
            Toast.makeText(this,"No internte coneection",Toast.LENGTH_SHORT).show();
        }


    }
}