开发android程序,通常会有网络连接,当我们使用模拟器(avd)运行需要网络权限的app时候,需要注意以下两点。
1、组网
avd连接到外部网络,通常存在两种情况:avd与服务在同一台机器上;avd与服务在不同的机器上。
1)avd与服务在同一台机器上。这时候avd要连接服务器,该用哪个IP地址呢?可能有人会想到127.0.0.1(localhost)。但是仔细想一想,avd是一个模拟器,相当于一个虚拟机,localhost就连到了自己,这个是行不通的。avd是一个虚拟机,相当于一台独立的机器,因此有自己独立的网络IP地址。所以就常用的就是连接服务器的外网(在这个局域网或internet上的)IP地址。
有人会问,我的服务器是通过DHCP动态获取IP地址的,且我得avd与服务器在同一机器上,每次服务器启动得IP地址都不一致,那我每次都得修改app配置文件中的IP地址?这个确实是一个麻烦事情,不过还好,avd提供了类似127.0.0.1的环回IP地址,其实是一个桥接地址更准确,他让你能够连接到运行avd的服务器,这个IP地址就是10.0.2.2
2)avd与服务器在不同的机器上。这种组网下只能连接服务器的外网IP地址。
2、android app配置
网络通了之后,可能会遇到app连接服务器失败的问题,其错误是 ConnectionRefused,这种错误一般是IP能够连通,但是连接某个特定的端口被拒绝了。仔细查看其异常信息,会发现有这么一个信息:
socket failed :EACCES (Permission denied)
没有权限。
这个是app没有申请网络权限,在app的 AndroidManifest.xml 文件中,需要申请网络访问权限:
...
uses-permission android:name="android.permission.INTERNET"
...
加上权限申请之后,就可以工作了。
本文链接:http://www.yunweipai.com/232.html
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/53121.html