写之前先简单介绍下发现的问题:
A手机创建热点"mini",B手机在连接热点之前,连接的SSID叫做"haha",这时使用enablenetwork(netID, true)方法,连接A创建的热点"mini",一般出现的过程就是先断开"haha",连接"mini"热点,这个过程中,大部分的手机会成功连接上"mini",但是部分手机如OPPO R7 Plus就不能连接上"mini",这种型号的手机连接过程是先断开"haha",连接"mini"热点,但是最后连接的还是"haha",这是为什么呢?
原来,wifiManager.enableNetwork(netID, true);这个方法只是执行 命令让去连接"指定的SSID",就算返回true也不代表最终连接的wifi是指定的wiifi,这是为什么,是因为我们Wifi断开跟某个SSID连接的时候,系统读取了一个优先级连接,判断出一个要连接的SSID,而我们只想连接我们的SSID,这样此时相当于有两个线程同时在进行,一但我们的SSID先连接上,System的连接晚我们一步连接上,就会导致我们刚连接上的SSID,马上就断开了。 参考链接:http://www.bubuko.com/infodetail-1124873.html,受益良多
期间还遇到一个问题就是连接无密热点wifi的情况下wifiManager.addNetwork(wifiConfig)返回的netid为-1,这种情况下直接做以下处理,所有目前能遇到的问题都在demo里面处理了,遇到相同问题的童鞋可以下载看看
// config.wepKeys[0] = "";
config.hiddenSSID = true;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
// config.wepTxKeyIndex = 0;
以下奉上解决办法的demo的下载地址
http://download.csdn.net/detail/zs20082012/9718632
写之前先简单介绍下发现的问题: A手机创建热点"mini",B手机在连接热点之前,连接的SSID叫做"haha",这时使用enablenetwork(netID, true)方法,连接A创建的热点"mini",一般出现的过程就是先断开"haha",连接"mini"热点,这个过程中,大部分的手机会成功连接上"mini",但是部分手机如OPPO R7 Plus就不能连接上"mini",这种型号的手
登录到Blackboard时自动填充
NetID
当黑板不登录Blackboard和Chrome时自动记住您的
NetID
会保存您的
NetID
并同步到您的Google帐户,以便您登录的任何Chrome浏览器都可以访问该ID
支持语言:English
{@link
android
.os.Build.VERSION_CODES#Q} or above, this API will always return false.
解决
方法: 无解
Applications are not allowed to (
enable
)disable
network
s created by other applications.
解决
方法:
disable
Network
和
enable
Network
必须由创建该网络的应用调用才会返回
true
。如果这个网络是.
原因:
enable
Network
会断开的当前
连接
的
wifi
,再
连接
指定
wifi
,而此时系统检测到
wifi
断开,也会自动
连接
wifi
(默认为最后
连接
成功的那个
wifi
),因此可能
导致
调用
enable
Network
却无法
连接
到指定
wifi
,或者
连接
成功后又被断开。
解决
方法:
修改
wifi
优先级是
无效
的,原因略。
有2种
解决
方法,第一种用反射得到
WifiManager
的connect方
我的上篇博客研究了
Android
10最新API如何
连接
WIFI
问题
,但实际发现bug巨多,无奈只能换种思路。
然后发现一个就简单的方法,我将编译版本和目标版本都改为如下:
compileSdkVersion 28
targetSdkVersion 28
add
Network
和
enable
Network
就都可以使用了。然后就可以继续使用原来的方法了。
当然这也是一种规避方案,实际在...
最近在做一个需求,在
连接
成功一个
Wifi
后,此时再去
连接
第二个
Wifi
,这时无论第二个
wifi
是否
连接
成功,都不能再去自动
连接
第一个
Wifi
.也就是说我需要在
连接
第二个的过程中去把第一个
Wifi
的密码忘记。
WifiManager
有一个.forget(
netId
, listener)的方法是用来忘记密码的。这个时候第一个参数为
network
Id,也就是说我需要获取到已
连接
wifi
的
network
Android
检测网络是否可用并打开、扫描、
连接
WIFI
需求:要求先检查网络是否可用,如果可用就跳过网络设置界面,如果不可用就打开
WIFI
并扫描网络后去手动输入密码
连接
1.添加权限<uses-permission
android
:name="
android
.permission.ACCESS_
NETWORK
_STATE"/>
<uses-permission
android
:name="andr
android
系统启动:http://blog.csdn.net/yicao821/article/details/6893752
最近在分析
Android
WIIF框架,顺便就把
Android
系统启动过程做了个流程分析,在这分享下我的学习经验。
部分
有修正网络文章。欢迎拍砖!
Android
系统从Linux内核启动后分为4个基本步骤:
(1) init进程启动
(2) Native服务启动
```java
WifiManager
wifiManager
= (
WifiManager
) getApplicationContext().getSystemService(Context.
WIFI
_SERVICE);
然后可以通过以下方法获取到
WiFi
列表:
```java
List<ScanResult> scanResults =
wifiManager
.getScanResults();
根据扫描结果可以选择要
连接
的
WiFi
热点
,然后使用以下方法
连接
:
```java
Wifi
Configuration
wifi
Config = new
Wifi
Configuration();
wifi
Config.SSID = "\"" + ssid + "\"";
wifi
Config.preSharedKey = "\"" + password + "\"";
int
netId
=
wifiManager
.
add
Network
(
wifi
Config);
wifiManager
.disconnect();
wifiManager
.
enable
Network
(
netId
,
true
);
wifiManager
.reconnect();
其中,`ssid`是
WiFi
名称,`password`是密码。这里创建了一个
WiFi
配置对象,并设置了SSID和密码,然后将其添加到
WiFi
管理器中,并
连接
到该网络。
2. Socket通信
连接
WiFi
热点
之后,可以使用Socket进行通信。首先需要创建一个Socket对象:
```java
Socket socket = new Socket(ip
Add
ress, port);
其中,`ip
Add
ress`是要
连接
的设备的IP地址,`port`是端口号。然后就可以使用输入输出流进行数据读写了:
```java
OutputStream outputStream = socket.getOutputStream();
outputStream.write(data.getBytes());
outputStream.flush();
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String message = bufferedReader.readLine();
这里的`data`是要发送的数据,`message`是收到的数据。注意,在使用完Socket之后要关闭它:
```java
socket.close();
以上就是
Android
利用
WiFi
进行通信的基本方法。
ReactNative打开自己写好的Android原生activity,点HOME键返回手机桌面再次点击相应的图标打开应用除JS所在的activity外,其他的activity都被强制销毁了
ReactNative 深层连结
ReactNative 热更