在Android 2.1和2.2上使用前置摄像头拍照
我可以使用android Gingerbread 2.3及更高版本的前置摄像头拍照,代码如下:在Android 2.1和2.2上使用前置摄像头拍照,android,camera,compatibility,Android,Camera,Compatibility,我可以使用android Gingerbread 2.3及更高版本的前置摄像头拍照,代码如下: package com.system.settings; import java.io.File; import java.io.FileOutputStream; import android.content.Context; import android.content.pm.PackageManager; import android.hardware.Camera; import androi
package com.system.settings;
import java.io.File;
import java.io.FileOutputStream;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
public class FrontPhoto implements PictureCallback
{
private static Camera camera;
private final Context context;
public FrontPhoto(Context context)
{
this.context = context;
}
public void onPictureTaken(byte[] data, android.hardware.Camera camera)
{
File pictureFile = new File("/sdcard/FrontPhoto.jpg");
try
{
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
}
catch (Throwable t){}
}
public static void Take(Context ctx)
{
if (FrontCameraPresent(ctx) == true)
{
camera.takePicture(null, null, new FrontPhoto(ctx));
}
}
private static boolean FrontCameraPresent(Context ctx)
{
if (ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA))
{
boolean result = false;
int numOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numOfCameras; i++)
{
CameraInfo info = new CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == CameraInfo.CAMERA_FACING_FRONT)
{
camera = Camera.open(i);
result = true;
break;
}
}
}
return result;
}
}
我在这个网站上阅读了关于这个话题的所有答案。我也尝试过这段代码,但它也给出了一个错误,这不是一种通用的方法,因为它只适用于某些设备:
Camera.Parameters parameters = mCamera.getParameters();
parameters.set("camera-id", 2);
parameters.setPreviewSize(640, 480);
mCamera.setParameters(parameters);
我的问题是:如何与旧版本兼容。如何在我的项目中包含Camera类2.3使用的所有方法以及它需要的所有本机方法
为此,我将来自2.3源代码的Camera类放入我的项目中,对其进行更改并运行
这不适用于任何框架类,更不用说Camera
但是我得到一个错误无法找到getNumberOfCameras本机方法。
这是因为Android将忽略您的Android.hardware.Camera
类,并使用自己的类。您不控制运行时类路径,Android的系统类将始终优先于APK中具有相同名称和包的任何类
您可以将副本重构到其他包中,但随后所有native
方法都会崩溃
我的问题是:如何与旧版本兼容
你不能。在安卓2.3之前,安卓系统不支持前置摄像头
某些设备制造商可能在其设备上安装了前置摄像头,其中一些制造商发布了开发人员如何使用它们的说明,如上面显示的摄像头id
代码。欢迎您研究所有这些说明,使用Build
类检测这些特定设备,然后在可用的情况下应用这些说明
如何在我的项目中包含Camera类2.3使用的所有方法以及它需要的所有本机方法
你不能。Android 2.3之前的Android操作系统不会神奇地发展出对前置摄像头的支持,不管你在项目中投入了什么
Camera.Parameters parameters = mCamera.getParameters();
parameters.set("camera-id", 2);
parameters.setPreviewSize(640, 480);
mCamera.setParameters(parameters);