【问题标题】:How to detect Network change and change activity from A to B when Network is connected连接网络时如何检测网络更改并将活动从 A 更改为 B
【发布时间】:2019-02-02 13:01:12
【问题描述】:

我有 SplashActivity、Activity A 和 Activity B。

当 Internet 不可用时,Splash 活动重定向到 Activity A,当 Internet 可用且已连接时,SplashActivity 重定向到 Activity B。

我想在用户自行连接时立即关闭 Activity A,并在用户仍在应用程序内并打开他的 wifi 或移动数据时打开 Activity B。

这是我在 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"
  }

提前致谢。

【问题讨论】:

    标签: java android android-connectivitymanager


    【解决方案1】:

    在这种情况下,您应该使用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);
        }
      }
    }
    

    要关闭 Activity A,您只需在 Manifest 中添加 android:noHistory="true",如下所示:

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

    希望这会对你有所帮助。

    【讨论】:

    • 嗯,谢谢你的帮助。我会很期待,一旦我到达我的办公桌并会告诉你。
    • @BirNepali 这是经过测试的代码,可以使用。很高兴为您提供帮助。
    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    相关资源
    最近更新 更多