Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.70
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
#1

Как при запуске проверить включен ли обычный интернет? - Android

01.11.2012, 17:00. Просмотров 4052. Ответов 27
Метки нет (Все метки)

Доброго времени суток. Как при запуске проверить включен ли обычный интернет? То есть Передача данных. Спасибо, за ответы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 17:00     Как при запуске проверить включен ли обычный интернет?
Посмотрите здесь:

Android Проверить интернет даже когда есть wifi
Как проверить включен bluetooth или нет? Android
Ошибка при запуске Android
RadioButton как обычный Button Android
Android Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Как проверить пустое SharedPreferences или нет при загрузке активити? Android
Как создать layout, который запускается один раз, при первом запуске приложения? Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.11.2012, 11:58     Как при запуске проверить включен ли обычный интернет? #2
1. Создаём класс наследник BroadcastReceiver
Java
1
public class NetworkReceiver extends BroadcastReceiver
2. В манифесте в теге Application указываем
XML
1
2
3
4
5
<receiver android:name=".NetworkReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
 </receiver>
3. Для удобства можно применить паттерн Observer-Observable. Делаем в нашем ресивере внутренний класс
Java
1
2
3
4
5
6
public class InnerObservable extends Observable{
        public void updateData(String data){
            setChanged();
            notifyObservers(data);
        }
}
4. Классы делаем Singleton. Теперь нам ещё нужен контекст.

Java
1
2
3
Context context;
public static NetworkReceiver instance = new NetworkReceiver();
public static InnerObservable observable = instance. new InnerObservable();
5. Добавляем методы "включения-выключения" обсёрвера
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static NetworkReceiver getInstance(){
        return instance;
    }
    
    public void setContext(Context context){
        
         try {
            observable.deleteObserver((Observer) context);
        } catch (Exception e) {
            Log.d("Exceptiion", "in set context");
        }
         this.context = context;
         observable.addObserver((Observer) context);
    }
    
    public void removeInetObserve(Context c){
        observable.deleteObserver((Observer) c);
    }
6. Осталось переопределить метод onReceive:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
    public void onReceive(Context ctx, Intent intent) {
        Log.d("tag", "onReceive");
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (info.isConnected()) {
                Log.d("Net", "Connected");
                observable.updateData(NETWORK_ENABLE);
            } else if (!info.isConnected()) {
                observable.updateData(NETWORK_DISABLE);
                Log.d("Net", "Disconnected");       
            }       
    }
В принципе, наш класс готов. Чтобы начать с ним работу, нужно зарегистрироваться, как слушатель.
Наша активити должна быть
Java
1
implements Observer
Включаем:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Override
    protected void onStart() {
        super.onStart();    
        mNetworkReceiver = NetworkReceiver.getInstance();
        mNetworkReceiver.setContext(this);
        mNetworkStateChangedFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mNetworkReceiver, mNetworkStateChangedFilter);
    }
 
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        try {
            mNetworkReceiver.removeInetObserve(this);
        } catch (Exception e) {
            // TODO: handle exception
        }
        try {
            unregisterReceiver(mNetworkReceiver);
        } catch (Exception e) {
 
        }
    }
и сразу переопределим метод update:
Java
1
2
3
4
5
6
7
8
9
public void update(Observable observable, Object data) {
        if (!observable.getClass().equals(NetworkReceiver.InnerObservable.class))
            return;
        if (data.equals(NETWORK_ENABLE)) {          
            Log.d("network", "Enabled");
        } else if (data.equals(NETWORK_DISABLE)) {
            Log.d("network", "Disabled");
        }
    }
Чуть не забыл, в манифест выставим нужные премишены

XML
1
2
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
02.11.2012, 13:13  [ТС]     Как при запуске проверить включен ли обычный интернет? #3
Ого, сколько всего. Спасибо, буду пробовать. На проверку включен ли GPS понадобилось всего около 15 строк
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 13:19     Как при запуске проверить включен ли обычный интернет? #4
это код отлавливает момент включения и выключения интернета.
а чтобы проверить текущее состояние:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        if (nInfo != null && nInfo.isConnected()) {
            Log.v("status", "ONLINE");
            return true;
        }
        else {
            Log.v("status", "OFFLINE");
            return false;
        }
    }
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
02.11.2012, 13:23  [ТС]     Как при запуске проверить включен ли обычный интернет? #5
Цитата Сообщение от V0v1k Посмотреть сообщение
это код отлавливает момент включения и выключения интернета.
а чтобы проверить текущее состояние:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        if (nInfo != null && nInfo.isConnected()) {
            Log.v("status", "ONLINE");
            return true;
        }
        else {
            Log.v("status", "OFFLINE");
            return false;
        }
    }
Ну а как при запуске проверить включен или нет? Чтоб при запуске выпал AlertDialog с кнопками Да и Нет. То есть перейти к Настройкам или не включать
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 13:33     Как при запуске проверить включен ли обычный интернет? #6
тем методом который вы процитировали.
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
02.11.2012, 22:56  [ТС]     Как при запуске проверить включен ли обычный интернет? #7
Цитата Сообщение от V0v1k Посмотреть сообщение
это код отлавливает момент включения и выключения интернета.
а чтобы проверить текущее состояние:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        if (nInfo != null && nInfo.isConnected()) {
            Log.v("status", "ONLINE");
            return true;
        }
        else {
            Log.v("status", "OFFLINE");
            return false;
        }
    }
Что-то я не понял смысл этого кода. Ничего не происходит
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 23:04     Как при запуске проверить включен ли обычный интернет? #8
Цитата Сообщение от Digetix Посмотреть сообщение
Что-то я не понял смысл этого кода.
он проверяет связь с интернетом.

Цитата Сообщение от Digetix Посмотреть сообщение
Ничего не происходит
а что должно происходить?
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
03.11.2012, 00:58  [ТС]     Как при запуске проверить включен ли обычный интернет? #9
Цитата Сообщение от V0v1k Посмотреть сообщение
а что должно происходить?
Если Передача данных не включена, то предложить пользователю перейти в Настройки и включить Передача данных
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.11.2012, 01:01     Как при запуске проверить включен ли обычный интернет? #10
ну так предложите.
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
03.11.2012, 11:59     Как при запуске проверить включен ли обычный интернет? #11
V0v1k, однако стальные у тебя нервы, я сначала пытался отвечать, но потом понял что будут бесконечно спрашивать "почему мой хэлоуворлд не запускается".

YuraAAA, дорогой мой коллега:
0 регистрация ресивера в манифесте для подобных целей очень вредна! он будет срабатывать даже когда ваша программа не запущена. приложение будет висеть в памяти.
1 для цели, которую преследует автор, более чем достаточно просто динамически регистрировать ресивер в onStart и анрегистерить в onStop.
2 вместо неуместного паттерна Observable я бы вам порекомендовал выучить нормально синглтон. В Android надо учитывать мультипоточность.
3 Обычно программисты пытаются свести к минимуму держание в качестве переменной контекста. Это может приводить к мемориликам.
4 Когда нужен контекст Апликейшна - его обычно и передают. А когда нужен контекст для UI-related операций - передюат this.

просто знать API не достаточно.
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
03.11.2012, 13:55  [ТС]     Как при запуске проверить включен ли обычный интернет? #12
Цитата Сообщение от YAUHEN Посмотреть сообщение
V0v1k, однако стальные у тебя нервы, я сначала пытался отвечать, но потом понял что будут бесконечно спрашивать "почему мой хэлоуворлд не запускается".
Ну так V0v1k реально помогает, а не критикует, что там и как кто спросил. Если вас напрягает "почему мой хэлоуворлд не запускается", то не отвечайте на такие темы.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.11.2012, 16:35     Как при запуске проверить включен ли обычный интернет? #13
Цитата Сообщение от YAUHEN Посмотреть сообщение
однако стальные у тебя нервы
да уже начали сдавать, так как в последнее время много глупых вопросов)
G_O_R
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 22
02.02.2013, 16:20     Как при запуске проверить включен ли обычный интернет? #14
Цитата Сообщение от V0v1k Посмотреть сообщение
это код отлавливает момент включения и выключения интернета.
а чтобы проверить текущее состояние:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        if (nInfo != null && nInfo.isConnected()) {
            Log.v("status", "ONLINE");
            return true;
        }
        else {
            Log.v("status", "OFFLINE");
            return false;
        }
    }
а как сделать чтоб проверял соединение каждые 5 минут????

Добавлено через 3 минуты
Цитата Сообщение от Digetix Посмотреть сообщение
Ого, сколько всего. Спасибо, буду пробовать. На проверку включен ли GPS понадобилось всего около 15 строк
не подскажите где прочитать или найти код для нахождения координат по gps и узнать инфу про телефон(номер телефона, номер биоса, врем я и дату). одним словом системную информацию. Спасибо заранее.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.02.2013, 22:32     Как при запуске проверить включен ли обычный интернет? #15
Цитата Сообщение от G_O_R Посмотреть сообщение
а как сделать чтоб проверял соединение каждые 5 минут????
не нужно проверять каждые 5 мин, достаточно отлавливать изменения конекшена - http://stackoverflow.com/questions/1...ndroid-example


Цитата Сообщение от G_O_R Посмотреть сообщение
нахождения координат по gps
вот целый туториал - http://www.vogella.com/articles/Andr...I/article.html


Цитата Сообщение от G_O_R Посмотреть сообщение
узнать инфу про телефон
http://developer.android.com/referen.../os/Build.html


Цитата Сообщение от G_O_R Посмотреть сообщение
номер телефона
TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
mPhoneNumber = tMgr.getLine1Number();


Цитата Сообщение от G_O_R Посмотреть сообщение
врем я и дату
Calendar.getInstance().getTime()
G_O_R
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 22
03.02.2013, 10:05     Как при запуске проверить включен ли обычный интернет? #16
Цитата Сообщение от V0v1k Посмотреть сообщение
не нужно проверять каждые 5 мин, достаточно отлавливать изменения конекшена - http://stackoverflow.com/questions/1...ndroid-example



вот целый туториал - http://www.vogella.com/articles/Andr...I/article.html



http://developer.android.com/referen.../os/Build.html



TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
mPhoneNumber = tMgr.getLine1Number();



Calendar.getInstance().getTime()
Спасибо большое) может посоветуйте книгу на русском чтоб все было описано на примерах. а то несколько скачал, вроде разные авторы но во всех одно и тоже и один и тот же пример, про кнопки, анимацию и тд.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.02.2013, 22:06     Как при запуске проверить включен ли обычный интернет? #17
сам я по этому учился:
http://developer.android.com/guide/c...nts/index.html
http://developer.android.com/reference/packages.html
G_O_R
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 22
05.02.2013, 18:11     Как при запуске проверить включен ли обычный интернет? #18
Цитата Сообщение от V0v1k Посмотреть сообщение
спасибо еще раз)

у меня проблема в сервисом. он не запускается почему то. в программе один сервис. нет форм. должен работать в фоне, при остановке запускаться, стоять в автозугрузке, находить координаты gps и проверить интернет включен ли. все части кода из книг и статей взято. в диспетчере нет моего сервиса в запуске, но после запуска появяется сервис gps/ значит запускается и остановливается. если кто может помогите чтоб он сработал. вот сам код

package com.sample.family_safety;


import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;


public class FAMILY_SAFETY extends Service {
// FamilySafety fSafety;


@Override
public void onCreate() {
// инициализация службы при создании

startService(new Intent(this, FAMILY_SAFETY.class));

}

@Override
public IBinder onBind(Intent intent) {
// действия при связывании клиента со службой
return null;
}



@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// действия при запуске .службы
if ((flags & START_FLAG_RETRY) == 0) {
// TODO Если это повторный запуск, выполнить какие-то действия.
}
else {
// TODO Альтернативные действия в фоновом режиме.
}
return Service.START_STICKY;
}





/////////////////////////////////////////////////////////////
// получение gps координат

LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
String provider = LocationManager.GPS_PROVIDER;
Location location =
locationManager.getLastKnownLocation(provider);
updateWithNewLocation(location);
}
private void updateWithNewLocation(Location location) {}

String latLongString;
// TextView myLocationText;
myLocationText = findViewById(R.id.myLocationText);
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
} else {
latLongString = "No location found";
}
myLocationText.setText("Your Current Position is:\n" +
latLongString);

}


///////////////////////////////////////////////////////////////////
// обновление данных gps каждый 10 минут или 10 метров

String provider = LocationManager.GPS_PROVIDER;
int t = 3000000; // миллисекунды
int distance = 10; // meters
LocationListener myLocationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Обновите приложение, основываясь на данных местоположения.
}
public void onProviderDisabled(String provider){
// Обновите приложение, если источник отключен.
}
public void onProviderEnabled(String provider){
// Обновите приложение, если источник включен.
}
public void onStatusChanged(String provider, int status,
Bundle extras){
// Обновите приложение, если состояние аппаратного обеспечения
источника изменилось.
}
};
locationManager.requestLocationUpdates(provider, t, distance,
myLocationListener);

///////////////////////////////////////////////////////////////////////////
// проверка состояния интернета(вкл/выкл)

public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nInfo = cm.getActiveNetworkInfo();
if (nInfo != null && nInfo.isConnected()) {
Log.v("status", "ONLINE");
return true;
}
else {
Log.v("status", "OFFLINE");
return false;
}
}

//////////////////////////////////////////////////////////////////////////////////////
// добавление сервиса в автозагрузку

public class MyBroadReceiv extends BroadcastReceiver {

final String LOG_TAG = "myLogs";

public void onReceive(Context context, Intent intent) {
Log.d(LOG_TAG, "onReceive " + intent.getAction());
context.startService(new Intent(context, FAMILY_SAFETY.class));
}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
// повышение приоритета сервиса, чтобы система не убиывала


private static final Class<?>[] mSetForegroundSignature = new Class[] {
boolean.class};
private static final Class<?>[] mStartForegroundSignature = new Class[] {
int.class, Notification.class};
private static final Class<?>[] mStopForegroundSignature = new Class[] {
boolean.class};

private NotificationManager mNM;
private Method mSetForeground;
private Method mStartForeground;
private Method mStopForeground;
private Object[] mSetForegroundArgs = new Object[1];
private Object[] mStartForegroundArgs = new Object[2];
private Object[] mStopForegroundArgs = new Object[1];

void invokeMethod(Method method, Object[] args) {
try {
method.invoke(this, args);
} catch (InvocationTargetException e) {
// Should not happen.
Log.w("ApiDemos", "Unable to invoke method", e);
} catch (IllegalAccessException e) {
// Should not happen.
Log.w("ApiDemos", "Unable to invoke method", e);
}
}

/**
* This is a wrapper around the new startForeground method, using the older
* APIs if it is not available.
*/
void startForegroundCompat(int id, Notification notification) {
// If we have the new startForeground API, then use it.
if (mStartForeground != null) {
mStartForegroundArgs[0] = Integer.valueOf(id);
mStartForegroundArgs[1] = notification;
invokeMethod(mStartForeground, mStartForegroundArgs);
return;
}

// Fall back on the old API.
mSetForegroundArgs[0] = Boolean.TRUE;
invokeMethod(mSetForeground, mSetForegroundArgs);
mNM.notify(id, notification);
}

/**
* This is a wrapper around the new stopForeground method, using the older
* APIs if it is not available.
*/
/*
void stopForegroundCompat(int id) {
// If we have the new stopForeground API, then use it.
if (mStopForeground != null) {
mStopForegroundArgs[0] = Boolean.TRUE;
invokeMethod(mStopForeground, mStopForegroundArgs);
return;
}

// Fall back on the old API. Note to cancel BEFORE changing the
// foreground state, since we could be killed at that point.
mNM.cancel(id);
mSetForegroundArgs[0] = Boolean.FALSE;
invokeMethod(mSetForeground, mSetForegroundArgs);
}

*/
@Override
public void onCreate() {
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
try {
mStartForeground = getClass().getMethod("startForeground",
mStartForegroundSignature);
mStopForeground = getClass().getMethod("stopForeground",
mStopForegroundSignature);
return;
} catch (NoSuchMethodException e) {
// Running on an older platform.
mStartForeground = mStopForeground = null;
}
try {
mSetForeground = getClass().getMethod("setForeground",
mSetForegroundSignature);
} catch (NoSuchMethodException e) {
throw new IllegalStateException(
"OS doesn't have Service.startForeground OR Service.setForeground!");
}
}

@Override
public void onDestroy() {
// Make sure our notification is gone.
stopForegroundCompat(R.string.foreground_service_started);
}


////////////////////////////////////////////////////////////////////////////////////////////////////
}

}
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.02.2013, 18:54     Как при запуске проверить включен ли обычный интернет? #19
ну подебагай...
кстати слышал про новые полиси, что нужно хоть что-то юзеру показать(диалог с сообщением каким-то, что сервис мол запущен) иначе не будет работать сервис, но мне с этим еще не приходилось сталкиваться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2013, 09:08     Как при запуске проверить включен ли обычный интернет?
Еще ссылки по теме:

Запустить мобильный интернет при запуске приложения Android
Android Как хранить введенный однажды в EditText номер, чтобы при след. запуске отображался только он?
Android Как включить GPS при запуске приложения?
Android Как скопировать готовый файл в директорию на android при первом запуске, с дальнейшим использованием?
Android Как в андроид сделать чтобы navigation drawer при запуске был открыт

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
G_O_R
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 22
06.02.2013, 09:08     Как при запуске проверить включен ли обычный интернет? #20
Цитата Сообщение от V0v1k Посмотреть сообщение
ну подебагай...
кстати слышал про новые полиси, что нужно хоть что-то юзеру показать(диалог с сообщением каким-то, что сервис мол запущен) иначе не будет работать сервис, но мне с этим еще не приходилось сталкиваться.
нет не слышал. я думал это просто рекомендации. но в моей проге нельзя чтоб пользователь видел иначе теряет смысл.
Yandex
Объявления
06.02.2013, 09:08     Как при запуске проверить включен ли обычный интернет?
Ответ Создать тему
Опции темы

Текущее время: 08:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru