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

CCTV API를 실행하고싶습니다. HTTP를 사용하거나 웹뷰를 응용해야할까요?

0 추천

현재는 소니 CCTV를 사용하고

http://ipaddr:port/command/ptzf.cgi?Move=left,1

http://ipaddr:port/command/ptzf.cgi?Move=stop,motor

 

 

이런식으로 PC에서 주소창에 적고 실행하면

카메라가 움직이거나 멈추는등 ptzf를 실행할 수 있습니다.

 

어플에서 버튼에 연동해서 ptzf를 할수 있게 하고싶은데

 

public void rightMove(View v) {
        /**
         * HTTP로 요청을 보낸다. Thread 작업이 필요하다.
         * */
        /*new Thread(new Runnable() {
            @Override
            public void run() {
                *//**
         * 작업 시작
         * */
        String url = "http://ipaddr:port/command/ptzf.cgi?Move=right,1";
        HttpURLConnection conn = null;
        try {
            /**
             * 요청을 보낼 URL 정보
             * */
            URL httpURL = new URL(url);
            // 요청을 보내기 위한 준비를 한다.
            conn = (HttpURLConnection) httpURL.openConnection();
            conn.setDoInput(true);
//            conn.setDoOutput(true);

            /**
             * 최대 요청 지연 시간 * 요청이 5초 이상 걸릴경우 요청을 끊는다.
             * */
            conn.setConnectTimeout(5000);

            /**
             * GET 요청을 한다.
             * POST 요청을 원할 경우 "POST"라고 작성한다.
             * */
            conn.setRequestMethod("GET");

            /**
             * 요청을 보내고
             * 동시에 응답을 받는다.
             * */
//                    int responseCode = conn.getResponseCode();
            conn.connect();

            /**
             * 요청과 응답이 제대로 이루어졌는지 검사한다.
             * HttpURLConnection.HTTP_OK : 응답이 200 OK 라는 의미
             * */

                    /*if (responseCode == HttpURLConnection.HTTP_OK) {
                        conn.disconnect();
                    }*/
        } catch (Exception e) {
            Log.w("Camera error", "" + e.getMessage());
            if (conn != null) {
                conn.disconnect();
            }
        }
        /*    }
        }).start();*/
    }

인터넷에서 안드로이드 HTTP 관련 소스를 보고 작성한것이고
실행이 되지않아서 여기저기 주석처리도 해보면서 현재 상태입니다.

conn.connect();

에서 예외가 발생해서
catch에 잡히는거 같은데

e.getMessage()

는 null로 뜹니다.


저 API를 HTTP로 해서 사용하는건 맞는건가요?

현재 webview를 이용해서 INVISIBLE WEBVIEW로 실행하는 방법도 생각중인데

둘다 가능한건지, 위에것에서 소스 오류가 있는건지 알수 있을까요?

달빛별빛 (490 포인트) 님이 2017년 3월 16일 질문

1개의 답변

0 추천
 
채택된 답변
코드는 문제가 없는듯 한데. 해당 URL에 접속이 안되는 듯 합니다.

Log.w("Camera error", "" + e.getMessage()); 대신    e.printStackTrace(); 로

로그찍어보시는게 좋을 듯 합니다.
익명사용자 님이 2017년 3월 16일 답변
달빛별빛님이 2017년 3월 29일 채택됨
e.getMessage()로 정보가 뜰줄 알았는데 안뜨는군요

e.printStackTrace()로
Can't create handler inside thread that has not called Looper.prepare()
라는 로그를 찾았습니다.

쓰레드를 살리고,

http://blog.naver.com/PostView.nhn?blogId=rgjoon&logNo=90094338577
내용을 참고해서
Looper를 추가하니 catch문으로 가지 않고 connect는 정상 실행되는거 같습니다.

다만 CGI가 정상 동작하지는 않으니 다른부분을 또 확인해봐야할거 같습니다.
감사합니다.
...