#java #android #android-studio
Вопрос:
Одна из вещей, которую меняет Android 10, заключается в том, что мы не можем автоматически получить состояние READ_PHONE_STATE и должны указать пользователю вручную предоставить разрешение, перейдя в раздел информация о приложении gt; разрешения gt;gt; телефон gt;gt;gt; включить.
есть ли какой-либо способ получить состояние сети (если телефон подключен к Wi-Fi / 3g и т. Д.) На Android 10 и выше Без указания пользователю самостоятельно перейти в настройки приложения и вручную изменить разрешение?
Я думал обойти вопрос о разрешении с
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkCapabilities caps = cm.getNetworkCapabilities(cm.getActivityNetwork()); boolean isMobile = caps.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR); boolean isWifi = caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
будет ли это нормально, а затем не потребуется использовать разрешение READ_PHONE_STATE ?
Ответ №1:
Существует класс NetworkInfo
, в котором есть функция getTypeName()
, возвращающая строковое значение, содержащее MOBILE
или WIFI
Я пытаюсь написать функцию, я надеюсь, что это будет полезно для вас :
/** * @param mType : type of network connection "MOBILE" or "WIFI" * @return : true of false */ public boolean isMyType(String mType) { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); // if (activeNetworkInfo != null amp;amp; activeNetworkInfo.isConnected()) { return activeNetworkInfo.getTypeName().equals(mType); } else { // no internet connection return false; } }
чем вы можете это назвать :
boolean isMobile = isMyType("MOBILE"); boolean isWifi = isMyType("WIFI"); // for logcat debug Log.i("typeNetwork", "is mobile :" isMobile); Log.i("typeNetwork", "is wifi :" isWifi);
дайте мне знать, если это сработает для вас..