2015-01-02 2 views
3

NanoHTTPD를 통해 구현 된 Android 기기 용 HTTP 서버를 작성하고 있습니다.들어오는 네트워크 연결에 대해 Android를 깨우 치지 않으시겠습니까?

내 목표는 기기가 화면이 꺼져 있어도 수신 연결을 허용하도록하는 것입니다.

지속적인 알림을 통해 작게 시작하여 내 앱을 메모리에 보관하고 백그라운드에서 실행하는 것으로 생각했습니다. 기기를 잠그면 약 1 분 동안 그대로 두지 않는 한 웹 페이지를 계속 탐색 할 수 있습니다. 일단 내가하면, 그것은 완전히 응답을 멈 춥니 다.

차이를 만들지 않은 CPU 부분 웨이크 록을 포함하여 시도를 확대했습니다. 그런 다음 라디오를 켜기 위해 WifiLock을 추가하고 마지막으로 필사적으로 멀티 캐스트 잠금 (MulticastLock)을 추가했습니다. 그러나 약 1 분 동안 아무런 연결도하지 않으면 장치가 모든 잠금을 사용하더라도 응답을 멈 춥니 다.

장치가 들어오는 연결을 수신 대기하도록하려면 어떻게해야합니까? 그것은 정기적 인 요청과 함께 장치를 때리는 것처럼 깨어 유지 ... 어떻게 든이 프로그래밍 방식으로이 동작을 에뮬레이트 할 수 있습니까? 나는 생각할 수 없다.

감사합니다.

편집 :이 질문의 목적을 위해, 배터리 드레인을 무시할 수 있습니다.

EDIT : NanoHTTPD가 서비스로 실행 중입니다.

+0

들어오는 죄수를 듣는 것은 무엇을 의미합니까? 내선, 들어오는 전화를 듣는 것과 같은가요? 나는 연결을 청취하는 목적을 정말로 이해하지 못합니다. –

+0

@AhmadAlsanie 약 1 분 동안 아무런 활동이 없으면 장치는 wifilocks와 wakelocks가있는 경우에도 들어오는 모든 네트워크 연결에 응답하지 않습니다. LTE가 아닌 Wi-Fi 네트워크입니다. 연결을 청취하는 목적은 서버라는 것을 서버가하는 것입니다. – andy

+0

혹시 이것을 알아 냈습니까? – Michael

답변

0

다음이 필요합니다

  • 전경 서비스
  • 와이파이 잠금
  • CPU 잠금

불완전한 조각 (예 : 잠금을 포기/서비스 누락) :

// Keep the CPU awake. 
    powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE); 
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Httpd"); 
    wakeLock.acquire(); 

    // Keep the wifi awake. 
    WifiManager wm = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
    wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "Httpd"); 
    wifiLock.acquire(); 
관련 문제