作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
刚接触 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();
}
}
}
});
}
}
最佳答案
首先,当你得到它就意味着你崩溃了。发生这种情况时,堆栈跟踪和异常类型将出现在您的 logcat 中。这将告诉您如何调试。
但是在这种情况下,我可以告诉您发生了什么。当您调用 Camera.open() 时,您将收到一个您拥有的相机对象,直到您释放它。您需要保存它,并在您的应用程序完成后(退出时)释放它。因此,在您的关闭代码中,当您再次调用 Camera.open 时,它会返回 null,因为您已经拥有相机并且它无法再次将其提供给您。
实际上,您需要考虑到每次调用 Camera.open 时都会返回 null - 另一个应用可能已请求相机,在这种情况下,操作系统无法将其提供给您并返回 null。
关于Android手电筒应用,可以开灯但不能关灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615149/
我是一名优秀的程序员,十分优秀!