Не разрывать соединение андроид

Как исправить проблемы с сопряжением по Bluetooth

Соединение по Bluetooth — хороший способ перекинуть файлы с одного устройства на другое или подключить беспроводные гаджеты друг к другу. Но иногда возникают проблемы с сопряжением. Рассказываем, что делать, если подключение по Bluetooth не работает.

В целом, Bluetooth имеет обратную совместимость: устройства, поддерживающие стандарт Bluetooth 5.0, по-прежнему могут сопрягаться с устройствами, использующими, скажем, древний Bluetooth 2.1, вышедший еще в 2007 году.

Исключение составляют гаджеты, которые используют версию с низким энергопотреблением под названием Bluetooth Low Energy, которая работает по другому протоколу, нежели старые или «классические» устройства Bluetooth. Устройства с BLE не обладают обратной совместимостью и не распознают старые устройства, поддерживающие классический Bluetooth. Обычно BLE-девайсы — это метки, фитнес-браслеты и пр.

Если устройство поддерживает Bluetooth 4.0, 4.2 или 5.0, оно должно распознавать в том числе и Bluetooth LE

Что можно сделать, если соединение по Bluetooth не работает?

1. Убедиться, что Bluetooth активен, а устройства сопряжены и находятся на близком расстоянии друг от друга. Иногда для сопряжения требуется ввести код в смартфоне или ПК.

2. Включить режим видимости. Часто это касается фитнес-браслетов и информационно-развлекательной системы автомобиля — пользователи забывают активировать режим видимости.

3. Выключить и снова включить оба устройства либо соединение Bluetooth — как ни странно, но это до сих пор один из самых работающих методов.

4. Удалить старые подключения. Иногда гаджеты поддерживают только одно подключение — особенно часто это касается беспроводных колонок. Так что вы можете пытаться подключить динамик к планшету, в то время как он успешно сопрягается с устройством, с которым соединился в последний раз, например, со смартфоном. Выключите на время этот девайс или удалите у него подключение.

5. Зарядить оба устройства, которые пытаетесь связать. Некоторые гаджеты поддерживают интеллектуальное управление питанием, которое может отключать Bluetooth, если уровень заряда батареи слишком низкий.

6. Удалить устройство со смартфона и найти заново. В настройках iOS вы можете удалить устройство, нажав на его имя, а затем «Забыть это устройство». На Android коснитесь имени устройства и затем «Разорвите пару». Если речь идет о системе автомобиля, может потребоваться выключить зажигание, открыть и закрыть дверь авто и подождать пару минут, прежде чем пытаться снова выполнить сопряжение.

7. Отойти от источников помех. Очень редко, но могут мешать сигналы от других устройств, например, Wi-Fi-роутера, порта USB 3.0. Помехой может стать даже усиленный чехол для смартфона.

8. Обновить драйверы и прошивку оборудования.

9. Очистить кэш Bluetooth. Иногда приложения могут мешать работе Bluetooth и очистка кэша может решить проблему. В Android-устройствах этот раздел находится в настройках системы: «Система» — «Дополнительно» — «Сбросить параметры» — «Сбросить настройки Wi-Fi, мобильного телефона и Bluetooth». На iOS понадобится разорвать пару со всеми устройствами (перейдите в «Настройки» — Bluetooth, выберите значок информации и «Забыть это устройство» для каждого девайса), затем перезагрузить гаджет.

Источник

ERR PROXY CONNECTION FAILED на телефоне Android. Как исправить?

Пользователи телефонов и планшетов на Android часто сталкиваются с ошибкой «err proxy connection failed», которая появляется в браузере (стандартном, или Google Chrome) при попытке открыть какой-то сайт. Не исключено, что точно такое же сообщение об ошибке можно увидеть и в других браузерах. Так как причина появления этой ошибки не в браузере, а в настройках системы Android. Если быть более точным, то в настройках прокси.

Читайте также:  Клавиатура с русским словарем для андроид

Сама ошибка означает то, что телефоне не может подключиться к прокси-серверу. Думаю, нужно пояснить, что это значит. Когда мы подключаем телефон к интернету через Wi-Fi, или через мобильный интернет (сотовую сеть оператора) то обычно подключение к сайтам и серверам разных программ идет напрямую. С вашего устройства, через провайдера/оператора напрямую к серверу сайта, или программы. Когда по какой-то причине на вашем Android телефоне настроены прокси, то подключение уже идет через прокси-сервер, который прописан в настройках. И если настройки прописаны неверно, или прокси-сервер не работает, то в браузере на телефоне появляется ошибка «Нет подключения к интернету» (при том, что подключение есть) , с описанием «На прокси-сервере возникла проблема или адрес указан неверно» и кодом ERR_PROXY_CONNECTION_FAILED.

Для проверки, в настройках Wi-Fi сети, к которой подключен мой телефон, я прописал какой-то левый прокси-сервер. После чего интернет на телефоне перестал работать и появилась ошибка подключения к прокси-серверу. Понятно, что вряд ли кто-то будет специально вручную задавать настройки прокси, а затем искать решение этой проблемы. Но и такое бывает, поверьте.

Мне кажется, что отдельные программы так же могут менять настройки прокси в Android, после чего интернет перестает работать. При чем не только по Wi-Fi, ведь задать эти параметры мжно так же для подключения через мобильный интернет.

В любом случае, если на вашем телефоне (Samsung, Xiaomi, Sony, LG – не важно) появилась ошибка «На прокси-сервере возникла проблема или адрес указан неверно» – то нужно проверить настройки прокси и отключить их. Скорее всего проблема именно в этом.

Как исправить ошибку «err proxy connection failed» на Android?

Сначала покажу как избавится от этой ошибки в том случае, когда у вас подключение к интернету через Wi-Fi. Как это чаще всего и бывает. Названия разделов с настройками и пунктов меню могут немного отличаться. В зависимости от телефона и версии Андроид.

Нужно зайти в настройки, в раздел Wi-Fi. Дальше нажать (или нажать и подержать) на Wi-Fi сеть к которой вы подключены. Появится меню, в котором нужно открыть свойства этой сети (Управление параметрами сети) .

В свойствах нужно открыть дополнительные параметры (если необходимо) и проверить, чтобы в настройках «Прокси» было выставлено «Нет», или «Отключены».

После этого сохраняем настройки и проверяем открываются ли сайты в стандартном браузере, Chrome, или какой вы там используете. Ошибка ERR_PROXY_CONNECTION_FAILED должна исчезнуть.

Если ошибка с прокси появляется при подключении через мобильный интернет

В том случае, когда ваш телефоне не подключен к Wi-Fi и вы пользуетесь мобильным интернетом (от вашего оператора) то настройки прокси нужно проверить в настройках мобильной точки доступа. На телефоне Samsung это можно сделать в разделе «Подключения» – «Мобильные сети» – «Точки доступа» – выбрав точку доступа своего оператора. Там будет пункт «Прокси», в котором нужно выбрать «Не установлено».

Но чаще всего, конечно, параметры прокси заданы именно в свойствах Wi-Fi сети.

Что еще можно сделать?

Если решение, о котором я писал выше не помогло исправить ошибку «err proxy connection failed» на вашем телефоне, то еще раз внимательно все проверьте и обратите внимание на следующие пункты:

  • Отключите, а еще лучше удалите программы, которые позволяют настроить и использовать VPN-соединение в Android.
  • Посмотрите список установленных программ в своем телефоне. Нет ли там подозрительных программ, которые могут вносить изменения в свойства подключения, менять сетевые настройки (в том числе прокси) и т. д. Например, программы для блокировки рекламы, защиты подключения, блокировки сайтов и т. д.
  • Установите на телефон бесплатный антивирус Dr.Web для Android и запустите проверку системы.
  • Сделайте сброс сетевых настроек. Эта функция находится в параметрах, в том же разделе, где и полный сброс настроек телефона. Подробнее можете посмотреть в статье: телефон не подключается к Wi-Fi. Не работает интернет.
  • Подключите телефон к другой Wi-Fi сети, откройте браузер и посмотрите, появляется ли ошибка ERR_PROXY_CONNECTION_FAILED.
Читайте также:  Частая перезагрузка смартфона андроид

Если статья вам помогла – напишите об этом в комментариях. Если не помогла – так же напишите. Можете подробно описать свой случай, а я постараюсь вам помочь.

Источник

Стабильный socket клиент для android

Недавно столкнулся с проблемой создания приложения (наподобие ICQ) с клиентом под андроид, в связи с чем, появилась необходимость реализовать сокет-соединение, которое выполняло бы следующие функции:

  1. Инициировало соединение с сервером
  2. Посылало серверу сообщение типа «Привет, я тут!», чтобы сервер знал, что за устройство к нему подключилось
  3. Сидело и спокойно ждало входящие сообщения от сервера

Сама по себе задача довольно простая и ее решение описывается много где, НО есть следующие заморочки, с которыми я столкнулся:

  • данное подключение должно работать в фоновом режиме и не грузить основной процесс приложения, т.е. отрабатывать в отдельном потоке;
  • В случае потери соединения — оно должно автоматом восстанавливаться;

Совместно эти 2 «НО» явились для меня серьезной головной болью на 2 дня. Гугл по данной проблеме выдал несколько более-менее адекватных ссылок, но конечного работоспособного решения я так и не нашел (возможно, плохо искал, конечно, но не суть).

Собственно, предлагаю вам на растерзание рассмотрение свое решение.

1. Фоновый режим

Для того, чтобы наш сокет-клиент отрабатывал в фоновом режиме и принимал сообщения от сервера даже тогда, когда приложение не активно, запустим его внутри сервиса.

Сделать это можно, например, так:

public class NotificationService extends Service <

public class LocalBinder extends Binder <
NotificationService getService() <
return NotificationService.this;
>
>

@Override
public void onCreate() <
super.onCreate();

@Override
public IBinder onBind(Intent intent) <
return mBinder;
>

@Override
public void onDestroy()

// Здесь выполняем инициализацию нужных нам значений
// и открываем наше сокет-соединение
private void startService() <

> catch (InterruptedException e) <
e.printStackTrace();
>
>

// данный метод открыает соединение
public void openConnection() throws InterruptedException
<
try <

// WatchData — это класс, с помощью которого мы передадим параметры в
// создаваемый поток
WatchData data = new WatchData();
data.email = acc_email;
data.ctx = this;

// создаем новый поток для сокет-соединения
new WatchSocket().execute(data);

> catch (Exception e) <
// TODO Auto-generated catch block
e.printStackTrace();
>
>
>

Этот сервис делает 2 вещи:

  1. Получает каким-либо образом e-mail пользователя, который нужно будет передать на сервер (в примере я его просто присвоил);
  2. Передает этот e-mail в поток, который создаст сокет-соединение.

В данном коде интерес представляет метод public void openConnection(), а если быть точнее, классы WatchData и WatchSocket, которые используются для создания нового потока, рассмотим их подробнее.

Читайте также:  Какие папки можно удалить с андроида самсунг
2. Создание потока

Зачем мы вообще создаем поток? Затем, что сервисы в андроиде не создают собственного, а выполняются в потоке приложения, что может (и будет!) тормозить наше приложение. Подробнее про сервисы — тут.
Итак, поток создавать нужно. Я для этой задачи решил использовать хрень под названием AsyncTask.
Для создания нужного мне AsyncTask’а я сделал два класса, о которых писал выше: WatchData и WatchSocket

WatchData:
class WatchData
<
String email;
Context ctx;
>
Поле email — нужно для того, чтобы передать в поток email, который мы хотим отправить на сервер (естественно, тут могут быть любые другие данные). Поле ctx передает контекст приложения. Мне этот контекст, например, нужен, чтобы сохранять получаемые от сервера сообщения в sqlite’овскую базу данных андроида.

WatchSocket:
class WatchSocket extends AsyncTask
<
Context mCtx;
Socket mySock;

protected void onProgressUpdate(Integer. progress)

protected void onPostExecute(Integer result)
<
// Это выполнится после завершения работы потока
>

protected void onCancelled(Object result)
<
// Это выполнится после завершения работы потока
>

protected Integer doInBackground(WatchData. param)
<
InetAddress serverAddr;

mCtx = param[0].ctx;
String email = param[0].email;

try <
while(true)
<
serverAddr = InetAddress.getByName(«192.168.0.10»);
mySock = new Socket(serverAddr, 4505);

// открываем сокет-соединение
SocketData data = new SocketData();
data.ctx = mCtx;
data.sock = mySock;

// ВНИМАНИЕ! Финт ушами — еще один поток =)
// Именно он будет принимать входящие сообщения
GetPacket pack = new GetPacket();
AsyncTask running = pack.execute(data);

String message = email;
// Посылаем email на сервер
try <
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(mySock.getOutputStream())),true);

// Следим за потоком, принимающим сообщения
while(running.getStatus().equals(AsyncTask.Status.RUNNING))
<

// Если поток закончил принимать сообщения — это означает,
// что соединение разорвано (других причин нет).
// Это означает, что нужно закрыть сокет
// и открыть его опять в бесконечном цикле (см. while(true) выше)
try
<
mySock.close();
>
catch(Exception e)
<>
>
> catch (Exception e) <
return -1;
>
>
>

Тут нас интересует метод protected Integer doInBackground(WatchData… param), который выполняет все, что нам нужно.
В вечном цикле производятся следующие действия:

  1. Открывается сокет-соединение
  2. Запускается новый поток, слушающий сервер
  3. Посылается сообщение на сервер
  4. Отслеживается слушающий поток на предмет закрытия соединения
  5. В случае обрыва соединения цикл срабатывает заново

Здесь может возникнуть вопрос: «Зачем делать еще один поток? Почему не слушать сервер в этом же потоке?»

Отвечаю:
Во время моих экспериментов с AsyncTask’ами выяснилось, что при закрытии соединения методом «сервер взял и вырубился», слушающий его AsyncTask тупо берет и заканчивает работу. Пересоединить сокет с сервером прямо в том же таске у меня, как я ни бился — не вышло. Не берусь заявлять, что этого сделать невозможно — просто предлагаю свое рабочее решение.
Итак, чтобы слушать сервер, создается дополнительный поток GetPacket. Ему, в качестве параметров, в классе SocketData передаются открытый нами сокет и контекст приложения.

3. Слушаем сервер

Собственно, код второго потока:

class SocketData
<
Socket sock;
Context ctx;
>

class GetPacket extends AsyncTask
<
Context mCtx;
char[] mData;
Socket mySock;

protected void onProgressUpdate(Integer. progress)
<
try
<
// Получаем принятое от сервера сообщение
String prop = String.valueOf(mData);
// Делаем с сообщением, что хотим. Я, например, пишу в базу

>
catch(Exception e)
<
Toast.makeText(mCtx, «Socket error: » + e.getMessage(), Toast.LENGTH_LONG).show();
>
>

protected void onPostExecute(Integer result)
<
// Это выполнится после завершения работы потока
>

protected void onCancelled(Object result)
<
// Это выполнится после завершения работы потока
>

protected Integer doInBackground(SocketData. param)
<
mySock = param[0].sock;
mCtx = param[0].ctx;
mData = new char[4096];

Источник

Оцените статью