Как обнаружить изменение сети и изменить активность с A на B, когда сеть подключена - PullRequest
0 голосов
/ 28 августа 2018

У меня есть SplashActivity, Activity A и Activity B.

Когда Интернет недоступен, действие Splash перенаправляется на действие A, а когда Интернет доступен и подключен, SplashActivity перенаправляет на действие B.

Я хотел бы немедленно закрыть действие A, когда пользователь сам подключен, и открыть действие B, когда пользователь все еще находится внутри приложения, и он открыл свои данные Wi-Fi или мобильный.

Вот код, который я использую в SplahsActivity для перенаправления на активность A и активность B согласно состоянию сети

public static boolean isNetworkStatusAvialable(Context context) {
    ConnectivityManager cm =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    return activeNetwork != null &&
            activeNetwork.isConnectedOrConnecting();

}

и я проверяю с

  if (isNetworkStatusAvialable(getApplicationContext())) {
    // Load Activity B
  } else {
    Load Activity A and Toast Message, " No Internet"
  }

Заранее спасибо.

1 Ответ

0 голосов
/ 28 августа 2018

В этом случае вам следует проверить состояние сети с помощью BroadcastReceiver, поскольку вы немедленно хотите закрыть текущую активность и перейти к другой активности. Ниже приведен полный код для этого:

ConnectivityStatusReceiver.java

public class ConnectivityStatusReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {

    final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();

    if (activeNetworkInfo != null) {
      Toast.makeText(context, activeNetworkInfo.getTypeName() + " connected", Toast.LENGTH_SHORT).show();

      // Your code to start Activity B
      Activity activity = (Activity) context;
      intent = new Intent(activity, ActivityB.class);
      activity.startActivity(intent);

    } else {
      Toast.makeText(context, "No Internet or Network connection available", Toast.LENGTH_LONG).show();
    }
  }

}

MainActivity.java

public class MainActivity extends AppCompatActivity {
  ConnectivityStatusReceiver connectivityStatusReceiver;

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

    connectivityStatusReceiver = new ConnectivityStatusReceiver();
  }

  @Override
  protected void onResume() {
    super.onResume();
    IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(connectivityStatusReceiver, intentFilter);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    if (connectivityStatusReceiver != null) {
      // unregister receiver
      unregisterReceiver(connectivityStatusReceiver);
    }
  }
}

Чтобы закрыть задание A, просто добавьте android:noHistory="true" в манифест, как показано ниже:

<activity android:label="@string/app_name" android:name="ActivityA"/>

Надеюсь, это поможет вам.

...