我想在几个小时内定期从 Android 设备的相机中拍照,以创建延时视频效果。
我设置了一个带有 AlarmManager.RTC_WAKEUP 标志的警报管理器,以每隔几分钟启动一次服务。
该服务持有一个部分唤醒锁,做一些工作,然后通过启动一个活动的警报管理器调用一个广播接收器。
活动被创建(或恢复),打开它自己的唤醒锁,并设置相机预览表面。一旦设置了表面,就会调用 SurfaceHolder 侦听器的 surfaceChanged() 方法,最终拍摄一张照片。
如果设备处于唤醒状态,则一切都按预期完美运行。但是如果设备处于睡眠状态,一旦 Activity 的 onResume() 方法完成,Activity 就会立即暂停。相机的预览表面永远不会完成初始化,也不会拍摄任何照片。
所以我的问题是:
有没有办法以编程方式唤醒手机?我什至尝试使用:
PowerManager powerManager = (PowerManager)this.getSystemService(Context.POWER_SERVICE); powerManager.userActivity(SystemClock.currentThreadTimeMillis(),false);
但是,如果它睡着了,这不会唤醒手机。
有什么方法可以在不使用预览表面视图的情况下拍照?
有没有不依赖异步回调的拍照方式?可以把所有代码都放在Activities onResume()方法中拍照吗?
有没有办法让 Activity 的 onResume() 方法运行足够长的时间,以便相机的预览有足够的时间来初始化和调用所有侦听器?
我正确使用了唤醒锁,并且我在清单文件中正确设置了所有权限。我的活动没有保持足够长的时间让异步侦听器正常工作。
为了使问题更加复杂,我正在尝试保持所有 Android 1.6 兼容,因为这是我可以访问的唯一测试设备。
这是令人沮丧的事情!