原文地址:http://blog.csdn.net/pxshl/article/details/76035294
原因:enableNetwork会断开的当前连接的wifi,再连接指定wifi,而此时系统检测到wifi断开,也会自动连接wifi(默认为最后连接成功的那个wifi),因此可能导致调用enableNetwork却无法连接到指定wifi,或者连接成功后又被断开。
解决方法:
修改wifi优先级是无效的,原因略。
有2种解决方法,第一种用反射得到WifiManager的connect方法去连接wifi,这个方法能保证比系统更快连接上wifi且刷新优先级。
缺点是,该connect方法在不同sdk上参数是不一样的,因此代码复杂且容易错。
第二种,相当简单,在调用enableNetwork前把所有wifi都disenableNetwork(该方法能阻碍系统重新连接wifi),如
for (WifiConfiguration
wifiConfiguration
:mWifiConfigList){
if(!(wifiConfiguration.SSID.equals(TaskConfig.getSsid() )
|| wifiConfiguration.SSID.equals("\"" + TaskConfig.getSsid() + "\""))) {
wifiManager.disableNetwork(wifiConfiguration.networkId);
}
mWifiManager.enableNetwork(configuration.networkId, true);
备注:
TaskConfig.getSsid()为要连接的WiFi,不用把它也
disenableNetwork
小弟第一篇文章,如果觉得对您有帮助,请给个评论让我开心开心。。。
原文地址:http://blog.csdn.net/pxshl/article/details/76035294原因:enableNetwork会断开的当前连接的wifi,再连接指定wifi,而此时系统检测到wifi断开,也会自动连接wifi(默认为最后连接成功的那个wifi),因此可能导致调用enableNetwork却无法连接到指定wifi,或者连接成功后又被断开。解决方法: 修改wifi优先...
Android10 系统应用
wifi
连接
和静态ip代理设置
如果是Android10或者更新的Android版本
wifi
开发,本文对你或许有一定的帮助。
文章目录Android10 系统应用
wifi
连接
和静态ip代理设置Android
wifi
连接
和静态ip代理设置 主要针对系统应用
wifi
连接
的主要代码:
Wifi
Configuration对象构建其他共勉:努力学习自己应该掌握的知识。
Android
wifi
连接
和静态ip代理设置 主要针对系统应用
wifi
连接
的主要代码:
Android 9 以及之前的
android系统启动:http://blog.csdn.net/yicao821/article/details/6893752
最近在分析Android WIIF框架,顺便就把Android系统启动过程做了个流程分析,在这分享下我的学习经验。部分有修正网络文章。欢迎拍砖!
Android系统从Linux内核启动后分为4个基本步骤:
(1) init进程启动
(2) Native服务启动
我的上篇博客研究了Android 10最新API如何
连接
WIFI
问题,但实际发现bug巨多,无奈只能换种思路。
然后发现一个就简单的
方法
,我将编译版本和目标版本都改为如下:
compileSdkVersion 28
targetSdkVersion 28
addNetwork和
enableNetwork
就都可以使用了。然后就可以继续使用原来的
方法
了。
当然这也是一种规避方案,实际在...
{@link android.os.Build.VERSION_CODES#Q} or above, this API will always return false.
解决
方法
: 无解
Applications are not allowed to (enable )disable networks created by other applications.
解决
方法
:
disableNetwork和
enableNetwork
必须由创建该网络的应用调用才会返回true。如果这个网络是.
让我们从最开始的enable
Wifi
开始分析
public boolean
enableNetwork
(int netId, boolean disableOthers) {
final boolean pin = disableOthers && mTargetSdkVersion < Build.VERSION_CODES.LOLLIPOP;
Android
Wifi
设置相关
Wifi
Manager 获得
Wifi
Manager的实例 private
Wifi
Manager m
Wifi
Manager = (
Wifi
Manager)c.getSystemService(Context.
WIFI
_SERVICE);
检测Wiif的状态
Wifi
的状态值常量
WIFI
_STATE_DISABLED = 1; //Wi-Fi is d
private
Wifi
Manager
wifi
Manager;
private
Wifi
ScanReceiver
wifi
ScanReceiver;
private List<ScanResult>
wifi
List;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wifi
Manager = (
Wifi
Manager) getApplicationContext().getSystemService(Context.
WIFI
_SERVICE);
wifi
ScanReceiver = new
Wifi
ScanReceiver();
registerReceiver(
wifi
ScanReceiver, new IntentFilter(
Wifi
Manager.SCAN_RESULTS_AVAILABLE_ACTION));
if(
wifi
Manager.is
Wifi
Enabled()){
wifi
Manager.startScan();
Log.d("
WIFI
", "Started Scanning");
}else{
Toast.makeText(getApplicationContext(), "
WiFi
is disabled.. Please enable it", Toast.LENGTH_LONG).show();
wifi
Manager.set
Wifi
Enabled(true);
public void connectTo
Wifi
(String ssid, String password){
Wifi
Configuration
wifi
Config = new
Wifi
Configuration();
wifi
Config.SSID = String.format("\"%s\"", ssid);
wifi
Config.preSharedKey = String.format("\"%s\"", password);
Wifi
Manager
wifi
Manager = (
Wifi
Manager) getApplicationContext().getSystemService(Context.
WIFI
_SERVICE);
int networkId =
wifi
Manager.addNetwork(
wifi
Config);
wifi
Manager.disconnect();
wifi
Manager.
enableNetwork
(networkId, true);
wifi
Manager.reconnect();
public void disconnectFrom
Wifi
(){
Wifi
Manager
wifi
Manager = (
Wifi
Manager) getApplicationContext().getSystemService(Context.
WIFI
_SERVICE);
wifi
Manager.disconnect();
private class
Wifi
ScanReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
wifi
List =
wifi
Manager.getScanResults();
Log.d("
WIFI
", "Scan Result: " +
wifi
List.toString());
在这个示例代码中,我们首先获取了
WIFI
_SERVICE实例,然后注册了一个
Wifi
ScanReceiver来接收
wifi
扫描的结果。
在onCreate()
方法
中,我们首先检查
wifi
是否已经启用。如果已经启用,则调用
wifi
Manager.startScan()
方法
来启动扫描,并在Logcat中输出“Started Scanning”的消息。
如果
wifi
未启用,则我们会弹出一条Toast消息来提示用户启用
wifi
,然后调用
wifi
Manager.set
Wifi
Enabled(true)
方法
来启用
wifi
。
接下来,我们定义了connectTo
Wifi
()
方法
和disconnectFrom
Wifi
()
方法
来分别
连接
和
断开
wifi
。
在connectTo
Wifi
()
方法
中,我们首先创建了一个
Wifi
Configuration对象,并设置其SSID和preSharedKey属性为
连接
的
wifi
名称和密码。然后,我们调用
wifi
Manager.addNetwork(
wifi
Config)
方法
来添加一个新的
wifi
连接
配置,并获取新添加的
连接
的networkId。接着,我们调用
wifi
Manager.disconnect()
方法
来
断开
当前
连接
的
wifi
,并调用
wifi
Manager.
enableNetwork
(networkId, true)
方法
来激活新添加的
连接
配置。最后,我们调用
wifi
Manager.reconnect()
方法
来
连接
到新添加的
wifi
网络。
在disconnectFrom
Wifi
()
方法
中,我们只需要调用
wifi
Manager.disconnect()
方法
即可
断开
当前
连接
的
wifi
。
最后,我们通过定义一个
Wifi
ScanReceiver类来接收
wifi
扫描的结果,并在Logcat中输出扫描结果。当扫描结果更新时,系统会自动调用
Wifi
ScanReceiver的onReceive()
方法
。