从不同的活动中获取相机后,有没有办法从不同的活动中释放相机。

时间:2014-04-25 11:01:14

标签: java android camera flashlight

我正在开发一种手电筒应用程序,其中一个活动中有一个普通的手电筒,一个活动中有一个闪光灯。现在我正在onCreate of Flashlight活动中获取相机。但是当我想要频闪活动时,我需要释放FlashLight活动所获得的相机。我不想在onPause of FlashLight活动中释放相机,因为即使用户按下主页按钮也会停止相机。我只想在用户进行频闪活动时释放相机,否则他会通过后退按钮退出应用程序。此外,如果用户从频闪活动回到手电筒活动,我想重新获取相机。无论如何他们都是这样做的。?

4 个答案:

答案 0 :(得分:7)

其他答案告诉你不要这样做以及为什么。但要回答你的问题:

在静态成员变量中保留对Camera实例的引用,最好是在单独的类中,如下所示:

public class Globals {
    public static Camera myCamera;
}

此变量可用作Globals.myCamera的所有活动。

将您从调用Camera获得的Camera.open()实例放入Globals.myCamera。这将适用于这两项活动。当您准备好释放相机时,请致电Globals.myCamera.release(),然后将Globals.myCamera设置为null,表示您无法再控制相机。

答案 1 :(得分:1)

I want to release the camera only when user goes to strobe activity or else he exits the app by back button.

如果您未尽快释放相机资源,则用户将无法使用任何其他应用程序中的相机。例如,如果您的应用程序的用户按下主页按钮,相机对象将被您的应用程序锁定。这将导致麻烦的行为:例如,用户无法启动相机应用程序。

official docs所示:

重要调用release()以释放相机以供其他应用程序使用。应用程序应立即在onPause()

中释放相机

I want to release the camera only when user goes to strobe activity or else he exits the app by back button

如果您没有手动release相机资源,他们将不会被释放只需按下后退按钮并“退出”您的应用。

Also I want to reacquire the camera if the user is coming back to flashlight activity from strobe activity. Is their anyway to do this.?

只需连接onResume()中的相机,然后释放onPause()中的资源。

答案 2 :(得分:0)

我不会要求你停止做你想做的事情或告诉你有关官方建议的事。

您可以通过使用单独的类来使用Camera来实现该功能,并将其所有功能和成员声明为静态。

  • 每当你切换到选通活动时,只需在onCreate of strobe activity中使用该单独的类的静态功能释放相机。
  • 在FlashLight活动的onDestroy()中执行相同的操作,如果您切换到Strobe活动时finish() FlashLight活动,那么您不需要执行上述步骤并且您的工作将仅通过此步骤完成。

答案 3 :(得分:0)

最好的解释是David Wasser给出的。我们可以创建相机的全局实例,然后在需要的地方使用它。

public class Globals {     public static Camera myCamera; }

虽然另一种解决方法是创建按钮以移动到每种类型的灯光,每个灯光都有不同的类别。在这种情况下,我们可以暂停相机上的暂停,因此它不会在按下主页按钮时关闭相机,但是一旦用户进入包含选择相机的按钮的活动,我们就可以释放相机轻型。所以相机在选择时总是免费的。