- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
更新:它确实有效:TRANSPORT_CELLULAR
连接仅在 TRANSPORT_WIFI
断开时可用。除非您在手机的开发人员设置中启用了同步蜂窝数据,否则在启用 WiFi 时您将不会收到回调。
我正在尝试在手机的蜂窝数据连接发生变化时接收回叫。我基本上需要知道它何时关闭以及何时打开。
我以前使用 TelephonyManager
和 PhoneStateListener.LISTEN_SERVICE_STATE
来执行此操作,但现在我想使用 ConnectionManager
和 registerNetworkCallback
。
以下代码示例已在 Android 模拟器 (API 28)、HUAWEI P20 Lite (API 26)、HTC One M8 (API 23) 和摩托罗拉 G6 (API 26) 上进行了尝试。当我打开/关闭移动数据或激活飞行模式时,它们都不会调用任何回调。
NetworkRequest.Builder builder = new NetworkRequest.Builder();
builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
connManager.registerNetworkCallback(builder.build(), new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
Log.d("Conman Test", "onAvailable");
}
@Override
public void onLost(Network network) {
Log.d("Conman Test", "onLost");
}
@Override
public void onUnavailable() {
Log.d("Conman Test", "onUnavailable");
}
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
Log.d("Conman Test", "onCapabilitiesChanged");
}
@Override
public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
Log.d("Conman Test", "onLinkPropertiesChanged");
}
});
我已经尝试过 NetworkCapabilities.TRANSPORT_WIFI
,它在所有设备上都运行良好。那么为什么不NetworkCapabilities.TRANSPORT_CELLULAR
呢?
最佳答案
我没有尝试使用 NetworkCapabilities
来解决这个问题,但我使用了另一种方法来确定我的设备是通过蜂窝网络还是通过 wifi 连接的。
我刚刚注册了一个接收器
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
我添加了权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
然后我做了以下
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
if(activeNetwork ==null){
Log.d("Connectivity","Not connected");
return;
}
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
if(isConnected && isWiFi){
Log.d("Connectivity","WIFI");
}else{
Log.d("Connectivity","CELLULAR");
}
}
}
对于 Oreo 设备,您可能需要在 Activity 或服务中注册接收器而不是 list
举个例子
public class MainActivity extends Activity {
IntentFilter filter1;
@Override
public void onCreate() {
filter1 = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(myReceiver, filter1);
}
//The BroadcastReceiver that listens for network change
private final BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equalsIgnoreCase("android.net.conn.CONNECTIVITY_CHANGE")) {
Log.d(TAG,"connectivity change");
ConnectivityManager cm =
(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
if(activeNetwork ==null){
Log.d("Connectivity","Not connected");
return;
}
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
if(isConnected && isWiFi){
Log.d("Connectivity","WIFI");
}else{
Log.d("Connectivity","CELLULAR");
}
}
}
};
@Override
public void onDestroy() {
unregisterReceiver(myReceiver);
}
}
关于android - 使用 `TRANSPORT_CELLULAR` 时 ConnectionManager 不提供网络回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165382/
有时我会收到 java.net.SocketException: Too many open files java.net.Socket.createImpl(Socket.java:397) jav
我需要增加客户端建立的并发连接数,并且遇到了以下属性:ConnectionManagement.MaxConnections和ServicePointManager.DefaultConnection
在 .NET 4 应用程序中,与主机的 2 个连接的默认限制(通过 )是否适用于 SqlConnection游泳池? 最佳答案 不,因为 SqlConnection 使用 Win32 API 而不是
我的 WebApp 使用 AWS S3 服务作为一堆文件的存储。当收到请求时,将使用 Jets3t 库从 S3 获取适当的文件,该库在底层使用 ASF HttpClient。问题在于 HttpClie
我目前正在开发一个 sinatra 应用程序,我在 postgresql 与 sinatra 的连接方面遇到了问题,我尝试执行此命令: rake db:create 创建数据库但它抛出此错误。 C:\
我已经阅读了所有我能找到的关于 connectionManagement 中的 maxconnection 设置的文章:即 http://support.microsoft.com/kb/821268
Registry reg =RegistryBuildercreate().register("https", new SSLConnectionSocketFactory(ctx)).regist
更新:它确实有效:TRANSPORT_CELLULAR 连接仅在 TRANSPORT_WIFI 断开时可用。除非您在手机的开发人员设置中启用了同步蜂窝数据,否则在启用 WiFi 时您将不会收到回调。
我有一个这样的集线器: public class MessageHubBub : Hub { public void ServerMethod() { Clients.
我正在尝试通过在 mvc 应用程序中使用 SignalR 向所有客户端广播消息。我遇到的问题是,当我使用这段代码时 var context = GlobalHost.ConnectionManager
配置文件的 system.net connectionManagement 部分中 maxconnection 配置值的文档让我感到困惑。当您在地址中使用通配符时 - 是每个主机的限制还是所有主机共享
我正在 Android 中开发 Google map 。它向服务器请求在标记上显示某些内容,现在我想在用户平移 map 时终止待处理请求或所有请求的连接。 最佳答案 关闭底层InputStream,这
我正在尝试检查连接并在每个状态下执行一些操作,但是当我关闭手机中的连接时,应用程序崩溃并给我这个错误“cnxManager .activeNetworkInfo 不能为空” 我的代码 private
我正在将控制台应用程序(REST 客户端应用程序)从 .NET 框架迁移到 .NET Core。 在我当前的(框架)版本中,我使用 app.config 文件来设置 System.Net 配置:
我正在尝试从 .net Web API Controller 操作中调用客户端方法。 我可以这样做吗? 我能找到的唯一一篇贴近我想要做的文章是这篇文章: SignalR + posting a mes
我目前正在将一个 Rails 项目从 v5.2.3 升级到 v6.0。我正在关注 guide升级 rails 。但我只停留在第一步。一旦我更改了 gemfile 中的 rails 版本并更新了 rai
我正在尝试在一个项目中使用 OWIN、SignalR 和 Autofac。 我正在对 signalR 进行如下设置: // Create the AutoFac container bu
我们正在升级 Sinatra来自ActiveRecord 4的申请到 ActiveRecord 5。以前我们有这一行: 使用 ActiveRecord::ConnectionAdapters::Con
尝试通过 Controller 方法中的 CrudRepository 保存 ConnectionManager 类时,出现错误“找不到类 ConnectionManager 所需的标识符属性”。 我
我得到以下异常: java.io.IOException: java.lang.reflect.InvocationTargetException at org.apache.hadoop.h
我是一名优秀的程序员,十分优秀!