Repository navigation
Expand file tree
/
Copy pathandroid.html
More file actions
164 lines (149 loc) · 7.73 KB
/
Copy pathandroid.html
File metadata and controls
164 lines (149 loc) · 7.73 KB
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
55
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.9.2 from src/site/markdown/android.md at 2025-02-18
| Rendered using Apache Maven Fluido Skin 1.9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="generator" content="Apache Maven Doxia Site Renderer 1.9.2" />
<title>socket.io-client – Android</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.9.min.css" />
<link rel="stylesheet" href="./css/site.css" />
<link rel="stylesheet" href="./css/print.css" media="print" />
<script src="./js/apache-maven-fluido-1.9.min.js"></script>
</head>
<body class="topBarDisabled">
<a href="https://github.com/socketio/socket.io-client-java">
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png"
alt="Fork me on GitHub">
</a>
<div class="container-fluid">
<header>
<div id="banner">
<div class="pull-left"><div id="bannerLeft"><h2>Socket.IO Java client</h2>
</div>
</div>
<div class="pull-right"></div>
<div class="clear"><hr/></div>
</div>
<div id="breadcrumbs">
<ul class="breadcrumb">
<li id="publishDate">Last Published: 2025-02-18<span class="divider">|</span>
</li>
<li id="projectVersion">Version: 2.1.2</li>
</ul>
</div>
</header>
<div class="row-fluid">
<header id="leftColumn" class="span2">
<nav class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">Overview</li>
<li><a href="installation.html" title="Installation"><span class="none"></span>Installation</a></li>
<li><a href="initialization.html" title="Initialization"><span class="none"></span>Initialization</a></li>
<li><a href="emitting_events.html" title="Emitting events"><span class="none"></span>Emitting events</a></li>
<li><a href="listening_to_events.html" title="Listening to events"><span class="none"></span>Listening to events</a></li>
<li><a href="socket_instance.html" title="The Socket instance"><span class="none"></span>The Socket instance</a></li>
<li><a href="migrating_from_1_x.html" title="Migrating from 1.x"><span class="none"></span>Migrating from 1.x</a></li>
<li><a href="logging.html" title="Logging"><span class="none"></span>Logging</a></li>
<li><a href="faq.html" title="FAQ"><span class="none"></span>FAQ</a></li>
<li class="active"><a href="#"><span class="none"></span>Android</a></li>
<li class="nav-header">Miscellaneous</li>
<li><a href="changelog.html" title="Changelog"><span class="none"></span>Changelog</a></li>
<li><a href="apidocs/index.html" title="Javadoc"><span class="none"></span>Javadoc</a></li>
<li class="nav-header">Project Documentation</li>
<li><a href="project-info.html" title="Project Information"><span class="icon-chevron-right"></span>Project Information</a></li>
</ul>
</nav>
<div class="well sidebar-nav">
<hr />
<div id="poweredBy">
<div class="clear"></div>
<div class="clear"></div>
<div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
</div>
</div>
</header>
<main id="bodyColumn" class="span10" >
<h1>Android</h1>
<ul>
<li><a href="#How_to_keep_a_Socket.IO_client_running_in_the_background.3F">How to keep a Socket.IO client running in the background?</a></li>
<li><a href="#How_to_reach_an_HTTP_server.3F">How to reach an HTTP server?</a></li>
<li><a href="#How_to_run_unit_tests_in_Android_Studio.3F">How to run unit tests in Android Studio?</a></li></ul>
<section>
<h2><a name="How_to_keep_a_Socket.IO_client_running_in_the_background.3F"></a>How to keep a Socket.IO client running in the background?</h2>
<p>Long story short, you probably shouldn’t. The Socket.IO client is not meant to be used in a <a class="externalLink" href="https://developer.android.com/guide/components/services?hl=en">background service</a>, as it will keep an open TCP connection to the server and quickly drain the battery of your users.</p>
<p>It is totally usable in the foreground though.</p>
<p>See also: <a class="externalLink" href="https://developer.android.com/training/connectivity">https://developer.android.com/training/connectivity</a></p></section><section>
<h2><a name="How_to_reach_an_HTTP_server.3F"></a>How to reach an HTTP server?</h2>
<p>Starting with Android 9 (API level 28) you need to explicitly allow cleartext traffic to be able to reach an HTTP server (e.g. a local server at <code>http://192.168.0.10</code>):</p>
<ul>
<li>either for all domains:</li>
</ul>
<p><code>app/src/main/AndroidManifest.xml</code></p>
<div class="source">
<div class="source"><pre class="prettyprint"><?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission android:name="android.permission.INTERNET" />
<application android:usesCleartextTraffic="true">
...
</application>
</manifest>
</pre></div></div>
<ul>
<li>or for a restricted list of domains:</li>
</ul>
<p><code>app/src/main/AndroidManifest.xml</code></p>
<div class="source">
<div class="source"><pre class="prettyprint"><?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission android:name="android.permission.INTERNET" />
<application android:networkSecurityConfig="@xml/network_security_config">
...
</application>
</manifest>
</pre></div></div>
<p><code>app/src/main/res/xml/network_security_config.xml</code></p>
<div class="source">
<div class="source"><pre class="prettyprint"><?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">192.168.0.10</domain>
</domain-config>
</network-security-config>
</pre></div></div>
<p>Reference: <a class="externalLink" href="https://developer.android.com/training/articles/security-config">https://developer.android.com/training/articles/security-config</a></p></section><section>
<h2><a name="How_to_run_unit_tests_in_Android_Studio.3F"></a>How to run unit tests in Android Studio?</h2>
<p>Local unit tests are tests that run on your machine’s local Java Virtual Machine.</p>
<p>Reference: <a class="externalLink" href="https://developer.android.com/studio/test/test-in-android-studio">https://developer.android.com/studio/test/test-in-android-studio</a></p>
<p>Since they run on your machine, the JSON library must be manually included for the tests (because it is not provided by the Android runtime):</p>
<p><code>build.gradle</code></p>
<div class="source">
<div class="source"><pre class="prettyprint">dependencies {
implementation ('io.socket:socket.io-client:2.0.1') {
exclude group: 'org.json', module: 'json'
}
testImplementation 'org.json:json:20090211'
...
}
</pre></div></div>
<p>Note: we use this ancient version of <code>org.json</code> because it is compatible with the one bundled in Android.</p></section>
</main>
</div>
</div>
<hr/>
<footer>
<div class="container-fluid">
<div class="row-fluid">
<p>© 2025
</p>
</div>
</div>
</footer>
</body>
</html>