public class blue_RSSI extends ActionBarActivity {
private TimerTask mTask;
private Timer mTimer;
BluetoothAdapter BTAdapter;
boolean connection_state = false;
int Bluetooth_Rssi_data = 0;
String Device_name = "";
int mPairedDeviceCount = 0;
Set<BluetoothDevice> mDevices;
BluetoothDevice mRemoteDevice;
BluetoothSocket mSocket = null;
OutputStream mOutputStream = null;
InputStream mInputStream = null;
String mStrDelimiter = "\n";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blue__rssi);
mTask = new TimerTask() {
@Override
public void run() {
if(!connection_state) {
registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));
BTAdapter = BluetoothAdapter.getDefaultAdapter();
BTAdapter.startDiscovery();
}
else {
String str = new String();
str = "[" + String.valueOf(Math.abs(Bluetooth_Rssi_data)) + "]";
sendData(str);
try {
mOutputStream.close();
mOutputStream = null;
mInputStream.close();
mInputStream = null;
mSocket.close();
mSocket = null;
unregisterReceiver(receiver);
} catch (IOException e) {}
connection_state = false;
}
}
};
mTimer = new Timer();
mTimer.schedule(mTask, 0, 3500);
}
안녕하세요
저는 현재 핸드폰을 이용해서 'a'라는 블루투스에 'a'의 rssi값을 3초마다 계속 자동으로 전송하는 어플을 작성중에 잇습니다.
자료를 찾아보니 rssi값을 전송하려면 'a'와 핸드폰의 연결상태를 끊어야만 rssi 값을 받을 수 있더라고요.
이것저것 찾아서 알고리즘을 작성했는데 알고리즘은 아래와 같습니다.
첫번째 타이머 태스크 시작 -> 장치스캔 -> a라는 특정 장치 발생시 해당 장치의 rssi값을 저장 - >
'a'라는 특정장치에 자동으로 연결(a라는 장치는 페어링 과정을 이전에 처리해두었습니다) ->타이머태스크 종료
두번째 타이머 태스크 시작 -> a장치에 저장된 rssi값을 전송 -> 'a'장치와 핸드폰의 블루투스 커넥션 종료(소켓과 쓰레드를 close하는 방식으로 연결을 종료합니다) -> 타이머 태스크 종료 -> 첫번째 타이머 태스크로
이런식의 알고리즘인데 문제점은 이것입니다.
일정 시간이 지난 뒤 어플리케이션이 강제종료됩니다.
연결을 끊고 재시작 하는과정에서 어딘가 부하가 계속 걸린게 터지는거 같은데 어떻게 잡아야할지 모르겠습니다.
결국 해결해야할 문제는 이전 데이터 찌꺼기를 지워야하는건데 어떻게 지워야할지 난감합니다.
도움을 꼭 좀 부탁드립니다!!