gpt4 book ai didi

android - 当设备连接到内部 wifi 网络时,不会触发 ConnectivityManager.NetworkCallback() -> onAvailable(Network network) 方法

转载 作者:太空狗 更新时间:2023-10-29 13:45:54 24 4
gpt4 key购买 nike

我正在尝试通过内部 wifi 网络将远程数据发送到 App Center,但它不是在此网络上发送,而是在任何外部网络上发送。调试时发现当设备连接到内部 wifi 时不会调用方法 onAvailable(),但当连接到任何外部 wifi 时会调用它。

以下代码来自 App Center SDK :
应用程序中心\实用程序\NetworkStateHelper.javaNetworkStateHelper.java。类 NetworkStateHelper -> 方法 reopen() --> public void onAvailable(Network network) 方法

示例代码:

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 方法。

最佳答案

您必须将网络类型限制为Wifi

<强>1。构建NetworkRequest:

val networkRequest = getNetworkRequest()

private fun getNetworkRequest(): NetworkRequest {
return NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) //here!!
.build()
}

<强>2。构建NetworkCallback:

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()
}
}
}

<强>3。注册和注销:

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)
}

<强>4。不要忘记权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

演示:https://youtu.be/RPRcGbuB6eI

关于android - 当设备连接到内部 wifi 网络时,不会触发 ConnectivityManager.NetworkCallback() -> onAvailable(Network network) 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54527301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com