Как узнать программно, включена ли MobileData на Android P?
Есть ли способ программно проверить, включен ли MobileData на Android P?
Перед P мы можем использовать getMobileDataEnabled()
с отражением, как этот ответ. https://stackoverflow.com/a/12864897/3752013
Но после P методы отражения вызывают исключение... https://developer.android.com/about/versions/pie/restrictions-non-sdk-interfaces#results-of-keeping-non-sdk
Есть идеи?
person
user3752013
schedule
15.11.2018
source
источник
Ответы (3)
Используйте следующий класс
public class NetworkEventReceiver extends ConnectivityManager.NetworkCallback {
private final NetworkRequest networkRequest;
private final ConnectivityManager connectivityManager;
private final Context context;
public NetworkEventReceiver(Context context) {
this.context = context;
connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
networkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build();
}
public void enable() {
connectivityManager.registerNetworkCallback(networkRequest, this);
}
@Override
public void onAvailable(Network network) {
executeActions(network);
super.onAvailable(network);
}
@Override
public void onLost(Network network) {
executeActions(network);
super.onLost(network);
}
private void executeActions(Network network) {
try {
NetworkCapabilities info = connectivityManager.getNetworkCapabilities(network);
if (info == null || info.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
updateStuff();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Чтобы включить эту службу
NetworkEventReceiver monitor = new NetworkEventReceiver(this);
monitor.enable();
person
Akshay Kumar S
schedule
03.12.2018
Используйте NetworkCapabilities
hasCapability()
Что-то вроде этого:
public boolean hasMobileData() {
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
return nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
}
person
Chris Stillwell
schedule
15.11.2018
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
Приведенный выше код будет работать для вас.
Определите тип вашего интернет-соединения
Для Wi-Fi
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
Для мобильных устройств
Вы можете сослаться на ответ @Chris Stillwell.
person
Jitesh Mohite
schedule
15.11.2018