如果网络连接速度慢,我必须显示一个页面
我正在使用此代码检查网络
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
Toast.makeText(MainActivity.this,"wifi",Toast.LENGTH_LONG).show();
// do something
} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
// check NetworkInfo subtype
if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS) {
Toast.makeText(MainActivity.this,"mobile 100kbps",Toast.LENGTH_LONG).show();
// Bandwidth between 100 kbps and below
} else if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE) {
Toast.makeText(MainActivity.this,"mobile 50-100kbps",Toast.LENGTH_LONG).show();
// Bandwidth between 50-100 kbps
} else if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_EVDO_0) {
Toast.makeText(MainActivity.this,"mobile 400-1000kbps",Toast.LENGTH_LONG).show();
// Bandwidth between 400-1000 kbps
} else if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_EVDO_A) { …Run Code Online (Sandbox Code Playgroud) 我有 SplashActivity、Activity A 和 Activity B。
当 Internet 不可用时,Splash Activity 重定向到 Activity A,当 Internet 可用且已连接时,SplashActivity 重定向到 Activity B。
我想在用户自己连接时立即关闭活动 A,并在用户仍在应用程序内时打开活动 B 并打开他的 wifi 或移动数据。
这是我在 SplahsActivity 中使用的代码,用于根据网络状态重定向到活动 A 和活动 B
public static boolean isNetworkStatusAvialable(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
}
Run Code Online (Sandbox Code Playgroud)
我检查
if (isNetworkStatusAvialable(getApplicationContext())) {
// Load Activity B
} else {
Load Activity A and Toast Message, " No Internet"
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我想检测手机的互联网连接速度是慢速还是高速。
现在他们已经弃用NetworkInfo并建议我们应该使用ConnectivityManager#getNetworkCapabilities 它我能够获得信号强度但无法弄清楚如何使用返回的整数值networkCapabilities.getSignalStrength()
它返回一个整数值,我得到这些值(-39、-71、-31)。我的问题是我们应该如何定义信号强度好/差。
这是我获取信号强度的代码:
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
Network activeNetwork = cm.getActiveNetwork();
NetworkCapabilities networkCapabilities = cm.getNetworkCapabilities(activeNetwork);
int signalStrength = networkCapabilities.getSignalStrength();
Run Code Online (Sandbox Code Playgroud) 我希望 Android 应用程序仅使用移动数据,即使 WIFI 和移动数据都在Android 6 中。如何仅将 android 进程绑定到移动数据。
请建议。例子会很好。
android cellular-network wifi android-6.0-marshmallow android-connectivitymanager
我正在使用FFmpeg将视频从相机(通过 wifi 连接而没有互联网连接)重新流式传输到另一台服务器,我想通过蜂窝数据进行重新流式传输过程。因为我已经连接到 wifi 并同时使用蜂窝数据 bindProcessToNetwork()。在执行 ffmpeg 命令之前,我已完成以下操作
final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder req = new NetworkRequest.Builder();
req.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
cm.requestNetwork(req.build(), new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
//here you can use bindProcessToNetwork
//cm.getNetworkInfo(network);
if (cm.getNetworkInfo(network).getType() == ConnectivityManager.TYPE_MOBILE) {
cm.bindProcessToNetwork(network);
}
}
});
Run Code Online (Sandbox Code Playgroud)
在大多数情况下它工作正常,就像 webview 通过使用蜂窝数据正常工作,同时连接到 wifi,但是当我尝试执行任何 ffmpeg 命令时它不起作用。
android ffmpeg android-networking android-connectivitymanager
我正在构建一个应用程序,通过它我们可以使用类检测互联网连接的可用性ConnectivityManager,但我不确定如何使用Mockito. 请帮我编写以下代码的单元测试用例:
class ConnectivityMgr @Inject constructor(val context: Context) {
fun isConnectedOrConnecting(): Boolean {
val connMgr = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connMgr.getNetworkCapabilities(connMgr.activeNetwork)?.run {
return hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || hasTransport(
NetworkCapabilities.TRANSPORT_CELLULAR
)
}
} else {
@Suppress("DEPRECATION")
connMgr.activeNetworkInfo?.let {
return when (it.type) {
ConnectivityManager.TYPE_WIFI -> true
ConnectivityManager.TYPE_MOBILE -> true
else -> false
}
}
}
return false
}
}
Run Code Online (Sandbox Code Playgroud) junit android unit-testing mockito android-connectivitymanager
我已经为“ CONNECTIVITY_CHANGE”广播了接收器。当我用这个打印多余的东西时:
intent.getExtras().toString()
Run Code Online (Sandbox Code Playgroud)
我可以看到,如果禁用WIFI,则会收到2次网络更改。
但是,当我尝试使用
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
Run Code Online (Sandbox Code Playgroud)
它说,此API已被弃用。在那之后,我试图用这个
int networkType = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_TYPE);
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(networkType);
Run Code Online (Sandbox Code Playgroud)
但是,getNetworkInfo也已被弃用。
他们给我的唯一选择是使用getActiveNetworkInfo或getActiveNetwork。
如果使用它,我将获得2次广播,这将给我相同的网络信息。
有没有更好的方法来处理Android中的网络状态?
特别提示:
感谢您的快速回复,但是我没有寻找一种检查是否可以连接互联网的方法。
我需要知道哪个网络已断开连接。我正在寻找网络状态更改。
android ×7
android-connectivitymanager ×7
wifi ×2
ffmpeg ×1
java ×1
junit ×1
mockito ×1
networkinfo ×1
networking ×1
unit-testing ×1