我希望能够定期从Android设备的相机中拍摄照片,以创建时间流逝视频效果。
我设置了一个Alarm Manager,并将AlarmManager.RTC_WAKEUP标志设置为每隔几分钟启动一次服务。
该服务持有部分唤醒锁,执行一些工作,然后通过Alarm Manager调用广播接收器,启动一个Activity。
该活动被创建(或已恢复),打开自己的唤醒锁,并设置相机预览表面。一旦表面设置完成,SurfaceHolder监听器的surfaceChanged()方法被调用,最终拍摄照片。
如果设备处于唤醒状态,则一切都按预期正常工作。但是,如果设备处于睡眠状态,则一旦Activity的onResume()方法完成,Activity即会立即暂停。相机的预览表面永远无法完成初始化,也不会拍照。
所以我有以下问题:
我设置了一个Alarm Manager,并将AlarmManager.RTC_WAKEUP标志设置为每隔几分钟启动一次服务。
该服务持有部分唤醒锁,执行一些工作,然后通过Alarm Manager调用广播接收器,启动一个Activity。
该活动被创建(或已恢复),打开自己的唤醒锁,并设置相机预览表面。一旦表面设置完成,SurfaceHolder监听器的surfaceChanged()方法被调用,最终拍摄照片。
如果设备处于唤醒状态,则一切都按预期正常工作。但是,如果设备处于睡眠状态,则一旦Activity的onResume()方法完成,Activity即会立即暂停。相机的预览表面永远无法完成初始化,也不会拍照。
所以我有以下问题:
Is there any way to wake up the phone programmatically? I even try using:
PowerManager powerManager = (PowerManager)this.getSystemService(Context.POWER_SERVICE); powerManager.userActivity(SystemClock.currentThreadTimeMillis(),false);
但是如果手机处于睡眠状态,则不能唤醒它。
有没有不使用预览视图的方式拍照?
有没有一种不依赖异步回调的方法来拍照?我能把所有的代码放在Activity的onResume()方法中拍照吗?
有没有一种方法可以保持Activity的onResume()方法运行足够长的时间,以使相机的预览有足够的时间来初始化并调用所有的监听器?
我正确地使用了wakelocks,并且在清单文件中设置了所有的权限。但我的Activity没有保持足够长的时间,以便异步监听器正常工作。
更糟糕的是,我试图让所有的东西都与Android 1.6兼容,因为那是我唯一能访问的测试设备。
这真是令人沮丧的事情!