检查android studio是否存在互联网连接不良
我正在我的应用程序中使用奖励广告视频。当没有互联网连接时,我使用此功能检查,不显示广告检查android studio是否存在互联网连接不良,android,Android,我正在我的应用程序中使用奖励广告视频。当没有互联网连接时,我使用此功能检查,不显示广告 public final boolean isInternetOn() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = conn
public final boolean isInternetOn() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
但问题是,当连接不良时,显示广告会花费很多时间,而广告不会显示很多次。我想检查是否连接不良,如果连接不良,请不要显示广告,并显示连接不良警报。如何实现这一点?您需要定义慢速网络的含义。我假设你所说的慢速网络是指2G和3G网络。在这种情况下,您可以使用
NetworkInfo
类的subType
来识别用户当前所在的网络类型,并执行相应的操作
例如,假设您认为2G速度较慢,您可以按如下方式识别2G网络
NetworkInfo network = connectivity.getActiveNetworkInfo();
int netSubType = network.getSubtypeName();
if(netSubType == TelephonyManager.NETWORK_TYPE_GPRS ||
netSubType == TelephonyManager.NETWORK_TYPE_EDGE ||
netSubType == TelephonyManager.NETWORK_TYPE_1xRTT) {
//user is in slow network
}
有关此类常量值的更多信息,请参见类。您可以通过Java线程基本细节构建一个简单的逻辑,例如,您将使用此可运行类来获取连接并计时:
public class CheckInternetActivity implements Runnable{
public CheckInternetActivity() {
}
@Override
public void run() {
System.out.println("Call...sleep....zzzzZZZZZ");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Call...wake up!");
}
}
这是一种可能的basi main方法调用尝试:
ExecutorService executor=Executors.newSingleThreadExecutor()
因此,将所有内容包装在一个伪文件中:
public class CheckInternetActivity implements Runnable{
private ConnectivityManager connectivityManager;
private NetworkInfo activeNetworkInfo;
public CheckInternetActivity(ConnectivityManager connectivityManager, NetworkInfo activeNetworkInfo ) {
this.connectivityManager = connectivityManager;
this.activeNetworkInfo = activeNetworkInfo;
}
@Override
public void run() {
System.out.println("getting internet connection");
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
System.out.println("Connected!");
}
}
主要…:
ConnectivityManager connectivityManager;
NetworkInfo activeNetworkInfo;
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit( new CheckInternetActivity(connectivityManager, activeNetworkInfo) );
executor.shutdown();
System.out.println(executor.awaitTermination(4, TimeUnit.SECONDS));//this tells you how much did it takes...and let you do your move based on this output
if(activeNetworkInfo != null)
System.out.println( "activeNetworkInfo--->" + activeNetworkInfo.isConnected());
else
System.out.println( "activeNetworkInfo--->null!!");
让我知道它是否有帮助…试试这个-OP一般要求互联网连接;这包括wifi。@ezio感谢您的回复!我增加了2G和3G的检查,但我有一个奇怪的问题。我的电话网络是TelephonyManager.network\u TYPE\u LTE,但仍然没有加载广告。我是否也应该使用4G添加更多检查?也许您可以尝试一下,我还建议您的广告服务系统没有返回任何错误remplace int netSubType=network.getsubsubtyName();to int netSubType=network.getSubtype();
ConnectivityManager connectivityManager;
NetworkInfo activeNetworkInfo;
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit( new CheckInternetActivity(connectivityManager, activeNetworkInfo) );
executor.shutdown();
System.out.println(executor.awaitTermination(4, TimeUnit.SECONDS));//this tells you how much did it takes...and let you do your move based on this output
if(activeNetworkInfo != null)
System.out.println( "activeNetworkInfo--->" + activeNetworkInfo.isConnected());
else
System.out.println( "activeNetworkInfo--->null!!");