【问题标题】:Camera App Orientation refreshes the parent activity?相机应用程序方向刷新父活动?
【发布时间】:2012-10-29 12:22:18
【问题描述】:

我正在开发一个应用程序,其中捕获图像是其中一项功能。在我的主屏幕上,我有两个微调器。选择微调器值后,用户可以通过单击拍照按钮来捕捉图片。直到这个工作正常。但问题在于相机应用方向。

拍照按钮启动相机。当图像被捕获时,它被保存(绝对没问题)并返回到父活动。 但问题是它刷新了活动。回来时,我可以看到以下有线的东西

1.)有时它会显示横向屏幕(1 秒)并返回到纵向屏幕,这会刷新活动并导致重置 Spinner 值。

2.) 有时它只是重置 Spinner 值。

真的很烦。我没有任何线索来解决这个问题。我希望你们中的一些人能解决这个问题。

非常感谢。

【问题讨论】:

  • 关于强制切换到横向,我的食谱中没有对你来说是个好消息。相机应用程序以横向运行,Android 系统有时不够快,无法按照您的活动要求仅运行纵向。这就是为什么我将横向方向用于可能称为相机意图的活动,即使这意味着我必须自己伪造纵向方向。

标签: android android-intent orientation android-camera


【解决方案1】:

当您在另一个应用程序(相机)中启动活动时,最好为任何事情做好准备。活动可能会返回错误数据,屏幕方向可能会更改,或者用户返回您的应用程序可能需要很长时间。根据您的描述,每次启动相机应用时,方向似乎都会发生变化。

Android 有内置的状态管理方法来处理这种类型的场景。您可以覆盖onSaveInstanceState() 方法来存储您的活动状态(例如,微调器值),然后在onCreate() 中恢复该状态。 (例如here。)这将处理您启动相机应用程序或您的用户按下主页按钮然后返回应用程序等情况。

编辑

onRestoreInstanceState() 仅在您的活动因内存压力而被终止并稍后重新创建时才被调用。使用传递给onCreate()Bundle(在设备旋转后再次调用)更可靠。 Bundle 将包含存储在 onSaveInstanceState() 中的所有内容。

如果您需要将工作推迟到onResume(),您需要使用onCreate() 来填充Activity 类中的一些成员变量,然后在onResume() 中使用这些变量。

【讨论】:

  • 感谢您的详细回答。我会尝试这些并回到你身边
  • 我试过你的答案,但永远不会调用 onrestoreInstancestate。还有在 onresume 中调用 onsavedinsatncestate 的任何可能方式。谢谢
  • 您的意思是“在onResume 中呼叫onRestoreInstanceState”吗?您不需要从onResume 调用onRestoreInstanceStateonSaveInstanceState。我已扩展我的答案以解决您的问题。
  • 还可以将任何与 UI 相关的值(例如微调器状态)保存在 onPause() 中,并在 onRestore() 中使用这些值。您可以使用活动对象成员来存储此信息。在调用onSaveInstanceState() 之前,实例不会被销毁。
  • acj 和@Alex Cohn 感谢你们的帮助。它现在完美运行。干杯+1
猜你喜欢
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 2014-06-17
  • 1970-01-01
相关资源
最近更新 更多