마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

타이머 태스크의 실행주기를 변경하고 싶습니다.

0 추천
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_blue__rssi);

        ToggleButton T_btn;
        T_btn = (ToggleButton) findViewById(R.id.Rssi_Button);
        T_btn.setOnCheckedChangeListener(RSSI_Listener);
        T_btn.setChecked(true);

        mTask = new TimerTask() {   //총 5초에 거치는 타이머마스크를 시행
            @Override
            public void run() {
                if(!connection_state) {     //첫번째 시작은 블루투스 장치 디바이스를 찾는 명령이다.
                    registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));
                    BTAdapter = BluetoothAdapter.getDefaultAdapter();
                    BTAdapter.startDiscovery();     //이 명령을 통해 BroadcastReceiver의 onReceive반환값을 받을 수있다.
                    //mTimer.schedule(mTask,0,5500);
                    /*activity_restart++;       //데이터클린을 위해 재시작함수를 썻으나 Fail
                    if(activity_restart == 5) {
                        Intent intent = getIntent();
                        finish();
                        startActivity(intent);
                    }*/
                }
                else {  //데이터 전송 및 블루투스 연결을 해제하는 소스
                    String str = new String();
                    str = "[" + String.valueOf(Math.abs(Bluetooth_Rssi_data)) + "]";
                    //EditText textField = (EditText) findViewById(R.id.editText4);   //두번째줄에는 블루투로 전송하는 데이터값을 표시
                    //textField.setText(str);
                    sendData(str);

                    try {   //블루투스 연결 해제소스(현재 이 명령에서 문제가 있는것으로 보인다)
                        mOutputStream.close();
                        mInputStream.close();
                        mSocket.close();
                    } catch (IOException e) {}
                    mOutputStream  =  null;
                    mInputStream  =  null;
                    mSocket  =  null;
                    unregisterReceiver(receiver);
                    connection_state = false;
                    //mTimer.schedule(mTask,0,1500);
                }
            }
        };

        mTimer = new Timer();
        mTimer.schedule(mTask, 0, 2500);
    }

안녕하세요 현재 저는 안드로이드 블루투스를 이용하여 블루투스 모듈이 장착된 디바이스의 제어 어플리케이션을 제작중에 있습니다.

 

어플리케이션에서 반복적으로 블루투스 모듈 디바이스를 스캔한 뒤 디바이스를 연결 후 해당 블루투스 모듈에 데이터를 전송하고 연결을 끊은 뒤

다시 디바이스 모듈을 스캔하고 있는데요

 

이러한 일련의 과정을 TimerTask를 이용해 구현하고 있습니다.

 

정확하게는 TimerTask에서 이벤트가 발생할때마다 전역변수값을 변경 후 변경된 전역변수에 따라서

if문으로

전역변수가 false일때는 블루투스 모듈을 스캔하고 연결하는 작업만 수행하고

전역변수가 true일때는 블루투스 모듈에 데이터를 전송하고 전송 후 블루투스 모듈과의 소켓을 끊는 작업을 수행하는데요

 

이 작업이 전부 2.5초동안 수행합니다.

 

 

하지만 저는 첫번째 작업은 5초동안 작업하고 두번째 작업을 1초동안 수행하게 변경하고 싶은데요

 

이것에 대한 방법을 알 수가 없어 이렇게 질문을 남깁니다.

 

첨부된 소스를 보시면 아시겠지만

mTimer.schedule(mTask, 0, 2500); 이 구문으로 2.5초마다 Timer Task 이벤트가 2.5초마다 발생하는데

 

이것을 5초, 1초 5초, 1초 이렇게 발생시키고 싶습니다.

타이머태스크 문은 onCreate에서 발생합니다.

안상훈 (180 포인트) 님이 2015년 6월 6일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...