【问题标题】:Passing android Camera object from one activity to another将android Camera对象从一个活动传递到另一个活动
【发布时间】:2014-03-15 15:26:02
【问题描述】:

在一个安卓手电筒应用中,我在第一个活动中使用相机:

    Camera camera;
    //later in the code..
    camera = Camera.open();

手电筒的第二个活动,是一个也使用相机的频闪灯:

    Camera cam;
    cam = Camera.open();

由于前一个活动正在使用相机,因此无法使用频闪灯。我想将第一个活动中的相机传递给第二个活动,以便在应用中只有一个相机对象。

我尝试实现 Serializable 但它无法传递相机对象

知道怎么做吗?或者有什么更好的方法

【问题讨论】:

  • 您需要先释放相机才能再次打开它。是否在其他活动中都没关系。
  • 除了一些针对当前闪存状态的 if 语句外,已经这样做了,问题已解决。现在没有崩溃:)

标签: android android-camera


【解决方案1】:

单例模式就可以了:

public class StaticCamera{
private StaticCamera instance;
public static synchronized StaticCamera getInstance(){

if(instance == null){
instance = new StaticCamera();
}
return instance;
}
private Camera mCamera;
private StaticCamera(){
mCamera = Camera.open();
}

}

为 mCamera 字段添加 getter 方法,您只需调用 StaticCamera.getInstance().getCamera() 即可获得所需的一切

很重要的事情——你也应该编写发布方法,比如:

public static void dispose(){
instance == null;
}

只是为了让垃圾收集器在不再需要时收集对象(当然你需要手动调用它)。

更新

我展示了如何将对象引用从一个活动传递到另一个活动。您的问题是您试图在活动之间打开和关闭灯。如果只有闪光灯,最好的选择是只有一个 Activity 并使用片段来切换 UI。

【讨论】:

  • 试过了,没用,相机还在使用中,在第二个活动中。
  • 我在第一个活动中释放了相机,并在第二个活动中创建了另一个相机对象。然后在第一个活动的继续我再次打开第一个相机,一切正常。但我害怕有内存问题当我发布它时在低端设备上?
  • 相机本身是作为单例实现的,所以创建另一个单例没有意义。
猜你喜欢
  • 2013-01-12
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
相关资源
最近更新 更多