2016-12-19 1 views
0

저는 Android App 용 자동화 테스트를 향상시키는 프로젝트를 진행하고 있습니다. 내가하고 싶은 일은 매우 쉽습니다. 기본 UI가있는이 간단한 SIP 클라이언트가 있고 SIP 호출을 수신하고 만드는 안드로이드 개발자 웹 사이트 (https://developer.android.com/guide/topics/connectivity/sip.html)에서 API 안내서를 읽는 것만으로 개발했습니다.Android 앱의 메소드를 원격으로 호출하는 방법은 무엇입니까?

동일한 로컬 네트워크 또는 동일한 Wi-Fi에 연결된 내 PC에서이 앱을 원격으로 제어해야합니다. 내 전화에서 정상적으로 실행되는 앱에 명령이나 유사 항목 (전화와 상호 작용하지 않음)을 보내야합니다.

  • 내 전화
  • 을에 응용 프로그램을 시작 : 구체적인 예 나는 내가하고 싶은 것은, 이 sipAddress (응용 프로그램에서, sipAddress이 텍스트 상자에서 가져온 것입니다)를 호출하는 방법 initiateCall()을 게시 내 PC에서 sipAddress를 매개 변수로 제공하는 메소드 initiateCall()을 호출합니다 (실행중인 앱에서 UI를 사용하면 안됩니다. 발신 통화 내가 솔루션은 웹 서비스에 대해 뭔가해야한다는 생각

내 휴대 전화에서 실행되는 응용 프로그램에서 시작하면 그는 sipAddress)

  • 검사를 ,하지만 난 더 좋은 아이디어를 가지고하지 않습니다 나는 어떻게 시작 해야할지 모르며이 문제를 어디서부터 시작해야하는지, 그래서 내가 당신에게 도움이 필요합니다.

    public void initiateCall() { 
        try { 
         SipAudioCall.Listener listener = new SipAudioCall.Listener() { 
         // set up the listener for outgoing calls 
          @Override 
          public void onCallEstablished(SipAudioCall call) { 
           call.startAudio(); 
           call.setSpeakerMode(true); 
           updateStatus(call, 2); 
          } 
    
          @Override 
          public void onCallEnded(SipAudioCall call) { 
           updateStatus("Call End"); 
          } 
         }; 
    
         call = manager.makeAudioCall(me.getUriString(), sipAddress, 
           listener, 30); 
    
        } catch (Exception e) { 
         Log.i("WalkieTalkieActivity/InitiateCall", 
           "Error when trying to close manager.", e); 
         if (me != null) { 
          try { 
           manager.close(me.getUriString()); 
          } catch (Exception ee) { 
           Log.i("WalkieTalkieActivity/InitiateCall", 
             "Error when trying to close manager.", ee); 
           ee.printStackTrace(); 
          } 
         } 
         if (call != null) { 
          call.close(); 
         } 
        } 
    } 
    
  • 답변

    0

    당신은 REST API 스타일을 사용할 수 있습니다. 최소한의 웹 서버를 설정해야합니다.

    예를 들어 URL phoneip/ctrl/makecall?number=yournumber에 액세스하는 경우 제대로 설정되면 서버 측 메소드가 호출됩니다. 그런 다음 메서드를 호출하고 인수로 GET 또는 POST 변수를 사용할 수 있습니다.

    Java 웹 서버 라이브러리/프레임 워크를 살펴 봐야합니다. 그 목적을 위해 가벼운 것을 고를 수 있습니다. 예 : this one. 그런 다음 보안 기능 (인증을위한 보호 기능)을 쉽게 추가 할 수 있습니다. sparkjava와

    import static spark.Spark.*; 
    
    .... 
    
    get("/ctrl/makecall", (request, response) -> { 
         String phonenum = request.queryParams("number"); //may not be accurate; you have to determine the GET variable called "number" in that case; you can rename it; see docs!!! 
         //call your method with proper arguments 
    }); 
    
    +0

    안녕, 빠른 답변 감사합니다! 나는 당신이 의미하는 바를 안다고 생각하지만,이 웹 서버를 설정하는 "어디에서"를 이해하지 못한다. 그것은 앱의 코드 또는 외부의 코드 안에있다. 난 그냥 전체 논리 뷰를 상상할 수 없다 : 내 PC에서 나는 웹 서버를 호출하고 이것은 하나의 애플 리케이션을 호출? –

    +0

    반갑습니다. 예, 그런 경우 웹 서버가 앱의 일부입니다. 일반적으로 몇 가지 방법으로 시작됩니다 (시작을 위해 하나지만 구성을 위해 일부만 사용). 도서관이 당신을 위해 대부분의 일을합니다. 그런 다음 앱은 지정한 포트에서 수신 대기하고 지정하면 답변을 제공합니다. 전체보기 : PC에서 브라우저 또는 wget으로 url (웹 페이지에 액세스)을 호출하고 그런 식으로 말하십시오. 그리고 나서 앱 내에서 페이지의 메소드 (일반적으로 페이지가 html 출력을 수정하는 데 주로 사용됨)가 호출되어 앱에서 원하는 메소드를 호출합니다. – rudib

    +0

    알았어, 고마워. 내가 할 수있는 한 더 많은 정보를 가지고이 방법을 따르려고 노력할 것이다! –

    관련 문제