Я создаю приложение VoIP. Во время вызова VoIP, когда пользователь переключается между Wi-Fi и мобильными данными, у меня есть проблема с обработкой сценария.
В своей активности на экране вызова я зарегистрировался для получателя, который помогает мне получать уведомления о сценариях изменения сети.
Это код, который я использую для обнаружения изменений в сетях в методе onRecieve. conn_name
- это закрытая переменная уровня класса, содержащая предыдущее имя соединения.
ConnectivityManager connectivity_mgr = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
NetworkInfo net_info = connectivity_mgr.getActiveNetworkInfo();
if (net_info != null && net_info.isConnectedOrConnecting() && !conn_name.equalsIgnoreCase("")) {
new_con = net_info.getExtraInfo();
if (new_con != null && !new_con.equalsIgnoreCase(conn_name))
network_changed = true;
conn_name = (new_con == null) ? "" : new_con;
connectionStatus ="connected";
} else {
if (net_info != null && conn_name.equalsIgnoreCase("")){
conn_name = net_info.getExtraInfo();
connectionStatus ="connected";
network_changed = true;
}else if(!new_con.equals(conn_name)) {
conn_name = "";
connectionStatus ="disconnected";
network_changed = true;
}
}
Таким образом, используя вышеуказанный метод, я смог обнаружить изменения в сети. Но одна странная вещь происходит, когда я подключен к WiFi. Когда мое приложение запускается изначально, оно связано с мобильными данными. Когда пользователь входит в свою известную зону WiFi, он подключается к своей известной сети WiFi. Поскольку WiFi всегда выбирается в качестве маршрута по умолчанию, Android переключается на WiFi, и я получаю сетевое уведомление о том, что WiFi включен.
Поэтому я обновляю IP-адрес своих приложений до IP-адреса WiFi, поэтому никаких проблем здесь нет. Но все же мобильные данные все еще подключены в то же время, но getActiveNetworkInfo() говорит мне, что я четко подключен к WiFi, даже если раньше был подключен к мобильным данным.
Таким образом, проблема в том, что когда пользователь отключает кнопку WiFi, и мобильные данные все еще подключены, но я все равно получаю уведомление об отключении WiFi. Это указывает на то, что сеть отключена, даже если мой телефон все еще подключен к мобильным данным.
Но через секунду я получаю уведомление, что мобильные данные подключены. Но как только я получил отключенную сеть, я прекратил свой вызов VoIP. Поэтому, когда я получаю уведомление о выключенном WiFi, как я могу убедиться, что мобильные данные все еще подключены.
Я попытался getActiveNetworkInfo(), но это происходит, когда я получаю уведомление для WiFi отключен.
Я перешел по этой ссылке:
Вызов Android API для определения настроек пользователя "Данные включены"
Как определить, включена ли функция "Данные мобильной сети" (даже если она подключена через WiFi)?
Используя вышеупомянутую ссылку, я могу обнаружить, что кнопка мобильных данных была включена, когда пользователь подключился к mobiledata.it дает мне истину. Но проблема возникает, когда происходит именно этот случай.
Теперь, когда Wi-Fi отключен, я получаю уведомление, но оно показывает, что мобильные данные отключены, даже если мои мобильные данные включены. Я не могу справиться с этой ситуацией, так как я отключаю свои звонки, когда я получаю свое отключенное уведомление.