您的位置:首页 > 其它

在加入谷歌开机向导的情况下,使wifi关闭

2015-07-31 14:08 477 查看
以下是AMX运营商对wifi需求的描述:

Wifi的默认值需要设为关闭

但是项目引入了google的设置向导,其包名为com.google.android.setupwizard,在设置向导中,wifi会被默认打开.

解决思路:

首次接触到该问题,想到的方法是,因为这个设置向导会进入wifisetting模块,此部分我们是有代码的,于是做了一个简单的规避方案:在用户点击跳过wifi连接时,把wifi给关闭。

但是后来运营商对此有补充说明,需要在任何情况下,开机完成后都要使wifi默认为关闭。

于是抓取了一次开机log,可以查看到,当setupwizard完成后,会发出以下的intent:

01-01 00:01:53.050 V/PackageManager( 748): Sending package changed:package=com.google.android.setupwizard components=[com.google.android.setupwizard.SetupWizardActivity,com.google.android.setupwizard.LoginAccountsMissingReceiver,com.google.android.setupwizard.GservicesChangedReceiver,com.google.android.setupwizard.MobileConnectivityChangeReceiver,com.google.android.setupwizard.MobileDataActivity$HfaChangeReceiver]

其action类型为ACTION_PACKAGE_CHANGE

然后就是设计如何接收到该intent后关闭wifi了

从抓取的log中,可以看到有以下几处已经写入了对package change事件的监听:

01-01 00:01:53.052V/ActivityManager(
748): Broadcast:Intent { act=android.intent.action.PACKAGE_CHANGED dat=package:com.google.android.setupwizardflg=0x4000010 (has extras) } ordered=false userid=0 callerApp=null
01-01 00:01:53.294 I/Launcher.Model(1573):
ACTION_PACKAGE_CHANGED : packageName:com.google.android.setupwizard isnot freeze!
由于launcher是第三方提供,因此还是决定加在ActivityManager中,相关接收和处理都在ActivityManagerService中进行,相关代码如下:

private final intbroadcastIntentLocked(ProcessRecord callerApp,

String callerPackage, Intent intent, String resolvedType,

IIntentReceiver resultTo, int resultCode, String resultData,

Bundle map, StringrequiredPermission, int appOp,

boolean ordered, boolean sticky, int callingPid, int callingUid,

int userId) {

……

returnActivityManager.BROADCAST_SUCCESS;

}

}

// begin

if(intent != null && intent.getAction() != null &&intent.getAction().equals(Intent.ACTION_PACKAGE_CHANGED)) {

String data =intent.getDataString();

if(data.endsWith("setupwizard")){

WifiManager mWifiManager =(WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);

int state =mWifiManager.getWifiState();

if(state == WifiManager.WIFI_STATE_ENABLED)

mWifiManager.setWifiEnabled(false);

}

}

}

// end

……

请查看相关代码,并且需要注意,使用wifimanager需要引入android.net.wifi.WifiManager

此设计的思路是,通过设置向导结束时发出的intent,来启动此处的关闭wifi的动作。判断的条件主要为包名的判断以及wifi状态的判断。

经过验证,加入此处修改后,首次开机或者是恢复出厂设置,完成设置向导后wifi都会关闭。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: