在项目frameworksasewifijavaandroid etwifiWifiStateMachine.java里面,有如下的代码,是设置wifi热点保持状态的:如下:
private class HotspotAutoDisableObserver extends ContentObserver { public HotspotAutoDisableObserver(Handler handler) { super(handler); mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor( Settings.System.WIFI_HOTSPOT_AUTO_DISABLE), false, this); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); mDuration = Settings.System.getInt(mContext.getContentResolver(), Settings.System.WIFI_HOTSPOT_AUTO_DISABLE, Settings.System.WIFI_HOTSPOT_AUTO_DISABLE_FOR_FIVE_MINS); if (mDuration != Settings.System.WIFI_HOTSPOT_AUTO_DISABLE_OFF && mPluggedType == 0) { if (mClientNum == 0 && WifiStateMachine.this.getCurrentState() == mTetheredState) { mAlarmManager.cancel(mIntentStopHotspot); Xlog.d(TAG, "Set alarm for setting changed, mDuration:" + mDuration); mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + mDuration * HOTSPOT_DISABLE_MS, mIntentStopHotspot); } } else { mAlarmManager.cancel(mIntentStopHotspot); } } }
修改默认值为始终:
mDuration = Settings.System.getInt(mContext.getContentResolver(), Settings.System.WIFI_HOTSPOT_AUTO_DISABLE, Settings.System.WIFI_HOTSPOT_AUTO_DISABLE_OFF);
最关键的部分是修改初始化:
private void initializeExtra() { PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); mDhcpWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DHCP_WAKELOCK"); mDhcpWakeLock.setReferenceCounted(false); mHotspotNative = new WifiNative("ap0"); mHotspotMonitor = new WifiMonitor(this, mHotspotNative); HandlerThread wifiThread = new HandlerThread("WifiSMForObserver"); wifiThread.start(); mHotspotAutoDisableObserver = new HotspotAutoDisableObserver(new Handler(wifiThread.getLooper())); Intent stopHotspotIntent = new Intent(ACTION_STOP_HOTSPOT); mIntentStopHotspot = PendingIntent.getBroadcast(mContext, STOP_HOTSPOT_REQUEST, stopHotspotIntent, 0); //mDuration = Settings.System.getInt(mContext.getContentResolver(), Settings.System.WIFI_HOTSPOT_AUTO_DISABLE, // Settings.System.WIFI_HOTSPOT_AUTO_DISABLE_FOR_FIVE_MINS); mDuration = Settings.System.getInt(mContext.getContentResolver(), Settings.System.WIFI_HOTSPOT_AUTO_DISABLE, Settings.System.WIFI_HOTSPOT_AUTO_DISABLE_OFF);//---------修改为默认常开 // M: For stop scan after screen off in disconnected state feature @{ Intent stopScanIntent = new Intent(ACTION_STOP_SCAN, null); mStopScanIntent = PendingIntent.getBroadcast(mContext, STOPSCAN_REQUEST, stopScanIntent, 0); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.mtk.beamplus.activated"); intentFilter.addAction("com.mtk.beamplus.deactivated"); intentFilter.addAction(ACTION_STOP_HOTSPOT); intentFilter.addAction(IWifiFwkExt.AUTOCONNECT_SETTINGS_CHANGE); intentFilter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED); intentFilter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); intentFilter.addAction(Intent.ACTION_DUAL_SIM_MODE_CHANGED); intentFilter.addAction(ACTION_STOP_SCAN); final boolean isHotspotAlwaysOnWhilePlugged = mContext.getResources().getBoolean( com.mediatek.internal.R.bool.is_mobile_hotspot_always_on_while_plugged); Xlog.d(TAG, "isHotspotAlwaysOnWhilePlugged:" + isHotspotAlwaysOnWhilePlugged); if (isHotspotAlwaysOnWhilePlugged) { intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); } BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Xlog.d(TAG, "onReceive, action:" + action); if (action.equals("com.mtk.beamplus.activated")) { mBeamPlusStarted.set(true); sendMessage(M_CMD_UPDATE_BGSCAN); } else if (action.equals("com.mtk.beamplus.deactivated")) { mBeamPlusStarted.set(false); sendMessage(M_CMD_UPDATE_BGSCAN); } else if (action.equals(ACTION_STOP_HOTSPOT)) { mWifiManager.setWifiApEnabled(null, false); int wifiSavedState = 0; try { wifiSavedState = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.WIFI_SAVED_STATE); } catch (Settings.SettingNotFoundException e) { Xlog.e(TAG, "SettingNotFoundException:" + e); } Xlog.d(TAG, "Received stop hotspot intent, wifiSavedState:" + wifiSavedState); if (wifiSavedState == 1) { mWifiManager.setWifiEnabled(true); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.WIFI_SAVED_STATE, 0); } } else if (action.equals(IWifiFwkExt.AUTOCONNECT_SETTINGS_CHANGE)) { sendMessage(M_CMD_UPDATE_SETTINGS); } else if (action.equals(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)) { WifiDisplayStatus status = (WifiDisplayStatus)intent.getParcelableExtra( DisplayManager.EXTRA_WIFI_DISPLAY_STATUS); Xlog.d(TAG, "Received ACTION_WIFI_DISPLAY_STATUS_CHANGED."); setWfdConnected(status); sendMessage(M_CMD_UPDATE_BGSCAN); } else if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { if (isHotspotAlwaysOnWhilePlugged) { int pluggedType = intent.getIntExtra("plugged", 0); Xlog.d(TAG, "ACTION_BATTERY_CHANGED pluggedType:" + pluggedType + ", mPluggedType:" + mPluggedType); if (mPluggedType != pluggedType) { mPluggedType = pluggedType; if (mDuration != Settings.System.WIFI_HOTSPOT_AUTO_DISABLE_OFF && mPluggedType == 0) { if (mClientNum == 0 && WifiStateMachine.this.getCurrentState() == mTetheredState) { mAlarmManager.cancel(mIntentStopHotspot); Xlog.d(TAG, "Set alarm for ACTION_BATTERY_CHANGED changed, mDuration:" + mDuration); mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + mDuration * HOTSPOT_DISABLE_MS, mIntentStopHotspot); } } else { mAlarmManager.cancel(mIntentStopHotspot); } } } } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { String iccState = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE); Xlog.d(TAG, "iccState:" + iccState); if (!iccState.equals(IccCardConstants.INTENT_VALUE_ICC_LOADED)) { return; } sendMessage(M_CMD_UPDATE_COUNTRY_CODE); } else if (action.equals(Intent.ACTION_DUAL_SIM_MODE_CHANGED)) { sendMessage(M_CMD_UPDATE_COUNTRY_CODE); } else if (action.equals(ACTION_STOP_SCAN)) { sendMessage(M_CMD_SLEEP_POLICY_STOP_SCAN); } } }; mContext.registerReceiver(receiver, intentFilter); mPppoeInfo = new PPPOEInfo(); mPppoeLinkProperties = new LinkProperties(); }
另外,System.xxxx的常量定义在源码中的路径:项目frameworksasecorejavaandroidproviderSettings.java