如何以可编程方式唤醒Android手机从睡眠状态(暂停到mem)?我不想获得任何唤醒锁,这意味着手机在禁用cpu的情况下进入“真正的”睡眠状态。我想我可以使用某种RTC(实时时钟)机制?
有没有人有任何例子?
感谢。
答案 0 :(得分:7)
为了让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);
这将wake up您的应用活动。
答案 1 :(得分:3)
我刚刚编写了一个可以执行此操作的应用程序,这里是一些示例代码: 首先,我创建一个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唤醒我的手机(无论是今天还是明天)。
答案 2 :(得分:0)
使用AlarmManager在您想要的时候广播一个Intent 工作,让设备醒来。在BroadcastReceiver中,要么这样做 你需要做的工作(如果它很短),或获得一个WakeLock(可能是 通过单身人士),启动服务,让服务完成工作,然后 让服务发布WakeLock。
您可以在此处阅读:https://groups.google.com/forum/#!topic/android-developers/5--QRAPlFL0