Проблема проверки подключения к Интернету Android
-
02-10-2019 - |
Вопрос
Я новичок в разработке Android и работаю над приложением Android, которое требует, чтобы телефон был подключен к Интернету через WiFi, Edge или 3G.
Это код, который я использую для проверки того, доступно ли подключение к Интернету
public static boolean isConnected()
{
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
}
Я также устанавливаю эти разрешения в файл манифеста
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Это отлично работает в эмуляторе, запущенном версии 1.5 Android, когда 3G включен, но он сбивает сбой при отключении подключения 3G. Мое приложение бросает исключение NULL указателя, когда я звоню isconnedorconnecting (). То же самое также происходит на моем HTC Desire работает Android 2.1.
Надеюсь, что кто-нибудь знает решение этого.
Заранее спасибо!
Решение
Если авария напрямую На вашей линии:
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
Тогда это означает getActiveNetworkInfo()
вернулся null
, потому что нет активной сети - в этом случае ваш isConnected()
Метод должен вернуть false
.
Другие советы
Я написал этот метод, чтобы обработать это:
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni!=null && ni.isAvailable() && ni.isConnected()) {
return true;
} else {
return false;
}
}
Один из способов сделать это, я думаю ...
Чтобы проверить Интернет там или не можно проверить только на устройстве ...... на эмуляторе это может не работать .... У меня есть следующий код и его работают 100% на устройстве Android ..... :)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.txt);
b = checkInternetConnection();
if(b!=true)
{
tv.setText("net is not dr.......");
}
else
{
tv.setText("net is dr.......");
}
}
//Check weather Internet connection is available or not
public boolean checkInternetConnection() {
final ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) {
return true;
} else {
System.out.println("Internet Connection Not Present");
return false;
}
}
}
Вы использовали этот фрагмент.
ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
Используйте это для DETEMINE, если подключить к WiFi / 3G:
is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
network = is3g||isWifi;
И это, чтобы включить WiFi самостоятельно:
WifiManager wifiManager = (WifiManager) MainWindowYuval.this.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);