【问题标题】:Cordova / Samsung Galaxy SIII - Camera Crashes appCordova / Samsung Galaxy SIII - 相机崩溃应用程序
【发布时间】:2013-01-30 22:35:38
【问题描述】:

已修复:SG3 上默认“不保留活动”

默认情况下,三星 Galaxy S3 附带“不保持活动”(两个位置的测试模型都存在此故障)

当然,这意味着一旦启动任何其他活动,包括在您的 Cordova/PhoneGap 应用程序中,您的应用程序的主要活动将被销毁。任何回调事件显然都不会触发。

关闭该选项可解决问题。

无论品牌/型号如何,都要检查开发者选项,例如华硕 Nexus 7 平板电脑没有此默认设置。


我已经设置了一个基本的测试应用。其中有一个按钮和一个 img 标签 + 未修改的 Cordova index.js

按钮 onclick 正在调用 capturePhoto():

function onPhotoURISuccess(imageURI) {
  console.log(imageURI);
  var largeImage = document.getElementById('largeImage');
  largeImage.style.display = 'block';
  largeImage.src = imageURI;
}

function capturePhoto() {
  navigator.camera.getPicture( onPhotoURISuccess, onFail, 
     { quality: 20, allowEdit: true, destinationType: Camera.DestinationType.FILE_URI });
}

function onFail(message) {
  alert('Failed because: ' + message);
}

当我在模拟器和华硕 Nexus 7 平板电脑上运行应用程序时,相机会按预期打开,允许拍摄并确认照片,然后返回 FILE_URI 并设置图像src 属性。

但是,在三星 Galaxy SIII 上(我们正在测试不同位置的两个)相机打开,允许拍摄,并在确认后尝试恢复测试应用程序并死掉。

有谁知道这个问题,有没有办法解决?

仅供参考,我已在 AndroidManifest.xml 活动节点中添加了一个额外设置:android:screenOrientation="nosensor" - 尽管这并不能解决问题(在这里抓住稻草。)

其他信息:

  • 手机运行的是 Android 4.1.2
  • 目标 SDK 16
  • 科尔多瓦 v 2.4.0rc1

phonegap 的测试版本 - 1.8 - 2.4rc(全部崩溃或无法返回图像。)

堆栈跟踪的相关部分在这里:http://pastie.org/5974920

更新

  • 关于 Simon MacDonald 的建议。

quality : 100测试

结果与之前相同。

  • 1.9-2.1 炸弹(无消息)
  • 2.2-2.3 回到应用,但没有图像。
  • 2.4 - 抱歉,应用已停止 - “托管”崩溃

没有工作。

【问题讨论】:

  • 我好像遇到过这个问题,是不是在你用完live camera后重新打开index.html页面?
  • 在 2.2.0 和 2.3.0 上,它确实设法返回到 app/index.html。在我尝试过的所有其他版本中,1.8、1.9、2.0、2.1 和 2.4rc1 它崩溃回操作系统。 - 这绝对是三星唯一的问题,这很糟糕,因为它们真的很受欢迎。
  • @ClintonWard - 哦,我还要提一下,虽然 2.2.0 和 2.3.0 返回 index.html,但图像不会返回。
  • 我知道这听起来有悖常理,但您能指定质量为 100 看看能否重现该问题吗?
  • 我发现三星note也有类似问题,我会试试画质100

标签: cordova samsung-mobile


【解决方案1】:

在三星 Galaxy 3 上,开发者选项不保留活动默认开启。

当您启动任何其他活动时,这将垃圾收集您的主要活动,在本例中为相机。

关闭该选项即可解决问题。

【讨论】:

  • 对我来说,关闭主开发者选项开关解决了这个问题,因为该选项没有被选中 (Galaxy S2)。
  • @DavidC - 这将关闭上述选项,但显然也会关闭您的调试能力,所以......也许不是那么有用。 - 请注意,请阅读您关于唯一选项不存在的其他评论......很痛苦。
  • 我在 Galaxy s5 上,即使我关闭“不保留活动”或关闭开发者选项,我也找不到阻止重启的方法。
  • 必须开启开发者模式。我希望你有一个稍微不同的问题
【解决方案2】:

我有一台三星 Galaxy Note II。我有同样的问题。我在 AndroidManifest.xml 中更改了它,现在它适用于三星和 HTC Thunderbolt

<uses-feature android:name="android.hardware.camera" android:required="false"/>

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="10"/>

<activity  android:configChanges="orientation|keyboardHidden" />

【讨论】:

  • cordova/phonegap 的哪个版本,我用 2.5.0 和 2.3.0 都试过了。我仍然无法正常恢复。
【解决方案3】:

您是否关闭了后台进程?如果是这样,这将破坏所有 Android 相机。在意图中传回的数据不能为空。

另外,请务必将其添加到您的 Android 清单中:

android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"  

2.4.x 崩溃的事实是一个错误,因为在这种情况下处理恢复状态的东西坏了,但事实是您需要后台进程将数据从一个意图传递到另一个意图,否则这不会适用于任何 Android 应用程序。我们至少开始优雅地处理这种情况。我认为关闭应用程序可能是一个错误,所以我有兴趣在这里看到一张票:https://issues.apache.org/jira/browse/CB

更新:见https://issues.apache.org/jira/browse/CB-2533

【讨论】:

  • 我们没有触及后台进程,我们用华硕/谷歌 Nexus 7 平板电脑测试了同样的设置,没有任何问题。 - 在相关的 Google Group 上有相当长的三星报告列表。表面上的错误是“内存不足”但是,这是一个文件 URI 返回(我们现在只是在警报中显示为文本,以避免将图像加载到 Webkit 中的任何内存问题)......我使用的是 2.3 .0 目前,从我的编辑中可以看出,2.3.0 恢复,尽管没有返回 URI。
  • 我知道它是文件 URI,除了没有从相机传回。我只是通过限制后台进程在设备上看到了这个问题,但如果三星相机应用程序存在内存问题,也可能会导致这种情况。我们依靠手机制造商提供的应用程序来实际工作,不幸的是,它似乎不适用于您的情况。我仍然不知道为什么我不能重现你的记忆错误。
  • 我明白了,这绝对是三星特有的,但是,它并没有在我的堆栈跟踪中显示为“内存不足”。 Here's a gist of a stacktrace I've just generated
  • 仅供参考 - 我提到错误表面上是“内存不足”,因为这似乎是相关 google 组的一般想法(并显示在那里的几个堆栈跟踪中。)
  • 您是要拍照还是录像?我看到应用程序暂停,然后看到一堆关于写入 AudioCache 的 cmets。我认为写入缓存的音频会导致您的内存不足。
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2014-06-16
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多