我创建了一个广播接收器来监视我的连接数据并通知用户。我使用带有自定义 View 的 Activity 来显示没有连接的 Logo 。
如果我在 list 中注册接收器并且应用程序关闭,当更改连接状态时,应用程序会重新打开,我不希望出现这种行为。
应该遵循的正确模式是什么? 例子?链接?
这是我的接收器:
public class ConnectionHelper extends BroadcastReceiver {
static final String ACTION_CLOSE_ACTIVITY = "android.net.conn.CLOSE_ACTIVITY";
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if (!isConnected) {
Intent mainIntent = new Intent(context, NoConnectionActivity.class);
mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mainIntent);
} else {
Intent in = new Intent(ACTION_CLOSE_ACTIVITY);
context.sendBroadcast(in);
}
}
....
预先感谢您的回复。
===UPDATE===
最后,对于我的应用程序,我使用了 NetworkEvents lib正如@Anderson C Silva 所建议的那样。
我创建了一个简单的应用程序来帮助所有对如何解决这个问题有疑问的其他人。 github repository
最佳答案
我想这个问题的一个好的解决方案是以编程方式启用和禁用广播。当应用程序关闭时,禁用广播,如下所示:
PackageManager pm = getPackageManager();
ComponentName compName =
new ComponentName(getApplicationContext(),
YourReceiver.class);
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
在这里查看更多:
Enabling and Disabling BroadcastReceivers at Runtime
这种情况的另一种可能的解决方案是使用一些 lib EventBus,这样您就可以在 Activity 中注册以接收来自 Message 广播的网络状态。
这是一个很棒的库:
希望对您有所帮助!
关于android - 哪个是检查应用程序内部互联网连接的正确模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33698912/