从一个活动传递Android相机对象到另一个活动

3
在一个安卓手电筒应用中,我正在第一个活动中使用相机:
    Camera camera;
    //later in the code..
    camera = Camera.open();

手电筒的第二个功能是闪光灯,它也使用相机:

    Camera cam;
    cam = Camera.open();

由于相机正在被上一个活动使用,因此无法使用闪光灯。我想将第一次活动中的相机传递到第二个活动中,以使应用程序中只有1个相机对象。

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

有什么好主意吗?还是有更好的方法吗?


在重新打开相机之前,您需要先释放它。无论它是否在另一个活动中都无关紧要。 - Jaa-c
已经完成了一些if语句来检查flash的当前状态,问题已经解决。现在没有崩溃了 :) - user3272823
1个回答

0

对于这个问题单例模式将是一个不错的选择:

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;
}

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

更新

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


尝试过了,但不起作用,在第二个活动中相机仍被视为正在使用。 - user3272823
1
我在第一个活动中释放了相机,并在第二个活动中创建了另一个相机对象。然后在第一个活动的onResume中重新打开第一个相机,一切都正常工作。但是我担心在发布时低端设备会有内存问题。 - user3272823
1
相机本身已经作为单例实现,因此没有必要创建另一个单例。 - Jaa-c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接