Я хочу знать, как создать метод, который при обнаружении не имеет никакого подключения к Интернету в мобильном устройстве, а затем метод пытается подключиться к серверу каждые 5 секунд , пожалуйста, если вы можете поставить пример того, как реализовать с модифицированным, я буду ценить !, спасибо!Android Studio: создайте метод, который пытается подключиться к интернету
ответ
Возможно, этот код поможет вам.
ConnectivityManager conMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() != null
&& conMgr.getActiveNetworkInfo().isAvailable()
&& conMgr.getActiveNetworkInfo().isConnected()) {
Toast.makeText(context, "Internet Available", Toast.LENGTH_SHORT).show();
return true;
} else {
if (isShowAlert) {
Toast.makeText(context,
"NOT Internet Connection",
Toast.LENGTH_SHORT).show();
}
return false;
}
Это только проверьте, подключено ли устройство к соединение, но не проверяйте, включен ли интернет. –
вам нужно вызвать этот метод, когда вы вызываете веб-службу или что-то в этом роде. –
public static boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) yourContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Проверить
if(isNetworkAvailable()){
// connected to internet
}else{
// not connected
}
Это только проверьте, подключено ли устройство к соединению, но не проверяйте, включен ли интернет. –
это может быть полезно,
int intervalTime = 5000; // 5 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
internetConnection();
}
}, intervalTime);
public class InternetConnection {
/** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */
public static boolean checkConnection(Context context) {
final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();
if (activeNetworkInfo != null) { // connected to the internet
Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show();
if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
// connected to wifi
return true;
} else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
// connected to the mobile provider's data plan
return true;
}
}
return false;
}
}
Это только проверьте, подключено ли устройство к соединению, но не проверяйте, включен ли интернет. –
Там нет необходимости проверять каждый раз. Определите связь. Измените широковещательный прослушиватель в своем манифесте и выполните проект и проверьте соединение только после изменения подключения. Код, предоставленный вам @Priyank Virani.
Есть некоторые особые случаи, с которыми вам следует обращаться. несколько раз Wi-Fi включен, и вы подключены к локальному Wi-Fi. Вам нужно ввести пароль для использования Интернета (например, библиотеки, аэропорты и т. Д.), В этом случае приведенный выше код возвращает true, поскольку интернет подключен, но на самом деле его ложь !!!! Вы должны проверить это либо с помощью вызванного вами веб-сервиса, либо путем вызова api из известной службы в сети.
Вызов относящемся к сети вещи каждые 5 секунд, предотвратить устройство от сна и имеют очень плохое влияние на батарею устройства
Ранее я использую один из этих методов из How to check internet access on Android? InetAddress never times out:
public static int isInternetActiveWithPing() {
try {
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = process.waitFor();
return exitValue;
} catch (Exception ex) {
return -1;
}
}
public static boolean isInternetActiveWithInetAddress() {
try {
InetAddress inetAddress = InetAddress.getByName("www.google.com");
return inetAddress != null && !inetAddress.toString().equals("");
} catch (Exception ex) {
return false;
}
}
Но это главный недостаток, который нам нужно всегда проверять, отключен ли интернет или нет.
Лучший способ - использовать NetworkEvents. Эта библиотека прослушивает состояние сетевого подключения и меняет силу сигнала Wi-Fi с помощью Event Bus, который также проверяет, есть ли подключенный Интернет или нет.
Используя NetworkEvents, вам не нужно повторно проверять подключение к Интернету каждые 5 секунд.
Спасибо! хорошо я пытался с networkEvent отключить интернет от моего Wi-Fi, но не обнаружил, что нет интернета, только когда я отключу Wi-Fi, так это то, что вызывается метод OnEvent, вы знаете, как его решить? – Raxor
Включили ли вы проверку через Интернет с помощью чего-то типа: 'networkEvents = new NetworkEvents (context, busWrapper) .enableInternetCheck();'? –
Да, я сделал это networkEvents = new NetworkEvents (getApplicationContext(), busWrapper) .enableInternetCheck(). SetPingParameters («www.google.com», 80,3000); но с этим расскажите мне, когда я подключаюсь к Wi-Fi, если есть интернет или нет, но это изменение состояния в Интернете, functino does not tell me – Raxor
Создайте ручку, которая работает в ERVER 5 сек
Handler myHandler = new Handler();
myRunnable = new Runnable() {
@Override
public void run() {
if(isNetWorkAvailable(getActivity()))
{
webService();
}
else
{
//NO NETWORK
}
}
};
myHandler.postDelayed(myRunnable, 5000);// runs in ever 5 sec
private void webservice() {
// create 2 getters and setters java classes ie..LoginRequest & LoginResponse
LoginRequest loginRequest = new LoginRequest(userEmail, userPassword);
final ProgressDialog progressDialog = new ProgressDialog(mContext);
progressDialog.setTitle("Please Wait");
progressDialog.show();
Call<LoginResponse> call = GApiClient.get().postWithFormParams(loginRequest);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Response<LoginResponse> response) {
progressDialog.dismiss();
Log.i("Response ", "Present");
}
@Override
public void onFailure(Throwable t) {
progressDialog.dismiss();
RetrofitError retrofitError;
if (e instanceof RetrofitError) {
retrofitError = ((RetrofitError) e);
if (retrofitError.getKind() == RetrofitError.Kind.NETWORK) {
return "Network is down!";
}
}
Log.i("Response ", " error");
}
});
}
public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
return TYPE_WIFI;
}
return TYPE_NOT_CONNECTED;
}
public static boolean isNetWorkAvailable(Context context) {
int status = getConnectivityStatus(context);
if (status != 0) {
return true;
} else {
return false;
}
}
класс Apiclient для дооснащения 2,2
public class GApiClient {
private static GServiceApi REST_CLIENT;
public static final String API_URL = "YOUR BASE URL";
static {
setupRestClient();
}
private ApiClient() {
}
public static ServiceApi get() {
return REST_CLIENT;
}
private static void setupRestClient() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_URL_TEST)
.addConverterFactory(GsonConverterFactory.create())
.build();
REST_CLIENT = retrofit.create(GServiceApi.class);
}
}
Создание интерфейса ServiceApi
public interface ServiceApi {
@POST("/verify/json") //rest of url
Call<Employee> postWithFormParams(@Body UserDetails data);
}
Гудин модифицировать часть. Код только проверяет, подключено ли устройство к соединению, но не проверяйте, включен ли интернет. –
не получает сценарий ур ... выше кода проверяет наличие интернет-соединения –
Вы можете попробовать подключить свое устройство к точке доступа WiFi, которая не подключена к Интернету. Или попробуйте использовать локальную сеть. –
Возможный дубликат [Как проверить интернете доступ на Android? InetAddress никогда не отключается] (http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-times-out) –