package com.blakequ.bluetooth_manager_lib.connect; import android.os.SystemClock; import com.blakequ.bluetooth_manager_lib.BleManager; import com.blakequ.bluetooth_manager_lib.BleParamsOptions; import com.blankj.utilcode.util.LogUtils; /** * Copyright (C) BlakeQu All Rights Reserved *

* Licensed under the blakequ.com License, Version 1.0 (the "License"); * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *

* author : quhao
* date : 2016/8/19 18:23
* last modify author :
* version : 1.0
* description: */ public class ReconnectParamsBean { private String address; private int number;//reconnect times number private long nextReconnectTime;//next reconnect time private long startDisconnectTime; //the bluetooth disconnected time private boolean isReconnectNow = false; public ReconnectParamsBean(String address) { this.address = address; this.startDisconnectTime = SystemClock.elapsedRealtime(); this.number = 0; } public String getAddress() { return address; } public void updateAddress(String address){ this.address = address; this.startDisconnectTime = SystemClock.elapsedRealtime(); this.number = 0; } /** * get next reconnect time * @return */ public long getNextReconnectTime() { BleParamsOptions options = BleManager.getBleParamsOptions(); switch (options.getReconnectStrategy()){ case ConnectConfig.RECONNECT_EXPONENT: nextReconnectTime = (long) (startDisconnectTime + options.getReconnectBaseSpaceTime() * Math.pow(2, number)); break; case ConnectConfig.RECONNECT_LINE_EXPONENT: if (number <= options.getReconnectedLineToExponentTimes()){ nextReconnectTime = startDisconnectTime + options.getReconnectBaseSpaceTime()*number; }else { nextReconnectTime = (long) (startDisconnectTime + options.getReconnectBaseSpaceTime() * Math.pow(2, number)); } break; case ConnectConfig.RECONNECT_LINEAR: nextReconnectTime = startDisconnectTime + options.getReconnectBaseSpaceTime()*number; break; case ConnectConfig.RECONNECT_FIXED_TIME: nextReconnectTime = startDisconnectTime + options.getReconnectBaseSpaceTime(); break; } if (isReconnectNow){ nextReconnectTime = SystemClock.elapsedRealtime(); } //max reconnect times, not reconnect if (number >= options.getReconnectMaxTimes()){ LogUtils.d("reconnect number="+number+" more than max times "+options.getReconnectMaxTimes()); //将时间设置非常大 nextReconnectTime = SystemClock.elapsedRealtime() + 10*24*60*60*1000; } return nextReconnectTime; } public boolean isReconnectNow() { return isReconnectNow; } public void setReconnectNow(boolean reconnectNow) { number = 0; startDisconnectTime = SystemClock.elapsedRealtime(); isReconnectNow = reconnectNow; } public int getNumber() { return number; } /** * invoke after bluetooth disconnected */ public void addNumber() { isReconnectNow = false; this.startDisconnectTime = SystemClock.elapsedRealtime(); this.number++; } /** * if you can not want to reconnect by auto, you can set a max value * @param num */ public void setNumber(int num){ this.number = num; } @Override public String toString() { return "ReconnectParamsBean{" + "address='" + address + '\'' + ", number=" + number + ", next reconnect after " + (getNextReconnectTime()-startDisconnectTime)/1000 + "seconds"+ ", startDisconnectTime=" + startDisconnectTime + '}'; } }