2

我的 Android 应用程序高度依赖 Internet 连接。

这是一个互联网广播的应用程序。MainActivity 显示当前信息,例如是否有 dj 正在播放或是否有播放列表(并不时刷新其数据)。

还有两项活动显示来自互联网的更多数据(曲目列表和即将上映的节目)。

目前我检查了我的 mainactivity 的启动,我测试是否连接了 wifi、移动设备或 wimax,如果没有连接,我会显示一条消息并退出应用程序。

但我对此感到非常难过。首先,我认为关闭应用程序不是一个好主意,而且检查是一次。所以如果我打开应用程序然后打开平面模式,应用程序会继续运行并尝试更新数据 - >失败......

我现在需要的是一个建议,我可以如何改进“我在线”测试。我目前的想法是BroadcastReceiverConnectivityManager.CONNECTIVITY_ACTION然后在某个地方存储一个布尔值connected,我可以在我的其他代码中查找。

有人知道如何以尽可能干净的方式解决这个问题?

提前致谢!

4

3 回答 3

1

在你的包中添加 AppStatus 类

    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.util.Log;

        public class AppStatus {

            private static AppStatus instance = new AppStatus();
            private ConnectivityManager connectivityManager;
            private static Context context;
            private boolean connected = false;

            public static AppStatus getInstance(Context ctx) {

                context = ctx;
                return instance;
            }

            // Check internet connection available
            public Boolean isOnline(Context con) {

                try {
                    connectivityManager = (ConnectivityManager) con
                            .getSystemService(Context.CONNECTIVITY_SERVICE);

                    NetworkInfo networkInfo = connectivityManager
                            .getActiveNetworkInfo();
                    connected = networkInfo != null && networkInfo.isAvailable()
                            && networkInfo.isConnected();
                    return connected;

                } catch (Exception e) {
                    Log.v("connectivity", e.toString());
                }

                return connected;
            }
        }

现在获取此类方法以查找 Internet 可用性,如下所示:

    if (AppStatus.getInstance(Activity.this).isOnline(
                                Activity.this)) {
        }

在 AndroidManifest 中添加这些权限

<uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
于 2013-09-28T05:45:30.653 回答
0
public static boolean isConnected(Context context) {
    final ConnectivityManager conMgr = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED) {
        return true;
    } else {
        return false;
    }
}

您可以使用此方法检查 Internet 状态。

于 2013-09-28T06:13:49.420 回答
0

最简洁的方法是为您在活动中指定的操作注册一个以编程方式注册的接收器。

将此添加到您的onCreate()方法中。

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(AWCMClientConstants.AWCM_STARTED);
getActivity().registerReceiver(mNetworkStateChangedReceiver, filter);

将此作为内部类添加到您的活动中。

private class NetworkStateChangedReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        // Detect from Intent what's the change and Do what you want to.
    }
}
于 2013-09-28T05:37:57.203 回答