2014-04-14 2 views
7

안드로이드 휴대 전화를 잠자기 모드에서 잠자기 모드로 잠 그려면 어떻게 프로그래밍 할 수 있습니까? 나는 wakelock을 얻고 싶지 않습니다. 즉, 전화가 비활성화 된 상태에서 "진짜"잠에 들어간다는 것을 의미합니다. 나는 RTC (real time clock) 메커니즘을 사용할 수 있다고 생각하니?잠자기에서 안드로이드 휴대 전화를 깨우는 방법?

누구에게 사례가 있습니까?

감사합니다.

+0

언제 정확히 깨어나시겠습니까? 특정 시간 초과 후? 특정 날짜와 시간에? –

+0

솔루션을 찾았습니까? 유용한 답변을 찾았습니까? – bendaf

+0

질문에 대한 답을 찾거나 아래에서 질문을 받거나 질문을 수정하면 더 많은 것을 도와 드릴 수 있습니다. – bendaf

답변

0

작업을 수행 할 때 AlarmManager를 사용하여 인 텐트를 브로드 캐스트하고 장치를 웨이크 업하십시오. BroadcastReceiver에서 작업을 수행하거나 (짧으면), WakeLock (아마도 싱글 톤을 통해 )을 얻고 서비스를 시작한 다음 서비스를 수행 한 다음 서비스를 릴리스합니다. 웨이크 록.

당신은 여기에 대해 읽을 수 있습니다 활동을하도록하기 위해 https://groups.google.com/forum/#!topic/android-developers/5--QRAPlFL0

+1

hmmm ... 나는 AlarmManager를 시도하고 전화가 "진짜"수면 (wakelock 없음)에있는 경우 전화를 깨우지 않는 것처럼 보였다. – jiawen

+1

수면 모드에있을 때 휴대 전화를 깨우는 방법. –

+0

@jiawen AlarmManager는 set() 대신 setAndAllowWhileIdle() 또는 setExactAndAllowWhileIdle()을 사용합니다. 이 방법으로 설정된 경보는 장치가 잠 들어있을 때에도 브래드 캐스트됩니다. – Karthiksrndrn

7

장치를 일어나 암호/슬쩍을 필요로하지, 당신은 단지 몇 플래그를 추가해야합니다. 그것을 얻으려면, 코드에 포함

이 것
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | 
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN | 
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

wake up 앱 활동.

1

난 그냥이 작업을 수행 할 수있는 응용 프로그램을 작성, 여기에 몇 가지 예제 코드입니다 : 첫째, 나는 AlarmManager를 생성하고 특정 시간 알람 설정 :이받을 수있는 BroadcastReciever 필요

AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 15); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 0); 
// if the time is before now then add one day to it 
if(calendar.getTimeInMillis() < System.currentTimeMillis()) 
    calendar.setTimeInMillis(calendar.getTimeInMillis()+86400000); 
manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0); 

을 경보. 이를 위해 나는 나의 매니페스트에 추가해야한다

<application ...> 
    <receiver android:name="hu.bendaf.example.AlarmReceiver"/> 
... 
</application> 

와 나는 또한를 받게되며 내 주요 활동을 시작하는 AlarmReciever 클래스가 : 내가 가진

public class AlarmReceiver extends BroadcastReceiver { 
    public static final String WAKE = "Wake up"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //Starting MainActivity 
     Intent myAct = new Intent(context, MainActivity.class); 
     myAct.putExtra(WAKE, true); 
     myAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(myAct); 
    } 
} 

을 내 활동의에서 onCreate 함수를 :

// Wake up phone if needed 
if(getIntent().hasExtra(AlarmReceiver.WAKE) && getIntent().getExtras().getBoolean(AlarmReceiver.WAKE)){ 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
         WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
         WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, 
         WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
         WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
         WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
} 

이 코드는 다음 15:30시에 (오늘이나 내일) 내 전화를 깨 웁니다.

+0

대기 모드에서만 또는 대기 모드에서 알람을 깨 웁니까? – ransh

+0

이 답변은 http://stackoverflow.com/a/5120225/3162918 그것은 또한 절전 모드에서 작동하도록 보장했다. 그것은 나의 테스트가 또한 확인한 것이 었습니다. 알람은 꺼 졌을 때를 제외하고는 모든 상황에서 내 전화를 깨우고있었습니다. – bendaf

관련 문제