как получить тип сетевого подключения без использования разрешения READ_PHONE_STATE в Android 10?

#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);   

дайте мне знать, если это сработает для вас..