Проблема с подключением к Интернету в Интернете
Я новичок в разработке Android и работаю над Android-приложением, которое требует подключения телефона к Интернету через Wi-Fi, 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. Мое приложение выбрасывает исключение нулевого указателя при вызове isConnectedOrConnecting(). То же самое происходит и на моем HTC Desire под управлением Android 2.1.
Надеюсь, что кто-нибудь знает решение этого.
Спасибо заранее!
Ответы
Ответ 1
Если авария напрямую на вашей линии:
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
то это означает, что getActiveNetworkInfo()
возвращен null
, потому что нет активной сети - в этом случае ваш метод isConnected()
должен возвращать false
.
Ответ 2
Я написал этот метод, чтобы справиться с этим:
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;
}
}
Один из способов сделать это, я думаю...
Ответ 3
Чтобы проверить Интернет, есть или нет, можно проверить только на устройстве...... На эмуляторе это может не сработать... У меня есть следующий код и его работающий 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;
}
}
}
Ответ 4
Вы использовали этот фрагмент.
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;
}
}
Ответ 5
используйте это, чтобы определить, подключен ли к wifi/3g:
is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
network = is3g||isWifi;
и для включения Wi-Fi:
WifiManager wifiManager = (WifiManager) MainWindowYuval.this.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);