2011-07-05 4 views
7

Android 3.0에서 작업 중이며 기기가 절전 모드/화면 꺼짐 상태 일 때 응용 프로그램에서 알아야합니다.Android에서 수면 모드에 등록하려면 어떻게해야하나요?

이 인 텐트/이벤트에 어떻게 등록하여 일부 작업을 실행할 수 있습니까? 이 사실을 알리는 조치가 BroadcastReceiver에 있습니까?

+1

@Yaniv : 방송 수신기에서 정적 변수를 확인합니다 귀하의 수신기는 방금받은 의도에 대한 이유를 알고 "나는 장치가 잠을 갈 때/내 응용 프로그램이 함께 알고있는 화면을 해제해야합니다. " -- 왜? 안드로이드 어플리케이션의 99.999 %는 이것을 필요로하지 않습니다. 이를 수행하는 유일한 방법은 사용자에게 적대적인 행동 (예 : 항상 실행중인 서비스)을 가정합니다. 그래서, 당신이 달성하고자하는 것을 설명하십시오, 그래서 우리는 더 나은 해결책을 찾을 수 있습니다. – CommonsWare

답변

13

This 페이지에는 찾고있는 내용에 대한 자습서가 있습니다. 해당 페이지에서 복사

코드 (순서는 전용 링크의 유용 뭔가 대답 원치에서이 전원을 켭니다) :

1) 의도를받을 수있는 응용 프로그램에서 클래스를 만듭니다. 예를 들어, 다음 수신기는 독립형으로 파트 2에서 사용할 정적 변수를 설정합니다. 2) 화면 켜기/끄기 이벤트 수신 활동을 수정하십시오.

public class ExampleActivity extends Activity { 
    @Override 
    protected void onCreate() { 
     // initialize receiver 
     IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
     filter.addAction(Intent.ACTION_SCREEN_OFF); 
     BroadcastReceiver mReceiver = new ScreenReceiver(); 
     registerReceiver(mReceiver, filter); 
     // your code 
    } 

    @Override 
    protected void onPause() { 
     // when the screen is about to turn off 
     if (ScreenReceiver.wasScreenOn) { 
      // this is the case when onPause() is called by the system due to a screen state change 
      System.out.println("SCREEN TURNED OFF"); 
     } else { 
      // this is when onPause() is called when the screen state has not changed 
     } 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     // only when screen turns on 
     if (!ScreenReceiver.wasScreenOn) { 
      // this is when onResume() is called due to a screen state change 
      System.out.println("SCREEN TURNED ON"); 
     } else { 
      // this is when onResume() is called when the screen state has not changed 
     } 
     super.onResume(); 
    } 
} 
+4

수동 수면 (사용자가 전원 버튼을 눌러 완료)과 자동 수면을 (X 분 후에) 구분할 수 있습니까? –

관련 문제