簡體   English   中英

如何從睡眠中喚醒Android手機?

[英]how to wakeup android phone from sleep?

如何以可編程方式喚醒Android手機從睡眠狀態(暫停到mem)? 我不想獲得任何喚醒鎖,這意味着手機在禁用cpu的情況下進入“真正的”睡眠狀態。 我想我可以使用某種RTC(實時時鍾)機制?

有沒有人有任何例子?

謝謝。

為了讓Activity喚醒設備而不需要密碼/滑動,您只需要添加一些標志。 為此,請包括您的代碼:

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);

這將喚醒您的App活動。

我剛剛編寫了一個可以執行此操作的應用程序,這里是一些示例代碼:首先,我創建一個AlarmManager並在特定時間設置警報:

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);

我需要一個BroadcastReciever來接收這個警報。 為此,我必須填寫我的清單:

<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);
    }
}

在我的Activity的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:00(無論是今天還是明天)喚醒我的手機。

使用AlarmManager在您想要執行某些工作時廣播Intent並讓設備喚醒。 在BroadcastReceiver中,要么做你需要做的工作(如果它很短),要么獲得一個WakeLock(可能是通過單例),啟動服務,讓服務完成工作,然后讓服務釋放WakeLock。

你可以在這里閱讀: https//groups.google.com/forum/#!topic / android-Developers / 5--QRAPlFL0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM