Android ConnectionManager.NetworkCallback()->;当设备连接到内部wifi网络时,不会触发可用(网络)方法
我正在尝试通过内部wifi网络将远程医疗数据发送到App Center,但它不是通过此网络发送,而是通过任何外部网络发送。调试发现,当设备连接到内部wifi时,不会调用onAvailable()方法,但当连接到任何外部wifi时,会调用该方法 以下代码来自App Center SDK:Android ConnectionManager.NetworkCallback()->;当设备连接到内部wifi网络时,不会触发可用(网络)方法,android,visual-studio-app-center,network-connection,android-connectivitymanager,Android,Visual Studio App Center,Network Connection,Android Connectivitymanager,我正在尝试通过内部wifi网络将远程医疗数据发送到App Center,但它不是通过此网络发送,而是通过任何外部网络发送。调试发现,当设备连接到内部wifi时,不会调用onAvailable()方法,但当连接到任何外部wifi时,会调用该方法 以下代码来自App Center SDK: appcenter\utils\NetworkStateHelper.javaNetworkStateHelper.java。 类NetworkStateHelper->Method reboon()-->pub
appcenter\utils\NetworkStateHelper.javaNetworkStateHelper.java。 类NetworkStateHelper->Method reboon()-->public void onAvailable(网络)方法 示例代码:
private ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager.NetworkCallback()
{
@Override
public void onAvailable(Network network) {
onNetworkAvailable(network);
}
@Override
public void onLost(Network network) {
onNetworkLost(network);
}
};
当连接到内部wifi网络时,它应该调用onAvailable方法。如android中所述:
针对Android 7.0(API级别24)及更高版本的应用程序不会收到
如果他们声明了广播接收器,则连接性\u操作广播
在他们的舱单上。应用程序仍将接收连接操作
如果他们将其广播接收器注册到
并且该上下文仍然有效
这意味着,如果您的目标api高于24,则需要在活动开始时注册广播接收器
在您的活动中onCreate()
宣布广播:
private BroadcastReceiver connectivityReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//check state here....
}
};
您必须将网络类型限制为Wifi 1。构建
网络请求
:
val networkRequest = getNetworkRequest()
private fun getNetworkRequest(): NetworkRequest {
return NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) //here!!
.build()
}
val networkCallback = getNetworkCallBack()
private fun getNetworkCallBack(): ConnectivityManager.NetworkCallback {
return object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) { //when Wifi is on
super.onAvailable(network)
Toast.makeText(requireContext(), "Wifi is on!", Toast.LENGTH_SHORT).show()
}
override fun onLost(network: Network) { //when Wifi 【turns off】
super.onLost(network)
Toast.makeText(requireContext(), "Wifi turns off!", Toast.LENGTH_SHORT).show()
}
}
}
fun getConnectivityManager() = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
override fun onResume() { //start monitoring when in the foreground
super.onResume()
getConnectivityManager().registerNetworkCallback(networkRequest, networkCallback)
}
override fun onPause() { //stop monitoring when not fully visible
super.onPause()
getConnectivityManager().unregisterNetworkCallback(networkCallback)
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2。构建网络回调
:
val networkRequest = getNetworkRequest()
private fun getNetworkRequest(): NetworkRequest {
return NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) //here!!
.build()
}
val networkCallback = getNetworkCallBack()
private fun getNetworkCallBack(): ConnectivityManager.NetworkCallback {
return object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) { //when Wifi is on
super.onAvailable(network)
Toast.makeText(requireContext(), "Wifi is on!", Toast.LENGTH_SHORT).show()
}
override fun onLost(network: Network) { //when Wifi 【turns off】
super.onLost(network)
Toast.makeText(requireContext(), "Wifi turns off!", Toast.LENGTH_SHORT).show()
}
}
}
fun getConnectivityManager() = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
override fun onResume() { //start monitoring when in the foreground
super.onResume()
getConnectivityManager().registerNetworkCallback(networkRequest, networkCallback)
}
override fun onPause() { //stop monitoring when not fully visible
super.onPause()
getConnectivityManager().unregisterNetworkCallback(networkCallback)
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3。注册和注销:
val networkRequest = getNetworkRequest()
private fun getNetworkRequest(): NetworkRequest {
return NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) //here!!
.build()
}
val networkCallback = getNetworkCallBack()
private fun getNetworkCallBack(): ConnectivityManager.NetworkCallback {
return object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) { //when Wifi is on
super.onAvailable(network)
Toast.makeText(requireContext(), "Wifi is on!", Toast.LENGTH_SHORT).show()
}
override fun onLost(network: Network) { //when Wifi 【turns off】
super.onLost(network)
Toast.makeText(requireContext(), "Wifi turns off!", Toast.LENGTH_SHORT).show()
}
}
}
fun getConnectivityManager() = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
override fun onResume() { //start monitoring when in the foreground
super.onResume()
getConnectivityManager().registerNetworkCallback(networkRequest, networkCallback)
}
override fun onPause() { //stop monitoring when not fully visible
super.onPause()
getConnectivityManager().unregisterNetworkCallback(networkCallback)
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4。不要忘记权限:
val networkRequest = getNetworkRequest()
private fun getNetworkRequest(): NetworkRequest {
return NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) //here!!
.build()
}
val networkCallback = getNetworkCallBack()
private fun getNetworkCallBack(): ConnectivityManager.NetworkCallback {
return object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) { //when Wifi is on
super.onAvailable(network)
Toast.makeText(requireContext(), "Wifi is on!", Toast.LENGTH_SHORT).show()
}
override fun onLost(network: Network) { //when Wifi 【turns off】
super.onLost(network)
Toast.makeText(requireContext(), "Wifi turns off!", Toast.LENGTH_SHORT).show()
}
}
}
fun getConnectivityManager() = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
override fun onResume() { //start monitoring when in the foreground
super.onResume()
getConnectivityManager().registerNetworkCallback(networkRequest, networkCallback)
}
override fun onPause() { //stop monitoring when not fully visible
super.onPause()
getConnectivityManager().unregisterNetworkCallback(networkCallback)
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
演示:Hi,gradle文件中的目标api是什么?它是26,编译DKVersion 26 buildToolsVersion“26.0.2”。对于一些Android 6设备,我也有类似的问题。Connectivity-action从api级别28开始就不推荐使用。问题中提到的网络回调是现在使用的正确API。感谢您的帮助。我使用的是android 6.0.1,目标sdk是26。我展示的示例代码来自App Center sdk,它是只读的@sonu769你使用Xamarin吗?不,只有android