我的Android应用程序在很大程度上取决于Internet连接。
这是一个适用于Internetradio的应用程序。 MainActivity显示当前信息,例如是否有播放dj或是否有播放列表(并且不时刷新其数据)。
还有两项活动可以显示来自互联网的更多数据(跟踪列表和即将播出的节目)。
目前我检查了我的mainactivity启动,我测试是否连接了wifi,移动或wimax,如果没有连接,我会显示一条消息并退出应用程序。
但我觉得这很糟糕。首先,我认为关闭应用程序并不是一个好主意,而且检查也是一次。因此,如果我打开应用程序,然后转为平面模式,应用程序将继续运行并尝试更新数据 - >失败...
我现在需要的是一个建议我如何改进“我在线”测试。
我当前的想法是BroadcastReceiver
ConnectivityManager.CONNECTIVITY_ACTION
,然后在某处存储一个布尔connected
,我可以在其他代码中查找。
有人知道如何以尽可能干净的方式解决这个问题吗?
提前致谢!
答案 0 :(得分: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;
}
}
现在获取此类方法以查找互联网可用性,如下所示:
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" />
答案 1 :(得分:0)
最简洁的方法是为您在活动中指定的操作注册以编程方式注册的Recever。
将此添加到您的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.
}
}
答案 2 :(得分: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状态。