【问题标题】:Android flashlight app, can turn light on but not off安卓手电筒应用,能开灯不能关灯
【发布时间】:2015-02-19 19:27:06
【问题描述】:

刚开始接触 Android 编程,这是我的第一个应用。它本质上是一个切换按钮,用于打开或关闭灯。该应用程序加载正常,如果我按下按钮它会正常打开,但是如果我在它打开时将其关闭,我会收到“应用程序已停止工作”消息并关闭。

有人能指出我哪里出错了吗?谢谢

public class MainActivity extends ActionBarActivity {
int flag = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    final ImageButton button = (ImageButton) findViewById(R.id.imageButton);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {


            EditText editText = (EditText) findViewById(R.id.editText);

            if (flag==0) {
                flag=1;
                editText.setText("ON");
                Camera camera = Camera.open();
                Camera.Parameters p = camera.getParameters();
                p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                camera.setParameters(p);
                camera.startPreview();

            }
            else {
                if (flag == 1) {
                    flag = 0;
                    editText.setText("OFF");
                    Camera camera = Camera.open();
                    Camera.Parameters p = camera.getParameters();
                    p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                    camera.setParameters(p);
                    camera.stopPreview();
                }
            }
            }



    });


}


}

【问题讨论】:

  • 原木猫说什么?

标签: android android-studio flashlight


【解决方案1】:

首先,当你得到它时,这意味着你崩溃了。发生这种情况时,堆栈跟踪和异常类型将在您的 logcat 中。这将告诉您如何调试。

但是在这种情况下,我可以告诉你发生了什么。当您调用 Camera.open() 时,您将收到一个您拥有的相机对象,直到您释放它。您需要保存它,并在您的应用程序完成后(退出时)释放它。因此,在您的关闭代码中,当您再次调用 Camera.open 时,它会返回 null,因为您已经拥有该相机,并且它无法再次将其提供给您。

实际上,您需要考虑 Camera.open 在您调用它时返回 null - 另一个应用程序可能已请求相机,在这种情况下,操作系统无法将其提供给您并返回 null。

【讨论】:

  • 谢谢,你说我打开相机对象时需要保存这个是什么意思?另外,一旦我完成使用它,我该如何释放它?抱歉,我对此有点陌生!
  • 您需要将返回的相机对象存储在一个变量中,而不是再次调用camera.open。要发布,请调用 camera.release
  • 谢谢 - 我添加了相机 camera = Camera.open();在全局变量中,例如 int flag。这现在似乎工作正常,但我没有在任何地方添加 release(),这很糟糕吗?
  • 不释放它,其他应用程序将无法使用相机,直到您的应用程序被杀死。
  • 好的,我已经添加了 onDestroy() 方法并从那里释放,这是否足够?编辑:显然这不是我需要做的,我会想更多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多