Android, создающий сокет и отправляющий, работает в подклассе в действии как поток, но не работает в классе бездействия Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android, создающий сокет и отправляющий, работает в подклассе в действии как поток, но не работает в классе бездействия

Сообщение Anonymous »

Подключение к сокету и отправка данных с Android на ПК. Этот процесс отлично работает как поток в подклассе дочерней активности, называемый QueryActivity, который расширяет AppCompat для тестирования, отправляя данные при нажатии кнопки, как в приложении чата.
Однако я хочу отправлять данные автоматически: при захвате буфера обмена и для других «телеметрий» в фоновых потоках/задачах.
Если я создаю поток копии того же класса в отдельном файл, библиотека классов, предназначенная для работы в сети, или как внутренний класс в основном действии (на данный момент ListActivity, если «AppCompat» играет роль), соединение сокета не может быть установлено, нет маршрута к хозяин. IP и порты верны. Одна деталь заключается в том, что когда адрес неверен, происходит тайм-аут, когда адрес правильный: нет маршрута к хосту, предлагается брандмауэр?
Разрешения манифеста устанавливаются следующим образом:
Разрешения манифеста устанавливаются следующим образом:
р>



Компилирую для Lollipop 5.0, SDK 21 (говорят от 23 требуется интерактивный запрос разрешения).
Нет маршрутизации происходит либо если поток или асинхронная задача создаются при активации меню или при обработке событий (захват буфера обмена) - во втором случае событие фиксируется, есть обратная связь для содержимого, но сокет не может подключиться.
D/client: java.net.NoRouteToHostException: Host unreachable
W/System.err: java.net.NoRouteToHostException: Host unreachable
W/System.err: at libcore.io.IoBridge.connect(IoBridge.java:132)
at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:137)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:391)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:231)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:213)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
at java.net.Socket.connect(Socket.java:621)
at java.net.Socket.connect(Socket.java:570)
at java.net.Socket.(Socket.java:450)
at java.net.Socket.(Socket.java:218)
at twenkid.android.basic.recreatetwenkid_reader_1.MyListActivity$ClientThread.run(MyListActivity.java:1510)
W/System.err: at java.lang.Thread.run(Thread.java:784)

Пример темы Socket:
public class ClientThread implements Runnable {
private final String message, ip, port;

ClientThread(String ip, String port, String message) {
this.ip = ip;
this.port = port;
this.message = message;
Log.d("IP:", this.ip );
Log.d("PORT:", this.port );
Log.d("this.message ", this.message );
}

@Override
public void run() {
try {
// the IP and port should be correct to have a connection established
// Creates a stream socket and connects it to the specified port number on the named host.
Enumeration e = NetworkInterface.getNetworkInterfaces();
while(e.hasMoreElements())
{
NetworkInterface n = (NetworkInterface) e.nextElement();
Enumeration ee = n.getInetAddresses();
while (ee.hasMoreElements())
{
InetAddress i = (InetAddress) ee.nextElement();
System.out.println(i.getHostAddress().toString());
Log.d("run net", i.getHostAddress());
}
}

Log.d("ADDRESS", ip); //message);
Log.d("ADDRESS", port); //message);
Log.d("MESSAGE", message);
client = new Socket(ip, Integer.parseInt(port));
printwriter = new PrintWriter(client.getOutputStream(), true);
printwriter.write(message); // write the message to output stream
printwriter.flush();
printwriter.close();
// closing the connection
client.close();

} catch (IOException e) {
Log.d("client", e.toString());
e.printStackTrace();
}

// updating the UI
runOnUiThread(new Runnable() {
@Override
public void run() {
//text.setText(""); //add in history etc.
SwitchView("Main");
}
});
}

}


Подробнее здесь: https://stackoverflow.com/questions/784 ... ty-as-a-th
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»