Camera.open()返回一直为null是为什么

wang584406938 2013-09-25 02:45:56
import android.hardware.Camera;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements SurfaceHolder.Callback
{
Camera camera;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
Button btnOpen;
Button btnClose;
Boolean isPreview=false;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView=(SurfaceView)findViewById(R.id.surfaceView);

btnOpen=(Button)findViewById(R.id.open);
btnClose=(Button)findViewById(R.id.close);
surfaceHolder=surfaceView.getHolder();
surfaceHolder.addCallback(this);
btnOpen.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
initCamera();
}
});
btnClose.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
if (camera!=null && isPreview)
{
camera.stopPreview();
camera.release();
camera=null;
isPreview=false;
}
}
});
}

public void initCamera(){
if (!isPreview)
{
camera=Camera.open();
}
if (camera!=null && !isPreview)
{
try
{
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (Exception e)
{
// TODO: handle exception
e.printStackTrace();
}
isPreview=true;
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public void surfaceCreated(SurfaceHolder holder)
{
// TODO Auto-generated method stub

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
// TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
// TODO Auto-generated method stub

}

}

权限
	<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name = "android.hardware.camera" />
<uses-feature android:name = "android.hardware.camera.autofocus" />
...全文
949 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
顾小林 2013-10-31
  • 打赏
  • 举报
回复
引用 3 楼 wang584406938 的回复:
[quote=引用 2 楼 guoyoulei520 的回复:]
call getNumberOfCameras
  /**
     * Returns the number of physical cameras available on this device.
   */
你是不是在模拟器上跑的?
嗯 在模拟器跑的,刚刚从网上找到一个解决办法,给open()方法加个参数0,就能直接调用后值相机,在模拟器就能显示出相机画面,不加参数就一直返回的null,不知道为什么[/quote] 摄像头的测试 建议在真机上做
顾小林 2013-10-31
  • 打赏
  • 举报
回复
引用 4 楼 sno_guo 的回复:
谢谢,解决了我的问题, 估计是android支持两个摄像头吧, 需要设置摄像头的id号,比如 0, 1这样的吧.呵呵
默认的.open() -> 指向的是 open(0) 这个0或者1 是camera 驱动注册时候 系统赋予 前置后置的
sno_guo 2013-10-29
  • 打赏
  • 举报
回复
谢谢,解决了我的问题, 估计是android支持两个摄像头吧, 需要设置摄像头的id号,比如 0, 1这样的吧.呵呵
wang584406938 2013-09-25
  • 打赏
  • 举报
回复
引用 2 楼 guoyoulei520 的回复:
call getNumberOfCameras
  /**
     * Returns the number of physical cameras available on this device.
   */
你是不是在模拟器上跑的?
嗯 在模拟器跑的,刚刚从网上找到一个解决办法,给open()方法加个参数0,就能直接调用后值相机,在模拟器就能显示出相机画面,不加参数就一直返回的null,不知道为什么
凉凉二点凉 2013-09-25
  • 打赏
  • 举报
回复
call getNumberOfCameras
  /**
     * Returns the number of physical cameras available on this device.
   */
你是不是在模拟器上跑的?
wang584406938 2013-09-25
  • 打赏
  • 举报
回复
没有高手帮忙看下么

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧