连接网络时如何检测网络更改并将活动从 A 更改为 B
Posted
技术标签:
【中文标题】连接网络时如何检测网络更改并将活动从 A 更改为 B【英文标题】:How to detect Network change and change activity from A to B when Network is connected 【发布时间】: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"
提前致谢。
【问题讨论】:
【参考方案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 这是经过测试的代码,可以使用。很高兴为您提供帮助。以上是关于连接网络时如何检测网络更改并将活动从 A 更改为 B的主要内容,如果未能解决你的问题,请参考以下文章
如何检测和管理加载的 DLL 执行的磁盘/注册表/网络活动?