* 负责发送除了login,心跳之外的所有指令
*/
public class Deliver extends AbstractConnectionService {
- private static final String RECEIVE_WAKE_LOCKTAG = "ReceiveWakelockTag";
private static PowerManager.WakeLock WifiListWakeLock;
- public static boolean haveSendH42 = false;
-
- private static int isAppSetWifi = 0;
-
private static boolean sendloopruning = false;
private static ReentrantLock mLock = new ReentrantLock();
- private static ReentrantLock lock = new ReentrantLock();
- private static Condition mCondition = mLock.newCondition();
public static LinkedBlockingDeque<StringMessage> queue = new LinkedBlockingDeque(200);
- private static FileCache fileCache;
private static Connection connection;
- public static boolean is_active_location = false;
-
- private static PowerManager.WakeLock ReceiveWakeLock;
-
- private Handler delayHandler;
-
- private Runnable delayTh;
-
private Connection mConnection;
- private ConWifiReceiver mMyWifiReceiver;
-
private static Runtime mRuntime;
- private static boolean wakeLockWifiList = false;
-
- private static boolean wakeLockWifiSet = false;
-
private static boolean wifiEnabled;
public static Runnable delaySendMSG;
+
private static final Handler mSendMSGHandler;
static {
mRuntime = paramRuntime;
//把queue 保存在磁盘中的缓存文件
//此文件只缓存 除了 登录指令AP00,心跳AP03以及voice 分包指令以外的需要上传的指令。初步规划为 定位AP01和心率/血压 APHT
- fileCache = new FileCache(paramRuntime.getFileDir());
+// fileCache = new FileCache(paramRuntime.getFileDir());
}
private static boolean checkNetwork() {
AudioService.getInstance().play(voicefile);
}
- public static void releaseOneWakeLock() {
- if (ReceiveWakeLock == null) {
- ICLogger.i("ReceiveWakeLock 没有加锁");
- return;
- }
- if (!wakeLockWifiList && !wakeLockWifiSet && ReceiveWakeLock.isHeld()) {
- ReceiveWakeLock.release();
- ReceiveWakeLock = null;
- }
- }
-
- public void releaseReceiveWakeLock() {
- if (this.ReceiveWakeLock == null) {
- ICLogger.i("ReceiveWakeLock 没有加锁");
- return;
- }
- if (this.ReceiveWakeLock.isHeld()) {
- this.ReceiveWakeLock.release();
- this.wakeLockWifiList = false;
- this.wakeLockWifiSet = false;
- this.ReceiveWakeLock = null;
- }
- }
public static void connectToWifi(String ssid, String pwd, String encryptType) {
int networkid;
final WifiManager wifiManager = mRuntime.getContextProxy().getWifiManager();
+ String isUserOpen = Util.getSystemProperties("persist.sys.ic.wifi_enable", "false");
+ ICLogger.d("is open by user == > " + isUserOpen);
wifiEnabled = wifiManager.isWifiEnabled();
if (!wifiEnabled) {
//没开就打开wifi
- Util.turnOnWifiForConnect(mRuntime.getContextProxy().context, mRuntime);
+ wifiManager.setWifiEnabled(true);
}
+
+ //断开当前连接
if (Util.isConnectWifi(mRuntime.getContextProxy().context)) {
- networkid = wifiManager.getConnectionInfo().getNetworkId();
+// networkid = wifiManager.getConnectionInfo().getNetworkId();
wifiManager.disconnect();
- wifiManager.removeNetwork(networkid);
- wifiManager.saveConfiguration();
+ //wifiManager.removeNetwork(networkid);
+ //wifiManager.saveConfiguration();
}
- Deliver.isAppSetWifi = 1;
+ //用当前SSID数据创建连接配置
WifiConfiguration wifiConfiguration = Util.GetconfigWifiInfo(mRuntime.getContextProxy().context, ssid, pwd, encryptType);
networkid = wifiConfiguration.networkId;
+ //如果有相同配置历史消息,则删除历史连接
wifiManager.removeNetwork(networkid);
wifiManager.saveConfiguration();
+ //添加新的Wifi连接到连接配置,并获取这个配置的networkid
networkid = wifiManager.addNetwork(wifiConfiguration);
- if (Util.connectWifiByReflectMethod(mRuntime.getContextProxy().context, networkid) == null && !wifiManager.enableNetwork(networkid, true)) {
- ICLogger.i("连接失败 3");
- SystemClock.sleep(3000L);
- String isUserOpen = Util.getSystemProperties("persist.sys.ic.wifi_enable", "false");
- ICLogger.d("is open by user == > " + isUserOpen);
- if ("false".equals(isUserOpen)) {
- //用户手动打开的,那么就不关闭wifi了
- wifiManager.setWifiEnabled(false);
- }
- wakeLockWifiSet = false;
- releaseOneWakeLock();
- WifiListWakeLock = Deliver.WakeLockForGetWifiList(mRuntime);
-
- return;
- }
-
- if (!wifiEnabled) {
- //原来wifi没开就关闭wifi
- Util.turnOffWifiForSleep(mRuntime.getContextProxy().context, mRuntime);
- }
-
- }
-
- public void setWakeupAlarm(Runtime paramRuntime) {
- AlarmManager alarmManager = (AlarmManager) (paramRuntime.getContextProxy()).context.getSystemService(Context.ALARM_SERVICE);
- Intent intent = new Intent((paramRuntime.getContextProxy()).context, CoreService.class);
- intent.setAction(ACTION_WAKEUP_ALARM);
- PendingIntent pendingIntent = PendingIntent.getService((paramRuntime.getContextProxy()).context, 0, intent, FLAG_UPDATE_CURRENT);
- alarmManager.cancel(pendingIntent);
- long l = SystemClock.elapsedRealtime();
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("SDK_INT=");
- stringBuilder.append(Build.VERSION.SDK_INT);
- stringBuilder.append(",m=,");
- stringBuilder.append(23);
- stringBuilder.append(",kitkat=");
- stringBuilder.append(19);
- ICLogger.i(stringBuilder.toString());
- if (Build.VERSION.SDK_INT >= 19) {
- alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
- return;
- }
- alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
- }
-
- class ConWifiReceiver extends BroadcastReceiver {
- ConWifiReceiver() {
- }
-
- public void onReceive(final Context var1, Intent var2) {
- String var3 = var2.getAction();
- StringBuilder var4 = new StringBuilder();
- var4.append(" receive action=");
- var4.append(var3);
- var4.append(" isAppSetWifi=");
- var4.append(Deliver.isAppSetWifi);
- ICLogger.i(var4.toString());
- if (var3.equals("android.net.conn.CONNECTIVITY_CHANGE")) {
- if (Deliver.isAppSetWifi == 0) {
- return;
- }
+ //保存新加的网络配置
+ wifiManager.saveConfiguration();
- if (Deliver.isAppSetWifi == 1) {
- Deliver.isAppSetWifi = 0;
- if (Deliver.this.delayHandler != null) {
- Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
- Deliver.this.delayHandler = null;
- }
- }
+ //获取Wakelock保证Wifi能正常连接,保证不重复申请wakelock
+ releaseWakeLockForGetWifiList();
+ WifiListWakeLock = Deliver.WakeLockForGetWifiList(mRuntime);
- WifiManager var5 = (WifiManager) var1.getSystemService(Context.WIFI_SERVICE);
- if (((ConnectivityManager) var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
- ICLogger.i("连接成功");
- Deliver.isAppSetWifi = 0;
- Deliver.haveSendH42 = true;
- Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
- if (Deliver.this.delayHandler != null) {
- Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
- Deliver.this.delayHandler = null;
- }
+ //尝试connect 指定networkid
+ if ( Util.connectWifiByReflectMethod(mRuntime.getContextProxy().context, networkid) == null/*连接wifi出错*/ ) {
+ ICLogger.i("连接失败 则重试");
+ SystemClock.sleep(3000L);
- var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
- Deliver.this.mMyWifiReceiver = null;
- Deliver.this.wakeLockWifiSet = false;
- Deliver.this.releaseOneWakeLock();
- Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
- } else {
- StringBuilder var6 = new StringBuilder();
- var6.append("连接失败 222 delayHandler=");
- var6.append(Deliver.this.delayHandler);
- ICLogger.i(var6.toString());
- Deliver.isAppSetWifi = 2;
- var5.reconnect();
- if (Deliver.this.delayHandler == null) {
- Deliver.this.delayHandler = new Handler();
- Deliver.this.delayTh = new Runnable() {
- public void run() {
- StringBuilder var1x = new StringBuilder();
- var1x.append("连接失败 超时 wifiEnabled=");
- var1x.append(Deliver.this.wifiEnabled);
- ICLogger.i(var1x.toString());
- if (Deliver.isAppSetWifi != 1) {
- Deliver.isAppSetWifi = 0;
- var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
- Deliver.this.mMyWifiReceiver = null;
- WifiManager var3 = (WifiManager) var1.getSystemService(Context.WIFI_SERVICE);
- if (((ConnectivityManager) var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
- ICLogger.i("连接成功 1");
- Deliver.haveSendH42 = true;
- Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
- Deliver.this.wakeLockWifiSet = false;
- Deliver.this.releaseOneWakeLock();
- Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
- } else {
- int var2 = var3.getConnectionInfo().getNetworkId();
- if (var2 != -1) {
- var3.disableNetwork(var2);
-// ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));
- Deliver.this.wakeLockWifiSet = false;
- Deliver.this.releaseOneWakeLock();
- Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
- } else {
- ICLogger.i("连接失败 2-2");
-// ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));
- Deliver.this.wakeLockWifiSet = false;
- Deliver.this.releaseOneWakeLock();
- Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
- }
-
- if (!Deliver.this.wifiEnabled) {
- var3.setWifiEnabled(false);
- }
- }
-
- Deliver.this.delayHandler = null;
- }
- }
- };
- Deliver.this.delayHandler.postDelayed(Deliver.this.delayTh, 30000L);
- }
+ //如果失败 通过enableNetwork 连接指定networkid
+ //首先停止所有网络自动连接。
+ for (WifiConfiguration c: wifiManager.getConfiguredNetworks()){
+ wifiManager.disableNetwork(c.networkId);
+ }
+ //接着自动裂解wifi
+ if( !wifiManager.enableNetwork(networkid, true))
+ {
+ ICLogger.i("连接再次失败 ");
+ /*如果 连接 指定wifi networkid 再次失败*/
+ //所有连接都失败了, wifi还不是用户手动打开的,那么就关闭wifi
+ if ("false".equals(isUserOpen)) {
+ wifiManager.setWifiEnabled(false);
+ ICLogger.i("关闭WiFi");
}
}
-
}
- }
+// if (wifiEnabled && "false".equals(isUserOpen)) {
+// //原来wifi没开,且不打算开启wifi则关闭wifi
+// wifiManager.setWifiEnabled(false);
+// }
+
+ }
}