Beruflich Dokumente
Kultur Dokumente
http://androidesverdesfritos.wordpress.com/2013...
1 de 15
16/10/14 10:31
http://androidesverdesfritos.wordpress.com/2013...
(http://androidesverdesfritos.files.wordpress.com/2013/05/socket_1.png)
En un primero momento pens que lo ms lgico sera que una aplicacin de escritorio que fuera El
servidor que estuviera todo el rato escuchando y que contestara a las peticiones que el dispositivo
hiciera, ya fueran de escritura o de lectura. Pero es el caso de Android, es el dispositivo el que debe ser el
Server Socket. Cambiando mi mtodo de pensamiento, eso es solo la punta del iceberg. Lo divertido fue
hasta que encontr que hay que abrir un puerto TCP de comunicacin mediante el uso del adb. Adb es
2 de 15
16/10/14 10:31
una aplicacin que proporciona el sdk de Android para comunicacin por medio de comandos desde el
http://androidesverdesfritos.wordpress.com/2013...
ordenador al pc. Se utiliza por ejemplo para abrir un Shell del dispositivo y manejarlo desde nuestro
ordenador.
Esta aplicacin se descarga en el sdk. Normalmente se encuentra en: <ruta_sdk>\platformtools\adb.exe. El comando es:
<ruta_adb>\adb.exe forward tcp:Puerto_elegido tcp: Puerto_elegido
Esto se puede hacer mediante la lnea de comandos o, integrarlo en la aplicacin de escritorio. Para darle
un poco de chicha a la aplicacin lo he hecho as. La imagen de la aplicacin sera la siguiente.
(http://androidesverdesfritos.files.wordpress.com/2013/05/socket_2.png)
El cdigo de la activacin del puerto TCP por medio de JAVA sera:
3 de 15
16/10/14 10:31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
4 de 55
15
http://androidesverdesfritos.wordpress.com/2013...
56
57
58
59
60
61
62
63
http://androidesverdesfritos.wordpress.com/2013...
writer.flush();
// Ya hemos enviado el mensaje, as que lo cerramos
socket.close();
// Creamos la fecha con un formato determinado para incluirlo e
String time = _dateFormat.format(new Date());
// Encadenamos la fecha
log.setText(log.getText() + "Send[" + time + "]" + ":: " + mss
} catch (UnknownHostException e) {
log.setText(log.getText() + "ERROR:: > " + "Socket connection p
+ e.getMessage());
} catch (IOException e) {
log.setText(log.getText() + "ERROR:: > " + "Could not initializ
+ e.getMessage());
}
// Vaciamos de informacin la caja del texto
txtsend.setText("");
}
// Mtodo que se activa cuando se pulsa el botn enviar
private void sendMouseClicked(java.awt.event.MouseEvent evt) {
sendMessage(txtsend.getText());
}
/socket_3.png)
(http://androidesverdesfritos.files.wordpress.com/2013/05
Os dejo al final del blog, el proyecto para que la ejecutis dnde queris y modifiquis a vuestro antojo.
Ahora, pongamos ms situacin. Este es ms o menos el esquema de la aplicacin. Est pensado para
que funcione cuando tengamos el log en pantalla. Se podra mejorar, eso est claro, pero mi idea es la
comunicacin, los Socket, el servicio y la creacin del log en tiempo real.
5 de 15
16/10/14 10:31
/2013/05/socket_4.png)
http://androidesverdesfritos.wordpress.com/2013...
(http://androidesverdesfritos.files.wordpress.com
6 de 15
16/10/14 10:31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
7 de 55
15
http://androidesverdesfritos.wordpress.com/2013...
56
57
58
59
60
61
62
63
64
65
66
67
http://androidesverdesfritos.wordpress.com/2013...
@Override
public void onClick(View v) {
Intent nuevaactividad = new Intent(getApplicationContext(),
MyLog.class);
startActivity(nuevaactividad);
}
});
}
private void PutTextInCheckBox() {
SharedPreferences settings = getSharedPreferences(
"Preferencia Servicio", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (cb.isChecked()) {
cb.setText("Activado");
editor.putBoolean(servicioactivado, true);
gotolog.setVisibility(View.VISIBLE);
} else {
cb.setText("Desactivado");
editor.putBoolean(servicioactivado, false);
gotolog.setVisibility(View.GONE);
}
// No os olvidis de esto.
editor.commit();
}
}
8 de 15
16/10/14 10:31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
9 de 55
15
http://androidesverdesfritos.wordpress.com/2013...
16/10/14 10:31
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
http://androidesverdesfritos.wordpress.com/2013...
}
// Cerramos el cliente
client.close();
}
} catch (SocketTimeoutException e) {
Log.e(TAG, "error: " + e.getMessage());
} catch (IOException e) {
Log.e(TAG, "" + e.getMessage());
} catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage() + " " + e.getStackTrace()
+ " " + e.toString());
}
}
};
10 de 15
16/10/14 10:31
http://androidesverdesfritos.wordpress.com/2013...
}
}
Hay que modificar el manifest.xml:
1
En la actividad del log, deber aparecer cada vez que escribamos algo en el log y demos a enviar la hora
de recepcin y el mensaje. Por cierto, las horas son diferentes por los relojes diferentes del sistema. Uno
lo recoge del ordenador y otro del propio Android. Pero doy fe que se reciben tal cual.
(http://androidesverdesfritos.files.wordpress.com/2013/05/socket_5.png)
Ahora el cdigo de la Actividad:
11 de 15
16/10/14 10:31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
12 de
5515
http://androidesverdesfritos.wordpress.com/2013...
@SuppressLint("SimpleDateFormat")
// Para dar formato a la fecha
private final SimpleDateFormat formatofecha = new SimpleDateFormat("HH:m
// Crear un timer es una forma simple para crear un log en tiempo real
private Timer mitimer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_log);
tv = (TextView) findViewById(R.id.txtlog);
}
protected void onDestroy() {
super.onDestroy();
stopTimer();
}
@Override
public void onPause() {
super.onPause();
stopTimer();
}
@Override
public void onResume() {
super.onResume();
startTimer();
}
private void startTimer() {
stopTimer();
mitimer = new Timer();
mitimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
MyLog.this.runOnUiThread(new Runnable() {
public void run() {
16/10/14 10:31
56
57
58
59
60
61
62
63
64
65
66
67
68
http://androidesverdesfritos.wordpress.com/2013...
});
}
}, new Date(), 333);
}
private void stopTimer() {
if (mitimer != null) {
mitimer.cancel();
mitimer = null;
}
}
}
Por cierto no os olvidis de registrar la actividad del log y dar acceso a internet. El manifest completo
sera:
13 de 15
16/10/14 10:31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
http://androidesverdesfritos.wordpress.com/2013...
16/10/14 10:31
Seguir
http://androidesverdesfritos.wordpress.com/2013...
15 de 15
16/10/14 10:31