哪个是检查应用程序内部互联网连接的正确模式?

时间:2015-11-13 17:51:51

标签: android design-patterns

我创建了一个广播接收器,用于监控我的连接数据并通知用户。我使用带有自定义视图的活动来显示没有连接的徽标。

如果我在清单中注册接收器并且应用程序已关闭,则在更改连接状态时,应用程序将重新打开,我不想要此行为。

要遵循的正确模式是什么? 例?链路?

这是我的接收者:

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 ===

最后,对于我的申请,我使用了@Anderson C Silva建议的NetworkEvents lib

我创建了一个简单的应用程序来帮助所有对如何解决这个问题有疑问的人。 github repository

1 个答案:

答案 0 :(得分:1)

我想这个问题的一个很好的解决方案是以编程方式启用和禁用广播。当应用程序关闭时,禁用广播,如下所示:

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,这样你就可以通过Message在你的Activity中注册接收网络状态的状态。

这是一个很棒的lib:

NetworkEvents

我希望这有帮助!