[英]Android - camera preview not working
I'm trying to write a camera app for android, but I'm having trouble with getting the preview to work. 我正在尝试为Android编写相机应用程序,但是在使预览正常工作时遇到了麻烦。 I tried to follow the steps that android gives here , but it doesn't work, the app keeps crashing.
我试图按照android在此处给出的步骤进行操作,但是它不起作用,该应用不断崩溃。 I'm not sure what I'm doing wrong, but I'm pretty sure that I followed the steps right.
我不确定自己在做什么错,但是我很确定自己正确地遵循了步骤。
Here is what I have so far: Camera Activity class 到目前为止,这是我所拥有的:Camera Activity类
public class CameraActivity extends Activity
{
private CameraPreview mPreview = null;
private Camera mCamera = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
mCamera = getCameraInstance();
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
public static Camera getCameraInstance()
{
Camera c = null;
try
{
//attempt to get a Camera instance
c = Camera.open();
}
catch(Exception e)
{
//Camera is not available(in use or does not exist)
}
return c;//returns null if camera is unavailable
}
public void onPause()
{
super.onPause();
mCamera.stopPreview();
releaseCamera();
}
private void releaseCamera()
{
if(mCamera != null)
{
mCamera.release();
mCamera = null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.camera, menu);
return true;
}
}
Camera Preview class 相机预览类
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback
{
private final String TAG = "CameraPreview";
private SurfaceHolder mHolder;
private Camera mCamera;
public CameraPreview(Context context, Camera camera)
{
super(context);
mCamera = camera;
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
//deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder)
{
//the Surface has been created, now tell the camera where to draw the preview
try
{
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
}
catch(IOException e)
{
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
}
}
public void surfaceDestroyed(SurfaceHolder holder)
{
//empty. take care of releasing the Camera preview in your activity
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
//if your preview can change or rotate, take care of those events here.
//make sure to stop the preview before resizing of reformatting it.
if(mHolder.getSurface() == null)
{
//preview surface does not exist
return;
}
//stop preview before making changes
try
{
mCamera.stopPreview();
}
catch(Exception e)
{
//ignore: tried to stop a non-existent preview
}
//set preview size and make any resize, rotate or
//reformatting changes here
try
{
//start preview with new settings
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
}
catch(Exception e)
{
Log.d(TAG, "Error starting camera preview: " + e.getMessage());
}
}
}
and this is my .xml for the camera activity: 这是我的相机活动的.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<FrameLayout
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
<Button
android:id="@+id/button_capture"
android:text="Capture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>
</LinearLayout>
As far as I can tell, I followed the guide correctly and it should work. 据我所知,我正确地遵循了指南,它应该可以工作。 Since the next part has to do with recording I figured all the steps until then should produce a working preview, but it doesn't work.
由于下一部分与录制有关,因此我弄清楚了所有步骤,然后才能生成有效的预览,但它不起作用。 Can anyone see something wrong that I need to change?
有人可以看到我需要更改的错误吗? Thanks
谢谢
Edit: Added my manifest manifest.xml 编辑:添加了我的清单manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ics466.project.warpwalker"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.ics466.project.warpwalker.WarpIntro"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.ics466.project.warpwalker.CameraActivity"
android:label="@string/title_activity_camera" >
</activity>
</application>
</manifest>
android:minSdkVersion="8"
should be android:minSdkVersion="9"
android:minSdkVersion="8"
应该是android:minSdkVersion="9"
if you have used some functions which are added in API 9 如果您使用了API 9中添加的某些功能
and Read this link How To Enable Camera in Android Emulator 并阅读此链接如何在Android Emulator中启用相机
Or test this app in a Real Device which has a camera. 或在带有摄像头的真实设备中测试此应用。
On most devices, the default orientation of the camera preview is landscape. 在大多数设备上,相机预览的默认方向是横向。
Try adding android:orientation="horizontal"
in to your .xml file's LinearLayout. 尝试将
android:orientation="horizontal"
添加到.xml文件的LinearLayout中。
try this 尝试这个
Give the CameraId as integer 将CameraId设为整数
Camera.open(0);
http://developer.android.com/reference/android/hardware/Camera.html#open(int) http://developer.android.com/reference/android/hardware/Camera.html#open(int)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.