我想在某个时间显示一个活动.为此,我使用的是AlarmManager.当设备处于唤醒状态时,它可以正常工作,但如果它处于睡眠状态则不会将其唤醒.
我设置闹钟的代码:
Calendar alarmTime = Calendar.getInstance();
alarmTime.set(Calendar.HOUR_OF_DAY, alarm.hour);
alarmTime.set(Calendar.MINUTE, alarm.minute);
alarmTime.set(Calendar.SECOND, 0);
if (alarmTime.before(now))
alarmTime.add(Calendar.DAY_OF_MONTH, 1);
Intent intent = new Intent(ctxt, AlarmReceiver.class);
intent.putExtra("alarm", alarm);
PendingIntent sender = PendingIntent.getBroadcast(ctxt, alarm.id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), sender);
Run Code Online (Sandbox Code Playgroud)
我的广播接收器:
@Override
public void onReceive(Context context, Intent intent) {
try {
Bundle bundle = intent.getExtras();
final Alarm alarm = (Alarm) bundle.getSerializable("alarm");
Intent newIntent;
if (alarm.type.equals("regular")) {
newIntent = new Intent(context, RegularAlarmActivity.class);
} else if (alarm.type.equals("password")) {
newIntent = new Intent(context, PasswordAlarmActivity.class);
} else if (alarm.type.equals("movement")) { …Run Code Online (Sandbox Code Playgroud) 我想在几个小时内定期从Android设备的相机拍照,以创建一个时间流逝的视频效果.
我设置了一个Alarm Manager,其AlarmManager.RTC_WAKEUP标志设置为每隔几分钟启动一次服务.
该服务包含部分唤醒锁,有些工作,然后通过启动活动的警报管理器调用广播接收器.
活动被创建(或恢复),打开它自己的唤醒锁,并设置相机预览表面.设置表面后,将调用SurfaceHolder侦听器的surfaceChanged()方法,最终拍摄照片.
如果设备处于唤醒状态,一切都会按预期完美运行.但是如果设备处于睡眠状态,一旦Activity的onResume()方法完成,Activity就会立即暂停.相机的预览表面永远不会完成初始化,也不会拍摄任何照片.
所以我的问题是:
有没有办法以编程方式唤醒手机?我甚至尝试使用:
PowerManager powerManager =
(PowerManager)this.getSystemService(Context.POWER_SERVICE);
powerManager.userActivity(SystemClock.currentThreadTimeMillis(),false);
Run Code Online (Sandbox Code Playgroud)但是,如果手机处于睡眠状态,则不会唤醒手机.
有没有办法在不使用预览表面视图的情况下拍照?
有没有办法拍摄不依赖异步回调的图片?我可以将所有代码放在Activities onResume()方法中来拍照吗?
有没有办法让Activity的onResume()方法运行得足够长,以便摄像头的预览有足够的时间来初始化并调用所有的监听器?
我正确使用了唤醒锁,并且我在清单文件中正确设置了所有权限.我的活动没有保持足够长的时间以使异步侦听器正常工作.
为了解决这个问题,我试图让所有Android 1.6兼容,因为这是我唯一可以访问的测试设备.
这是令人沮丧的事情!