相机:takePicture和CallBack之间的延迟:

时间:2016-04-04 09:24:09

标签: android

第一个电话正常工作
为什么在 mCamera.takePicture()之后没有立即调用onShutter()/ onPictureTaken()?
在下面你可以看到LOG中有超过 6分钟的延迟
    [LOG_03 / 04 / 2016_ 18:0000 ] mCamera.takePicture(mShutterCallback,mRawCallback,mJpgCallback);
    [LOG_03 / 04 / 2016_ 18:0652 ] [SHUTTERCALLBACK]内部onShutter()
    [LOG_03 / 04 / 2016_ 18:0652 ] [RAWCALLBACK]在onPictureTaken()内     [LOG_03 / 04 / 2016_ 18:0653 ] [JPGCALLBACK]内在onPictureTaken()

好的一点是,由于AlarmManager,照片每小时拍摄一次 但是没有延迟或延迟更短会更好
(目标API级别17 - HUAWEI Y330 - Android v4.2.2(Jelly Bean))

更多信息:
在Sony Xperia Z3(SDK 22 / Android 5.1.1)上正常工作 [LOG_04 / 04 / 2016_ 19:0000 ] mCamera.takePicture(mShutterCallback,mRawCallback,mJpgCallback);
[LOG_04 / 04 / 2016_ 19:0002 ] [SHUTTERCALLBACK]内部onShutter()
[LOG_04 / 04 / 2016_ 19:0002 ] [RAWCALLBACK]内在onPictureTaken()
[LOG_04 / 04 / 2016_ 19:0003 ] [JPGCALLBACK]内在onPictureTaken()

1 个答案:

答案 0 :(得分:0)

你说它是在AlarmManager中调用的..你的手机是否在试图拍照时睡觉/锁定?

AlarmManager将在下一次使用时运行。不是马上就到了。

请参阅下面的报价/文档。

请注意,您的设备可能是API 17,但您的目标API可能是API 19或更高版本。

来自文档:http://developer.android.com/reference/android/app/AlarmManager.html#set(int, long, android.app.PendingIntent)

  

注意:从API 19开始,传递给此方法的触发时间被视为不精确:警报将不会在此时间之前传递,但可能会延迟并在稍后传递。操作系统将使用此策略在整个系统中将警报“批处理”在一起,从而最大限度地减少设备需要“唤醒”并最大限度地减少电池使用的次数。一般而言,只要在将来安排的警报,就不会延迟在不久的将来安排的警报。   采用新的配料政策,交货订单保证不像以前那么强大。如果应用程序设置了多个警报,则这些警报的实际交付顺序可能与其请求的交付时间的顺序不匹配。如果您的应用程序具有强大的订购要求,则可以使用其他API来获取必要的行为;请参阅setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。

     

targetSdkVersion 在API 19之前的应用程序将继续获得先前的警报行为:所有计划的警报都将被视为完全警告。

解决这个问题的方法是要么瞄准API 19以下。或者,最好接受你在睡觉时不能拍照的事实,并继续设计原则,它将在唤醒时执行。