Android手电筒应用,可以打开灯但不关闭

时间:2015-02-19 19:27:06

标签: android android-studio flashlight

刚进入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();
                }
            }
            }



    });


}


}

1 个答案:

答案 0 :(得分:1)

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

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

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