我正在使用PhoneGap的navigator.camera.getPicture
功能从Android上的设备相机中检索照片.
function onSuccess(imageData) { alert("Success!"); } function onFail(message) { alert('Failed because: ' + message); } $(function() { $("button").tap(function() { navigator.camera.getPicture(onSuccess, onFail, { quality: 50 }); }); });
当我单击按钮时,它确实启动了相机,但是当我在拍照后在相机应用上单击"确定"时,它会重新启动应用程序.
我试过了:
使用不同的源类型.
使用不同的目标类型.
降低质量.
有任何想法吗?
编辑:我也在github上发了一个问题.
这个问题实际上并不是关于Phonegap的.这也是本机Android应用程序的常见问题.
这是因为当触发相机时,android活动进入后台(onStop状态),等待相机拍照.然后GC在摄像机动作结束前杀死活动以释放记忆,当摄像机完成后,你的活动已经死亡.这就是应用程序重新启动的原因.
它位于Android Lifecycle docs(http://developer.android.com/reference/android/app/Activity.html)上:
如果活动被另一个活动完全遮挡,则会停止活动.它仍然保留所有状态和成员信息,但是,它不再对用户可见,因此其窗口被隐藏,并且当其他地方需要内存时,它通常会被系统杀死.
通过访问导致您的活动变为背景的媒体库或其他资源也会发生同样的情况.Phonegap(现为Cordova)团队已经在努力改进这一点(https://issues.apache.org/jira/browse/CB-14).
我们在公司遇到了这个问题,解决方案是本地开发一个Phonegap插件来使用我们的定制相机,然后我们的活动永远不会进入onStop状态.按照http://developer.android.com/guide/topics/media/camera.html#custom-camera上的android API说明进行操作.
拜拜!
编辑1:
我们提交了一个名为Foreground Camera Plugin的Google Code项目,修复了Android Camera重启Phonegap应用程序的问题.关于如何使用它也有一些方向.请参阅:http://code.google.com/p/foreground-camera-plugin/
编辑2:
由于这个问题也发生在图库中,我们提交了另一个名为Foreground Gallery Plugin的 Google Code项目,它与Cordova一起使用并修复了这个问题.请参阅:http://code.google.com/p/foreground-gallery-plugin/
请注意,如果您直接在Android手机上测试此应用程序,则" 开发人员选项 "中会有一个名为" 不要保留活动 "的选项.选中此选项后,它会在您离开时删除该活动.特别是在相机(以及从您的活动中获得的其他应用程序)的情况下,它将重新启动您的活动.
取消选中此项,看看是否有帮助.