Проверить интернет во время SplashScreen

Ну, после моего SplashScreen экрана. Мое приложение проверит подключение к Интернету. если есть доступ в Интернет, он вызовет WebView. В противном случае он вызовет одно действие ошибки.

Но как подключиться для проверки интернета ВО ВРЕМЯ SplashScreen?

ЗАСТАВКА АКТИВНОСТИ:

public class Splash extends Activity{

    private static int tempo_splash = 1000;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // Para o layout preencher toda tela do cel (remover a barra de tit.)

        new Timer().schedule(new TimerTask() {

            public void run() {
                finish();

                Intent intent = new Intent();
                intent.setClass(Splash.this, MainActivity.class); //Chamando a classe splash e a principal (main)
                startActivity(intent);
            }
        }, 2000);

    }

}

МОЙ КЛАСС CheckINTERNET:

public class CheckInternet extends Activity{

    boolean status = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.internet);

        Button btnStatus = (Button) findViewById(R.id.check_btn);
        btnStatus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                status = checkInternetConnection();

                if (status) {

                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            final Intent mainIntent = new Intent(CheckInternet.this, MainActivity.class);
                            CheckInternet.this.startActivity(mainIntent);
                            CheckInternet.this.finish();
                        }
                    }, 5000);

                }
                else {
                    Toast.makeText(getApplicationContext(), "You don't have Internet connection. Try Again", Toast.LENGTH_LONG).show();

                }
            }
        });
    }


    public boolean checkInternetConnection() {

        ConnectivityManager connectivity = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);

        if (connectivity != null) {
            NetworkInfo[] inf = connectivity.getAllNetworkInfo();
            if (inf != null) {
                for (int i = 0; i < inf.length; i++) {
                        return true;
                }
            }
        }
        return false;
    }

}

person Kevin Jhon    schedule 01.06.2016    source источник
comment
У вас неправильная реализация заставки. проверьте этот stackoverflow.com/a/36916491/3436179 и во всплывающей активности вызовите основную активность после проверки Интернета.   -  person Alexander    schedule 01.06.2016


Ответы (4)


попробуйте этот код... может вам поможет

public class SplashScreen extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setContentView(R.layout.splash_screen);

    if(isWorkingInternetPersent()){
        splash();
    }
    else{
        showAlertDialog(SplashScreen.this, "Internet Connection",
                "You don't have internet connection", false);
    }
}
public void splash() {
    Thread timerTread = new Thread() {
        public void run() {
            try {
                sleep(4000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                Intent intent = new Intent(getApplicationContext(), New_Main_Activity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                finish();
            }
        }
    };
    timerTread.start();
}
public boolean isWorkingInternetPersent() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getBaseContext()
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null) {
        NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
        if (info != null)
            for (int i = 0; i < info.length; i++)
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }

    }
    return false;
}
public void showAlertDialog(Context context, String title, String message, Boolean status) {
    AlertDialog alertDialog = new AlertDialog.Builder(context).create();

    // Setting Dialog Title
    alertDialog.setTitle(title);

    // Setting Dialog Message
    alertDialog.setMessage(message);

    // Setting alert dialog icon
    // alertDialog.setIcon((status) ? R.mipmap.ic_launcher : R.mipmap.ic_launcher);

    // Setting OK Button
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {

            finish();
            System.exit(0);
        }
    });

    // Showing Alert Message
    alertDialog.show();
}
person Amit Basliyal    schedule 02.06.2016

У вас не должно быть намерения только для проверки подключения. Мое предложение состоит в том, чтобы создать «служебный» класс — вызов MyConnectivityChecker, и туда вы добавляете статический метод (isConnected) со следующим кодом:

    public class MyConnectivityChecker {

        public static boolean  isConnected(Context context){
         boolean connected = false;
         ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
         NetworkInfo mobile = connectivityManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);        
         connected = (wifi.isAvailable() && wifi.isConnectedOrConnecting() || (mobile.isAvailable() && mobile.isConnectedOrConnecting()));
         return connected;
    }
}

Затем в своем Splash Activity везде, где вы хотите проверить подключение, вы вызываете метод isConnected следующим образом:

MyConnectivityChecker.isConnected(this)

Например, вы можете сделать что-то вроде этого:

if(MyConnectivityChecker.isConnected(this)){
//connectivity available
}
else{
 //no connectivity
}

Надеюсь, это поможет. Попробуйте и дайте мне знать.

person ishmaelMakitla    schedule 01.06.2016
comment
Класс MyConnectivityChecker расширяет Splash? - person Kevin Jhon; 01.06.2016
comment
Нет, это просто класс — не расширяет Splash — вы все равно можете получить доступ к его общедоступному статическому методу из Splash. - person ishmaelMakitla; 01.06.2016
comment
Хорошо, весь этот код имеет вставку внутри класса MyConnectivityChecker? - person Kevin Jhon; 01.06.2016
comment
Проверка происходит в классе MyConnectivityChecker или Splash? - person Kevin Jhon; 01.06.2016
comment
Код для проверки подключения находится в MyConnectivityChecker. - person ishmaelMakitla; 01.06.2016
comment
проверка, если / else не работает. if(MyConnectivityChecker.isConnected(this)){ //connectivity available } else{ //no connectivity } - person Kevin Jhon; 02.06.2016
comment
Что вы имеете в виду, если / else не работает? Где вы его используете? Пожалуйста, покажите свой обновленный код в вопросе. - person ishmaelMakitla; 02.06.2016

то, что вы можете сделать, это проверить подключение к Интернету внутри вашего таймера SplashScreen.

new Timer().schedule(new TimerTask() {

    public void run() {
        if(isOnline()){

            Intent intent = new Intent(Splash.this,WebViewActivity.class);
            startActivity(intent);
            finish();

        }else{

             Intent intent = new Intent(Splash.this,ErrorActivity.class);
             startActivity(intent);
             finish();

        }
    }
}, 2000);

И для интернет-проверки вы можете использовать этот метод.

public boolean isOnline() {
    System.out.println("executeCommand");
    Runtime localRuntime = Runtime.getRuntime();
    try {
        int i = localRuntime.exec("/system/bin/ping -c 1 8.8.8.8")
                .waitFor();
        System.out.println(" mExitValue " + i);
        boolean bool = false;
        if (i == 0) {
            bool = true;
        }
        return bool;
    } catch (InterruptedException localInterruptedException) {
        localInterruptedException.printStackTrace();
        System.out.println(" Exception:" + localInterruptedException);
        return false;
    } catch (IOException localIOException) {
        localIOException.printStackTrace();
        System.out.println(" Exception:" + localIOException);
    }
    return false;
} 

ПРИМЕЧАНИЕ. Добавьте этот метод на экран-заставку вне метода onCreate().

Удачного кодирования..

person V-rund Puro-hit    schedule 02.06.2016

Создайте следующий служебный класс, как показано ниже:

public class Utility {

/**
     * This function check <u>Mobile Data</u> or <u>WiFi</u> is switched on or not..<br />
     * It will be return <b>true</b> when switched on and return <b>false</b> when switched off.<br />
     * <br />
     * Developed by <b><a href="http://about.me/SutharRohit">Suthar Rohit</a></b>
     *
     * @param context {@link Context} of activity
     * @return true if <u>Mobile Data</u> or <u>WiFi</u> is switched on.
     */
    public static boolean isOnline(Context context) {
        try {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo nInfo = cm.getActiveNetworkInfo();
            return nInfo != null && nInfo.isConnected();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

и используйте, как показано ниже, на заставке:

if(Utility.isOnline()) {
     // INTERNET AVAILABLE

} else {
     // INTERNET NOT AVAILABLE
}
person Rohit Suthar    schedule 02.06.2016
comment
метод MyConnectivityChecker.isOnline() не может разрешить символ - person Kevin Jhon; 02.06.2016
comment
я думаю, вы не объявляете isOnline() как static. поэтому возникла эта проблема. - person Rohit Suthar; 02.06.2016