Я пытаюсь сохранить сеть Wi-Fi (и, возможно, сотовую сеть) через ConnectivityManager для последующего использования в моей программе для одновременной отправки данных через локальную сеть Wi-Fi или сотовую сеть. Я следил за этим постом ( Заставьте Android одновременно использовать WiFi для общения с устройством и мобильными данными для общения с сервером? и Как оставаться на связи через мобильную сеть после подключения WIFI на Android? ), чтобы попытаться запустить его. Однако mWifiNetwork
является нулевым. В режиме отладки переменная mWifiNetwork
отображается как "108"
, а затем, когда метод '' 'onAvailable' '' завершен, переменная возвращается к нулю. Не уверен, почему переменная не хранит сеть правильно.
Я создал класс forceWifiNetwork, который вызывается в onResume
forceWifiNetwork.java
public class forceWifiNetwork {
//setting up a context variable and method to use "getSystemService"
// this way we do not need to extend MainActivity class to this class
// But when we initialize this class in main activity we will have to pass in "this" to the class as a parameter
Context mContext;
private ConnectivityManager.NetworkCallback mWifiNetworkCallback;
public Network mWifiNetwork;
final ConnectivityManager manager;
public forceWifiNetwork(Context mContext){
this.mContext = mContext;
manager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
}
public void cellConnect(){
if (mWifiNetworkCallback == null){
// Init only once
mWifiNetworkCallback = new ConnectivityManager.NetworkCallback(){
@Override
public void onAvailable(final Network network){
try{
//Save this network for later use
mWifiNetwork = network;
}catch(Exception e){
Log.i("onAvailable ERROR","Error in onAvailable method");
}
}
};
}
NetworkRequest.Builder wifiBuilder;
wifiBuilder = new NetworkRequest.Builder();
//set the transport type to do wifi
wifiBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
//wifiBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
manager.requestNetwork(wifiBuilder.build(),mWifiNetworkCallback);
}
}
onResume (в MainActivity.java)
@Override
public void onResume(){
super.onResume();
try {
forceWifiNetwork myWifiNetwork = new forceWifiNetwork(this);
myWifiNetwork.cellConnect();
if (myWifiNetwork.mWifiNetwork == null) {
Log.i("onResume", "mWifiNetwork is null");
} else {
Log.i("onResume", "mWifiNetwork is not null");
}
}catch(Exception e){
Log.i("ERROR IN ONRESUME","error");
e.printStackTrace();
}
}
У меня также есть эти разрешения в AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />