标签: android-connectivitymanager

如何检查android中的慢速网络连接

如果网络连接速度慢,我必须显示一个页面

我正在使用此代码检查网络

   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)

networking android wifi android-connectivitymanager

5
推荐指数
1
解决办法
6635
查看次数

连接网络时如何检测网络更改并将活动从 A 更改为 B

我有 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)

提前致谢。

java android android-connectivitymanager

4
推荐指数
1
解决办法
2937
查看次数

如何检测Android应用程序中的慢速互联网连接

我想检测手机的互联网连接速度是慢速还是高速。

现在他们已经弃用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 signal-strength android-connectivitymanager

4
推荐指数
1
解决办法
2334
查看次数

如何在 Android 6 中打开 wifi 时对任何应用程序强制使用移动数据

我希望 Android 应用程序仅使用移动数据,即使 WIFI 和移动数据都Android 6 中。如何仅将 android 进程绑定到移动数据。
请建议。例子会很好。

android cellular-network wifi android-6.0-marshmallow android-connectivitymanager

2
推荐指数
1
解决办法
3422
查看次数

bindProcessToNetwork 不适用于 android 中的 ffmpeg

我正在使用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

2
推荐指数
1
解决办法
1080
查看次数

如何对 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

2
推荐指数
1
解决办法
3616
查看次数

如何在Android上获取网络状态更改?

我已经为“ CONNECTIVITY_CHANGE”广播了接收器。当我用这个打印多余的东西时:

intent.getExtras().toString() 
Run Code Online (Sandbox Code Playgroud)

我可以看到,如果禁用WIFI,则会收到2次网络更改。

  1. 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 networkinfo android-connectivitymanager

0
推荐指数
1
解决办法
1万
查看次数