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

标签 android design-patterns

我创建了一个广播接收器来监视我的连接数据并通知用户。我使用带有自定义 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 广播的网络状态。

这是一个很棒的库:

NetworkEvents

希望对您有所帮助!

关于android - 哪个是检查应用程序内部互联网连接的正确模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33698912/

相关文章:

android - 如何在 calabash-android 中将应用程序带到前台?

java - 使用 IntelliJ 在 Android 上用 Scala 编写的 LibGDX 项目

c++ - 在派生类ctor中接收基类拷贝是错误的吗?

php - 开发网络应用程序

android - 与 Android 4.4.4 相比,通用图像加载器库在 Android 5.0 上运行缓慢

android - 应用程序签名过程如何适用于在网站上创建的应用程序

android - 膨胀 View 不出现

在 std :string failed 中进行 C++ 十六进制搜索

java - 没有枚举的状态模式和 hibernate

c++ - TreeView 中的分层数据和 TreeView 更新技术